@draftlab/auth 0.15.0 → 0.16.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 (272) hide show
  1. package/dist/esm/allow.js +26 -0
  2. package/dist/esm/client.js +254 -0
  3. package/dist/esm/core.js +597 -0
  4. package/dist/esm/css.d.js +0 -0
  5. package/dist/esm/error.js +88 -0
  6. package/dist/esm/index.js +5 -0
  7. package/dist/esm/keys.js +126 -0
  8. package/dist/esm/mutex.js +53 -0
  9. package/dist/esm/pkce.js +87 -0
  10. package/dist/esm/provider/apple.js +15 -0
  11. package/dist/esm/provider/code.js +62 -0
  12. package/dist/esm/provider/discord.js +15 -0
  13. package/dist/esm/provider/facebook.js +15 -0
  14. package/dist/esm/provider/github.js +15 -0
  15. package/dist/esm/provider/gitlab.js +15 -0
  16. package/dist/esm/provider/google.js +16 -0
  17. package/dist/esm/provider/linkedin.js +15 -0
  18. package/dist/esm/provider/magiclink.js +83 -0
  19. package/dist/esm/provider/microsoft.js +15 -0
  20. package/dist/esm/provider/oauth2.js +130 -0
  21. package/dist/esm/provider/password.js +331 -0
  22. package/dist/esm/provider/provider.js +18 -0
  23. package/dist/esm/provider/reddit.js +15 -0
  24. package/dist/esm/provider/slack.js +15 -0
  25. package/dist/esm/provider/spotify.js +15 -0
  26. package/dist/esm/provider/twitch.js +15 -0
  27. package/dist/esm/provider/vercel.js +17 -0
  28. package/dist/esm/random.js +40 -0
  29. package/dist/esm/revocation.js +27 -0
  30. package/dist/esm/storage/memory.js +110 -0
  31. package/dist/esm/storage/storage.js +56 -0
  32. package/dist/esm/storage/turso.js +93 -0
  33. package/dist/esm/storage/unstorage.js +78 -0
  34. package/dist/esm/subject.js +7 -0
  35. package/dist/esm/themes/theme.js +115 -0
  36. package/dist/esm/toolkit/client.js +119 -0
  37. package/dist/esm/toolkit/index.js +25 -0
  38. package/dist/esm/toolkit/providers/facebook.js +11 -0
  39. package/dist/esm/toolkit/providers/github.js +11 -0
  40. package/dist/esm/toolkit/providers/google.js +11 -0
  41. package/dist/esm/toolkit/providers/strategy.js +0 -0
  42. package/dist/esm/toolkit/storage.js +81 -0
  43. package/dist/esm/toolkit/utils.js +18 -0
  44. package/dist/esm/types.js +0 -0
  45. package/dist/esm/ui/base.js +478 -0
  46. package/dist/esm/ui/code.js +186 -0
  47. package/dist/esm/ui/form.js +46 -0
  48. package/dist/esm/ui/icon.js +242 -0
  49. package/dist/esm/ui/magiclink.js +158 -0
  50. package/dist/esm/ui/password.js +435 -0
  51. package/dist/esm/ui/select.js +102 -0
  52. package/dist/esm/util.js +59 -0
  53. package/dist/{allow.d.mts → types/allow.d.ts} +9 -11
  54. package/dist/types/allow.d.ts.map +1 -0
  55. package/dist/types/client.d.ts +462 -0
  56. package/dist/types/client.d.ts.map +1 -0
  57. package/dist/types/core.d.ts +113 -0
  58. package/dist/types/core.d.ts.map +1 -0
  59. package/dist/{error.d.mts → types/error.d.ts} +95 -97
  60. package/dist/types/error.d.ts.map +1 -0
  61. package/dist/types/index.d.ts +2 -0
  62. package/dist/types/index.d.ts.map +1 -0
  63. package/dist/{keys.d.mts → types/keys.d.ts} +20 -24
  64. package/dist/types/keys.d.ts.map +1 -0
  65. package/dist/types/mutex.d.ts +42 -0
  66. package/dist/types/mutex.d.ts.map +1 -0
  67. package/dist/{pkce.d.mts → types/pkce.d.ts} +10 -11
  68. package/dist/types/pkce.d.ts.map +1 -0
  69. package/dist/types/provider/apple.d.ts +197 -0
  70. package/dist/types/provider/apple.d.ts.map +1 -0
  71. package/dist/types/provider/code.d.ts +288 -0
  72. package/dist/types/provider/code.d.ts.map +1 -0
  73. package/dist/types/provider/discord.d.ts +206 -0
  74. package/dist/types/provider/discord.d.ts.map +1 -0
  75. package/dist/types/provider/facebook.d.ts +200 -0
  76. package/dist/types/provider/facebook.d.ts.map +1 -0
  77. package/dist/types/provider/github.d.ts +220 -0
  78. package/dist/types/provider/github.d.ts.map +1 -0
  79. package/dist/types/provider/gitlab.d.ts +180 -0
  80. package/dist/types/provider/gitlab.d.ts.map +1 -0
  81. package/dist/types/provider/google.d.ts +158 -0
  82. package/dist/types/provider/google.d.ts.map +1 -0
  83. package/dist/types/provider/linkedin.d.ts +190 -0
  84. package/dist/types/provider/linkedin.d.ts.map +1 -0
  85. package/dist/types/provider/magiclink.d.ts +141 -0
  86. package/dist/types/provider/magiclink.d.ts.map +1 -0
  87. package/dist/types/provider/microsoft.d.ts +247 -0
  88. package/dist/types/provider/microsoft.d.ts.map +1 -0
  89. package/dist/types/provider/oauth2.d.ts +229 -0
  90. package/dist/types/provider/oauth2.d.ts.map +1 -0
  91. package/dist/types/provider/password.d.ts +408 -0
  92. package/dist/types/provider/password.d.ts.map +1 -0
  93. package/dist/types/provider/provider.d.ts +226 -0
  94. package/dist/types/provider/provider.d.ts.map +1 -0
  95. package/dist/types/provider/reddit.d.ts +159 -0
  96. package/dist/types/provider/reddit.d.ts.map +1 -0
  97. package/dist/types/provider/slack.d.ts +171 -0
  98. package/dist/types/provider/slack.d.ts.map +1 -0
  99. package/dist/types/provider/spotify.d.ts +168 -0
  100. package/dist/types/provider/spotify.d.ts.map +1 -0
  101. package/dist/types/provider/twitch.d.ts +163 -0
  102. package/dist/types/provider/twitch.d.ts.map +1 -0
  103. package/dist/types/provider/vercel.d.ts +294 -0
  104. package/dist/types/provider/vercel.d.ts.map +1 -0
  105. package/dist/{random.d.mts → types/random.d.ts} +4 -6
  106. package/dist/types/random.d.ts.map +1 -0
  107. package/dist/types/revocation.d.ts +76 -0
  108. package/dist/types/revocation.d.ts.map +1 -0
  109. package/dist/{storage/memory.d.mts → types/storage/memory.d.ts} +17 -21
  110. package/dist/types/storage/memory.d.ts.map +1 -0
  111. package/dist/types/storage/storage.d.ts +177 -0
  112. package/dist/types/storage/storage.d.ts.map +1 -0
  113. package/dist/{storage/turso.d.mts → types/storage/turso.d.ts} +4 -8
  114. package/dist/types/storage/turso.d.ts.map +1 -0
  115. package/dist/{storage/unstorage.d.mts → types/storage/unstorage.d.ts} +12 -11
  116. package/dist/types/storage/unstorage.d.ts.map +1 -0
  117. package/dist/types/subject.d.ts +115 -0
  118. package/dist/types/subject.d.ts.map +1 -0
  119. package/dist/types/themes/theme.d.ts +207 -0
  120. package/dist/types/themes/theme.d.ts.map +1 -0
  121. package/dist/types/toolkit/client.d.ts +235 -0
  122. package/dist/types/toolkit/client.d.ts.map +1 -0
  123. package/dist/types/toolkit/index.d.ts +45 -0
  124. package/dist/types/toolkit/index.d.ts.map +1 -0
  125. package/dist/types/toolkit/providers/facebook.d.ts +8 -0
  126. package/dist/types/toolkit/providers/facebook.d.ts.map +1 -0
  127. package/dist/types/toolkit/providers/github.d.ts +8 -0
  128. package/dist/types/toolkit/providers/github.d.ts.map +1 -0
  129. package/dist/types/toolkit/providers/google.d.ts +8 -0
  130. package/dist/types/toolkit/providers/google.d.ts.map +1 -0
  131. package/dist/types/toolkit/providers/strategy.d.ts +38 -0
  132. package/dist/types/toolkit/providers/strategy.d.ts.map +1 -0
  133. package/dist/{toolkit/storage.d.mts → types/toolkit/storage.d.ts} +37 -39
  134. package/dist/types/toolkit/storage.d.ts.map +1 -0
  135. package/dist/{toolkit/utils.d.mts → types/toolkit/utils.d.ts} +2 -4
  136. package/dist/types/toolkit/utils.d.ts.map +1 -0
  137. package/dist/types/types.d.ts +92 -0
  138. package/dist/types/types.d.ts.map +1 -0
  139. package/dist/types/ui/base.d.ts +18 -0
  140. package/dist/types/ui/base.d.ts.map +1 -0
  141. package/dist/types/ui/code.d.ts +43 -0
  142. package/dist/types/ui/code.d.ts.map +1 -0
  143. package/dist/types/ui/form.d.ts +24 -0
  144. package/dist/types/ui/form.d.ts.map +1 -0
  145. package/dist/types/ui/icon.d.ts +60 -0
  146. package/dist/types/ui/icon.d.ts.map +1 -0
  147. package/dist/types/ui/magiclink.d.ts +41 -0
  148. package/dist/types/ui/magiclink.d.ts.map +1 -0
  149. package/dist/types/ui/password.d.ts +43 -0
  150. package/dist/types/ui/password.d.ts.map +1 -0
  151. package/dist/types/ui/select.d.ts +33 -0
  152. package/dist/types/ui/select.d.ts.map +1 -0
  153. package/dist/{util.d.mts → types/util.d.ts} +11 -13
  154. package/dist/types/util.d.ts.map +1 -0
  155. package/package.json +10 -16
  156. package/dist/adapters/node.d.mts +0 -18
  157. package/dist/adapters/node.mjs +0 -69
  158. package/dist/allow.mjs +0 -63
  159. package/dist/client.d.mts +0 -456
  160. package/dist/client.mjs +0 -283
  161. package/dist/core.d.mts +0 -110
  162. package/dist/core.mjs +0 -595
  163. package/dist/error.mjs +0 -237
  164. package/dist/index.d.mts +0 -2
  165. package/dist/index.mjs +0 -3
  166. package/dist/keys.mjs +0 -146
  167. package/dist/mutex.d.mts +0 -44
  168. package/dist/mutex.mjs +0 -110
  169. package/dist/pkce.mjs +0 -157
  170. package/dist/provider/apple.d.mts +0 -111
  171. package/dist/provider/apple.mjs +0 -164
  172. package/dist/provider/code.d.mts +0 -228
  173. package/dist/provider/code.mjs +0 -246
  174. package/dist/provider/discord.d.mts +0 -146
  175. package/dist/provider/discord.mjs +0 -156
  176. package/dist/provider/facebook.d.mts +0 -142
  177. package/dist/provider/facebook.mjs +0 -150
  178. package/dist/provider/github.d.mts +0 -140
  179. package/dist/provider/github.mjs +0 -169
  180. package/dist/provider/gitlab.d.mts +0 -106
  181. package/dist/provider/gitlab.mjs +0 -147
  182. package/dist/provider/google.d.mts +0 -112
  183. package/dist/provider/google.mjs +0 -109
  184. package/dist/provider/linkedin.d.mts +0 -132
  185. package/dist/provider/linkedin.mjs +0 -142
  186. package/dist/provider/magiclink.d.mts +0 -89
  187. package/dist/provider/magiclink.mjs +0 -143
  188. package/dist/provider/microsoft.d.mts +0 -178
  189. package/dist/provider/microsoft.mjs +0 -177
  190. package/dist/provider/oauth2.d.mts +0 -176
  191. package/dist/provider/oauth2.mjs +0 -222
  192. package/dist/provider/passkey.d.mts +0 -104
  193. package/dist/provider/passkey.mjs +0 -320
  194. package/dist/provider/password.d.mts +0 -412
  195. package/dist/provider/password.mjs +0 -363
  196. package/dist/provider/provider.d.mts +0 -227
  197. package/dist/provider/provider.mjs +0 -44
  198. package/dist/provider/reddit.d.mts +0 -107
  199. package/dist/provider/reddit.mjs +0 -127
  200. package/dist/provider/slack.d.mts +0 -114
  201. package/dist/provider/slack.mjs +0 -138
  202. package/dist/provider/spotify.d.mts +0 -113
  203. package/dist/provider/spotify.mjs +0 -135
  204. package/dist/provider/totp.d.mts +0 -112
  205. package/dist/provider/totp.mjs +0 -191
  206. package/dist/provider/twitch.d.mts +0 -108
  207. package/dist/provider/twitch.mjs +0 -131
  208. package/dist/provider/vercel.d.mts +0 -177
  209. package/dist/provider/vercel.mjs +0 -230
  210. package/dist/random.mjs +0 -86
  211. package/dist/revocation.d.mts +0 -55
  212. package/dist/revocation.mjs +0 -63
  213. package/dist/router/context.d.mts +0 -21
  214. package/dist/router/context.mjs +0 -193
  215. package/dist/router/cookies.d.mts +0 -8
  216. package/dist/router/cookies.mjs +0 -13
  217. package/dist/router/index.d.mts +0 -21
  218. package/dist/router/index.mjs +0 -107
  219. package/dist/router/matcher.d.mts +0 -15
  220. package/dist/router/matcher.mjs +0 -76
  221. package/dist/router/middleware/cors.d.mts +0 -15
  222. package/dist/router/middleware/cors.mjs +0 -114
  223. package/dist/router/safe-request.d.mts +0 -52
  224. package/dist/router/safe-request.mjs +0 -160
  225. package/dist/router/types.d.mts +0 -67
  226. package/dist/router/types.mjs +0 -1
  227. package/dist/router/variables.d.mts +0 -12
  228. package/dist/router/variables.mjs +0 -20
  229. package/dist/storage/memory.mjs +0 -125
  230. package/dist/storage/storage.d.mts +0 -179
  231. package/dist/storage/storage.mjs +0 -104
  232. package/dist/storage/turso.mjs +0 -117
  233. package/dist/storage/unstorage.mjs +0 -103
  234. package/dist/subject.d.mts +0 -62
  235. package/dist/subject.mjs +0 -36
  236. package/dist/themes/theme.d.mts +0 -209
  237. package/dist/themes/theme.mjs +0 -120
  238. package/dist/toolkit/client.d.mts +0 -169
  239. package/dist/toolkit/client.mjs +0 -209
  240. package/dist/toolkit/index.d.mts +0 -9
  241. package/dist/toolkit/index.mjs +0 -9
  242. package/dist/toolkit/providers/facebook.d.mts +0 -12
  243. package/dist/toolkit/providers/facebook.mjs +0 -16
  244. package/dist/toolkit/providers/github.d.mts +0 -12
  245. package/dist/toolkit/providers/github.mjs +0 -16
  246. package/dist/toolkit/providers/google.d.mts +0 -12
  247. package/dist/toolkit/providers/google.mjs +0 -20
  248. package/dist/toolkit/providers/strategy.d.mts +0 -40
  249. package/dist/toolkit/providers/strategy.mjs +0 -1
  250. package/dist/toolkit/storage.mjs +0 -157
  251. package/dist/toolkit/utils.mjs +0 -30
  252. package/dist/types.d.mts +0 -94
  253. package/dist/types.mjs +0 -1
  254. package/dist/ui/base.d.mts +0 -30
  255. package/dist/ui/base.mjs +0 -407
  256. package/dist/ui/code.d.mts +0 -43
  257. package/dist/ui/code.mjs +0 -173
  258. package/dist/ui/form.d.mts +0 -32
  259. package/dist/ui/form.mjs +0 -49
  260. package/dist/ui/icon.d.mts +0 -58
  261. package/dist/ui/icon.mjs +0 -247
  262. package/dist/ui/magiclink.d.mts +0 -41
  263. package/dist/ui/magiclink.mjs +0 -152
  264. package/dist/ui/passkey.d.mts +0 -27
  265. package/dist/ui/passkey.mjs +0 -323
  266. package/dist/ui/password.d.mts +0 -42
  267. package/dist/ui/password.mjs +0 -402
  268. package/dist/ui/select.d.mts +0 -34
  269. package/dist/ui/select.mjs +0 -98
  270. package/dist/ui/totp.d.mts +0 -34
  271. package/dist/ui/totp.mjs +0 -270
  272. package/dist/util.mjs +0 -128
@@ -1,323 +0,0 @@
1
- import { Layout, renderToHTML } from "./base.mjs";
2
- import { FormAlert } from "./form.mjs";
3
- import { jsx, jsxs } from "preact/jsx-runtime";
4
-
5
- //#region src/ui/passkey.tsx
6
- const DEFAULT_COPY = {
7
- register: "Register",
8
- register_other_device: "Use another device",
9
- register_prompt: "Don't have an account?",
10
- login_prompt: "Already have an account?",
11
- login: "Login",
12
- button_continue: "Continue",
13
- input_email: "Email",
14
- error_register_already_registered: "This device is already registered. Please use the login page or try a different device.",
15
- error_register_cancelled: "Registration was cancelled or timed out. Please try again.",
16
- error_register_failed: "Registration failed. Please try again.",
17
- error_auth_cancelled: "Authentication was cancelled or timed out. Please try again.",
18
- error_auth_failed: "Authentication failed. Please try again."
19
- };
20
- const PasskeyUI = (options) => {
21
- const { rpName, rpID, origin, userCanRegisterPasskey, authenticatorSelection, attestationType, timeout } = options;
22
- const copy = {
23
- ...DEFAULT_COPY,
24
- ...options.copy
25
- };
26
- return {
27
- authorize: async () => {
28
- const jsx$1 = /* @__PURE__ */ jsxs(Layout, { children: [
29
- /* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: `
30
- window.addEventListener("load", async () => {
31
- const { startAuthentication } = SimpleWebAuthnBrowser;
32
- const authorizeForm = document.getElementById("authorizeForm");
33
- const message = document.querySelector("[data-slot='message']");
34
- const origin = window.location.origin;
35
- const rpID = window.location.hostname;
36
-
37
- authorizeForm.addEventListener("submit", async (e) => {
38
- e.preventDefault();
39
- const formData = new FormData(authorizeForm);
40
- const email = formData.get("email");
41
-
42
- message.textContent = "";
43
-
44
- // GET authentication options from the endpoint that calls
45
- // @simplewebauthn/server -> generateAuthenticationOptions()
46
- const resp = await fetch(
47
- "./authenticate-options?userId=" + email + "&rpID=" + rpID
48
- );
49
-
50
- const optionsJSON = await resp.json();
51
-
52
- if (optionsJSON.error) {
53
- message.textContent = optionsJSON.error;
54
- return;
55
- }
56
-
57
- let attResp;
58
- try {
59
- // Pass the options to the authenticator and wait for a response
60
- attResp = await startAuthentication({ optionsJSON });
61
- } catch (error) {
62
- // Handle WebAuthn errors with friendly messages
63
- const errorName = error.name;
64
- if (errorName === "NotAllowedError") {
65
- message.textContent = "${copy.error_auth_cancelled}";
66
- } else if (errorName === "InvalidStateError") {
67
- message.textContent = "${copy.error_auth_failed}";
68
- } else {
69
- message.textContent = error.message || "${copy.error_auth_failed}";
70
- }
71
- console.error(error);
72
- return;
73
- }
74
-
75
- const verificationResp = await fetch(
76
- "./authenticate-verify?userId=" +
77
- email +
78
- "&rpID=" +
79
- rpID +
80
- "&origin=" +
81
- origin,
82
- {
83
- method: "POST",
84
- headers: {
85
- "Content-Type": "application/json",
86
- },
87
- body: JSON.stringify(attResp),
88
- }
89
- );
90
-
91
- // Check if the request was redirected and the final response is OK
92
- if (verificationResp.redirected && verificationResp.ok) {
93
- // Navigate the browser to the final URL
94
- window.location.href = verificationResp.url;
95
- } else {
96
- // Handle errors (e.g., 4xx, 5xx status codes from the final URL)
97
- console.error(
98
- "Request failed:",
99
- verificationResp.status,
100
- verificationResp.statusText
101
- );
102
- try {
103
- const errorData = await verificationResp.json();
104
- message.textContent = errorData.error;
105
- } catch (error) {
106
- message.textContent = "Something went wrong";
107
- }
108
- }
109
- });
110
- });
111
- ` } }),
112
- /* @__PURE__ */ jsxs("form", {
113
- id: "authorizeForm",
114
- "data-component": "form",
115
- children: [
116
- /* @__PURE__ */ jsx(FormAlert, {}),
117
- /* @__PURE__ */ jsx("input", {
118
- id: "auth-email",
119
- "data-component": "input",
120
- type: "email",
121
- name: "email",
122
- "aria-required": "true",
123
- "aria-describedby": "auth-email-help",
124
- autoComplete: "email",
125
- required: true,
126
- placeholder: copy.input_email
127
- }),
128
- /* @__PURE__ */ jsx("button", {
129
- type: "submit",
130
- id: "btnLogin",
131
- "data-component": "button",
132
- children: copy.button_continue
133
- }),
134
- /* @__PURE__ */ jsx("div", {
135
- "data-component": "form-footer",
136
- children: /* @__PURE__ */ jsxs("span", { children: [
137
- copy.register_prompt,
138
- " ",
139
- /* @__PURE__ */ jsx("a", {
140
- "data-component": "link",
141
- href: "./register",
142
- children: copy.register
143
- })
144
- ] })
145
- })
146
- ]
147
- }),
148
- /* @__PURE__ */ jsx("script", { src: "https://unpkg.com/@simplewebauthn/browser/dist/bundle/index.umd.min.js" })
149
- ] });
150
- return new Response(renderToHTML(jsx$1), {
151
- status: 200,
152
- headers: { "Content-Type": "text/html" }
153
- });
154
- },
155
- register: async () => {
156
- const jsx$1 = /* @__PURE__ */ jsxs(Layout, { children: [
157
- /* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: `
158
- window.addEventListener("load", async () => {
159
- const { startRegistration } = SimpleWebAuthnBrowser;
160
- const registerForm = document.getElementById("registerForm");
161
- const btnOtherDevice = document.getElementById("btnOtherDevice");
162
- const message = document.querySelector("[data-slot='message']");
163
- const origin = window.location.origin;
164
- const rpID = window.location.hostname;
165
-
166
- // Start registration when the user clicks a button
167
- const register = async (otherDevice = false) => {
168
- const formData = new FormData(registerForm);
169
- const email = formData.get("email");
170
- message.textContent = "";
171
-
172
- // GET registration options from the endpoint that calls
173
- // @simplewebauthn/server -> generateRegistrationOptions()
174
- const resp = await fetch(
175
- "./register-request?userId=" +
176
- email +
177
- "&origin=" +
178
- origin +
179
- "&rpID=" +
180
- rpID +
181
- "&otherDevice=" +
182
- otherDevice
183
- );
184
- const optionsJSON = await resp.json();
185
-
186
- if (optionsJSON.error) {
187
- message.textContent = optionsJSON.error;
188
- return;
189
- }
190
-
191
- let attResp;
192
- try {
193
- // Pass the options to the authenticator and wait for a response
194
- attResp = await startRegistration({ optionsJSON });
195
- } catch (error) {
196
- // Handle WebAuthn errors with friendly messages
197
- const errorName = error.name;
198
- if (errorName === "InvalidStateError") {
199
- message.textContent = "${copy.error_register_already_registered}";
200
- } else if (errorName === "NotAllowedError") {
201
- message.textContent = "${copy.error_register_cancelled}";
202
- } else {
203
- message.textContent = error.message || "${copy.error_register_failed}";
204
- }
205
- console.error(error);
206
- return;
207
- }
208
-
209
- // POST the response to the endpoint that calls
210
- // @simplewebauthn/server -> verifyRegistrationResponse()
211
- try {
212
- const verificationResp = await fetch(
213
- "./register-verify?userId=" +
214
- email +
215
- "&origin=" +
216
- origin +
217
- "&rpID=" +
218
- rpID,
219
- {
220
- method: "POST",
221
- headers: {
222
- "Content-Type": "application/json",
223
- },
224
- body: JSON.stringify(attResp),
225
- }
226
- );
227
-
228
- // Check if the request was redirected and the final response is OK
229
- if (verificationResp.redirected && verificationResp.ok) {
230
- // Navigate the browser to the final URL
231
- window.location.href = verificationResp.url;
232
- } else {
233
- // Handle errors (e.g., 4xx, 5xx status codes from the final URL)
234
- console.error(
235
- "Request failed:",
236
- verificationResp.status,
237
- verificationResp.statusText
238
- );
239
- try {
240
- const errorData = await verificationResp.json();
241
- message.textContent = errorData.error;
242
- } catch (error) {
243
- message.textContent = "Something went wrong";
244
- }
245
- }
246
- } catch (error) {
247
- console.error(error);
248
- message.textContent = "Something went wrong";
249
- }
250
- };
251
-
252
- registerForm.addEventListener("submit", (e) => {
253
- e.preventDefault();
254
- register();
255
- });
256
-
257
- btnOtherDevice.addEventListener("click", (e) => {
258
- e.preventDefault();
259
- register(true);
260
- });
261
- });
262
- ` } }),
263
- /* @__PURE__ */ jsxs("form", {
264
- id: "registerForm",
265
- "data-component": "form",
266
- children: [
267
- /* @__PURE__ */ jsx(FormAlert, {}),
268
- /* @__PURE__ */ jsx("input", {
269
- id: "reg-email",
270
- "data-component": "input",
271
- type: "email",
272
- name: "email",
273
- "aria-required": "true",
274
- "aria-describedby": "reg-email-help",
275
- autoComplete: "email",
276
- required: true,
277
- placeholder: copy.input_email
278
- }),
279
- /* @__PURE__ */ jsx("button", {
280
- "data-component": "button",
281
- type: "submit",
282
- id: "btnRegister",
283
- children: copy.button_continue
284
- }),
285
- /* @__PURE__ */ jsx("button", {
286
- "data-component": "button",
287
- type: "submit",
288
- id: "btnOtherDevice",
289
- children: copy.register_other_device
290
- }),
291
- /* @__PURE__ */ jsx("div", {
292
- "data-component": "form-footer",
293
- children: /* @__PURE__ */ jsxs("span", { children: [
294
- copy.login_prompt,
295
- " ",
296
- /* @__PURE__ */ jsx("a", {
297
- "data-component": "link",
298
- href: "./authorize",
299
- children: copy.login
300
- })
301
- ] })
302
- })
303
- ]
304
- }),
305
- /* @__PURE__ */ jsx("script", { src: "https://unpkg.com/@simplewebauthn/browser/dist/bundle/index.umd.min.js" })
306
- ] });
307
- return new Response(renderToHTML(jsx$1), {
308
- status: 200,
309
- headers: { "Content-Type": "text/html" }
310
- });
311
- },
312
- rpName,
313
- rpID,
314
- origin,
315
- userCanRegisterPasskey,
316
- authenticatorSelection,
317
- attestationType,
318
- timeout
319
- };
320
- };
321
-
322
- //#endregion
323
- export { PasskeyUI };
@@ -1,42 +0,0 @@
1
- import { PasswordConfig } from "../provider/password.mjs";
2
-
3
- //#region src/ui/password.d.ts
4
-
5
- /**
6
- * Strongly typed copy text configuration for password UI
7
- */
8
- interface PasswordUICopy {
9
- readonly error_email_taken: string;
10
- readonly error_invalid_code: string;
11
- readonly error_invalid_email: string;
12
- readonly error_invalid_password: string;
13
- readonly error_password_mismatch: string;
14
- readonly register: string;
15
- readonly register_prompt: string;
16
- readonly login_prompt: string;
17
- readonly login: string;
18
- readonly change_prompt: string;
19
- readonly code_resend: string;
20
- readonly code_return: string;
21
- readonly input_email: string;
22
- readonly input_password: string;
23
- readonly input_code: string;
24
- readonly input_repeat: string;
25
- readonly button_continue: string;
26
- readonly logo: string;
27
- }
28
- /**
29
- * Configuration options for the PasswordUI component
30
- */
31
- interface PasswordUIOptions extends Pick<PasswordConfig, "sendCode" | "validatePassword"> {
32
- /**
33
- * Custom text copy for UI labels, messages, and errors
34
- */
35
- readonly copy?: Partial<PasswordUICopy>;
36
- }
37
- /**
38
- * Creates a complete UI configuration for password-based authentication
39
- */
40
- declare const PasswordUI: (options: PasswordUIOptions) => PasswordConfig;
41
- //#endregion
42
- export { PasswordUI, PasswordUIOptions };