@mrgnw/anahtar 0.0.11 → 0.0.13

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 (195) hide show
  1. package/dist/components/AuthFlow.svelte +60 -17
  2. package/dist/components/AuthFlow.svelte.d.ts +3 -0
  3. package/dist/components/OtpInput.svelte +15 -1
  4. package/dist/components/PasskeyPrompt.svelte +10 -7
  5. package/dist/components/PasskeyPrompt.svelte.d.ts +2 -0
  6. package/dist/components/index.d.ts +2 -0
  7. package/dist/components/index.js +1 -0
  8. package/dist/i18n/af.d.ts +3 -0
  9. package/dist/i18n/af.js +28 -0
  10. package/dist/i18n/ak.d.ts +3 -0
  11. package/dist/i18n/ak.js +28 -0
  12. package/dist/i18n/am.d.ts +3 -0
  13. package/dist/i18n/am.js +28 -0
  14. package/dist/i18n/ar.d.ts +3 -0
  15. package/dist/i18n/ar.js +28 -0
  16. package/dist/i18n/as.d.ts +3 -0
  17. package/dist/i18n/as.js +28 -0
  18. package/dist/i18n/az.d.ts +3 -0
  19. package/dist/i18n/az.js +28 -0
  20. package/dist/i18n/be.d.ts +3 -0
  21. package/dist/i18n/be.js +28 -0
  22. package/dist/i18n/bg.d.ts +3 -0
  23. package/dist/i18n/bg.js +28 -0
  24. package/dist/i18n/bn.d.ts +3 -0
  25. package/dist/i18n/bn.js +28 -0
  26. package/dist/i18n/ca.d.ts +3 -0
  27. package/dist/i18n/ca.js +28 -0
  28. package/dist/i18n/cs.d.ts +3 -0
  29. package/dist/i18n/cs.js +28 -0
  30. package/dist/i18n/da.d.ts +3 -0
  31. package/dist/i18n/da.js +28 -0
  32. package/dist/i18n/de.d.ts +3 -0
  33. package/dist/i18n/de.js +28 -0
  34. package/dist/i18n/el.d.ts +3 -0
  35. package/dist/i18n/el.js +28 -0
  36. package/dist/i18n/en.d.ts +3 -0
  37. package/dist/i18n/en.js +28 -0
  38. package/dist/i18n/es.d.ts +3 -0
  39. package/dist/i18n/es.js +28 -0
  40. package/dist/i18n/fa.d.ts +3 -0
  41. package/dist/i18n/fa.js +28 -0
  42. package/dist/i18n/ff.d.ts +3 -0
  43. package/dist/i18n/ff.js +28 -0
  44. package/dist/i18n/fi.d.ts +3 -0
  45. package/dist/i18n/fi.js +28 -0
  46. package/dist/i18n/fil.d.ts +3 -0
  47. package/dist/i18n/fil.js +28 -0
  48. package/dist/i18n/fr.d.ts +3 -0
  49. package/dist/i18n/fr.js +28 -0
  50. package/dist/i18n/gu.d.ts +3 -0
  51. package/dist/i18n/gu.js +28 -0
  52. package/dist/i18n/ha.d.ts +3 -0
  53. package/dist/i18n/ha.js +28 -0
  54. package/dist/i18n/he.d.ts +3 -0
  55. package/dist/i18n/he.js +28 -0
  56. package/dist/i18n/hi.d.ts +3 -0
  57. package/dist/i18n/hi.js +28 -0
  58. package/dist/i18n/hr.d.ts +3 -0
  59. package/dist/i18n/hr.js +28 -0
  60. package/dist/i18n/ht.d.ts +3 -0
  61. package/dist/i18n/ht.js +28 -0
  62. package/dist/i18n/hu.d.ts +3 -0
  63. package/dist/i18n/hu.js +28 -0
  64. package/dist/i18n/hy.d.ts +3 -0
  65. package/dist/i18n/hy.js +28 -0
  66. package/dist/i18n/id.d.ts +3 -0
  67. package/dist/i18n/id.js +28 -0
  68. package/dist/i18n/ig.d.ts +3 -0
  69. package/dist/i18n/ig.js +28 -0
  70. package/dist/i18n/index.d.ts +7 -0
  71. package/dist/i18n/index.js +141 -0
  72. package/dist/i18n/it.d.ts +3 -0
  73. package/dist/i18n/it.js +28 -0
  74. package/dist/i18n/ja.d.ts +3 -0
  75. package/dist/i18n/ja.js +28 -0
  76. package/dist/i18n/jv.d.ts +3 -0
  77. package/dist/i18n/jv.js +28 -0
  78. package/dist/i18n/kk.d.ts +3 -0
  79. package/dist/i18n/kk.js +28 -0
  80. package/dist/i18n/km.d.ts +3 -0
  81. package/dist/i18n/km.js +28 -0
  82. package/dist/i18n/kn.d.ts +3 -0
  83. package/dist/i18n/kn.js +28 -0
  84. package/dist/i18n/ko.d.ts +3 -0
  85. package/dist/i18n/ko.js +28 -0
  86. package/dist/i18n/ku.d.ts +3 -0
  87. package/dist/i18n/ku.js +28 -0
  88. package/dist/i18n/ln.d.ts +3 -0
  89. package/dist/i18n/ln.js +28 -0
  90. package/dist/i18n/lo.d.ts +3 -0
  91. package/dist/i18n/lo.js +28 -0
  92. package/dist/i18n/mg.d.ts +3 -0
  93. package/dist/i18n/mg.js +28 -0
  94. package/dist/i18n/ml.d.ts +3 -0
  95. package/dist/i18n/ml.js +28 -0
  96. package/dist/i18n/mn.d.ts +3 -0
  97. package/dist/i18n/mn.js +28 -0
  98. package/dist/i18n/mr.d.ts +3 -0
  99. package/dist/i18n/mr.js +28 -0
  100. package/dist/i18n/ms.d.ts +3 -0
  101. package/dist/i18n/ms.js +28 -0
  102. package/dist/i18n/my.d.ts +3 -0
  103. package/dist/i18n/my.js +28 -0
  104. package/dist/i18n/ne.d.ts +3 -0
  105. package/dist/i18n/ne.js +28 -0
  106. package/dist/i18n/nl.d.ts +3 -0
  107. package/dist/i18n/nl.js +28 -0
  108. package/dist/i18n/no.d.ts +3 -0
  109. package/dist/i18n/no.js +28 -0
  110. package/dist/i18n/ny.d.ts +3 -0
  111. package/dist/i18n/ny.js +28 -0
  112. package/dist/i18n/om.d.ts +3 -0
  113. package/dist/i18n/om.js +28 -0
  114. package/dist/i18n/or.d.ts +3 -0
  115. package/dist/i18n/or.js +28 -0
  116. package/dist/i18n/pa.d.ts +3 -0
  117. package/dist/i18n/pa.js +28 -0
  118. package/dist/i18n/pl.d.ts +3 -0
  119. package/dist/i18n/pl.js +28 -0
  120. package/dist/i18n/ps.d.ts +3 -0
  121. package/dist/i18n/ps.js +28 -0
  122. package/dist/i18n/pt.d.ts +3 -0
  123. package/dist/i18n/pt.js +28 -0
  124. package/dist/i18n/rn.d.ts +3 -0
  125. package/dist/i18n/rn.js +28 -0
  126. package/dist/i18n/ro.d.ts +3 -0
  127. package/dist/i18n/ro.js +28 -0
  128. package/dist/i18n/ru.d.ts +3 -0
  129. package/dist/i18n/ru.js +28 -0
  130. package/dist/i18n/rw.d.ts +3 -0
  131. package/dist/i18n/rw.js +28 -0
  132. package/dist/i18n/sd.d.ts +3 -0
  133. package/dist/i18n/sd.js +28 -0
  134. package/dist/i18n/si.d.ts +3 -0
  135. package/dist/i18n/si.js +28 -0
  136. package/dist/i18n/sk.d.ts +3 -0
  137. package/dist/i18n/sk.js +28 -0
  138. package/dist/i18n/so.d.ts +3 -0
  139. package/dist/i18n/so.js +28 -0
  140. package/dist/i18n/sq.d.ts +3 -0
  141. package/dist/i18n/sq.js +28 -0
  142. package/dist/i18n/sr.d.ts +3 -0
  143. package/dist/i18n/sr.js +28 -0
  144. package/dist/i18n/st.d.ts +3 -0
  145. package/dist/i18n/st.js +28 -0
  146. package/dist/i18n/su.d.ts +3 -0
  147. package/dist/i18n/su.js +28 -0
  148. package/dist/i18n/sv.d.ts +3 -0
  149. package/dist/i18n/sv.js +28 -0
  150. package/dist/i18n/sw.d.ts +3 -0
  151. package/dist/i18n/sw.js +28 -0
  152. package/dist/i18n/ta.d.ts +3 -0
  153. package/dist/i18n/ta.js +28 -0
  154. package/dist/i18n/te.d.ts +3 -0
  155. package/dist/i18n/te.js +28 -0
  156. package/dist/i18n/tg.d.ts +3 -0
  157. package/dist/i18n/tg.js +28 -0
  158. package/dist/i18n/th.d.ts +3 -0
  159. package/dist/i18n/th.js +28 -0
  160. package/dist/i18n/ti.d.ts +3 -0
  161. package/dist/i18n/ti.js +28 -0
  162. package/dist/i18n/tk.d.ts +3 -0
  163. package/dist/i18n/tk.js +28 -0
  164. package/dist/i18n/tr.d.ts +3 -0
  165. package/dist/i18n/tr.js +28 -0
  166. package/dist/i18n/ts.d.ts +3 -0
  167. package/dist/i18n/ts.js +28 -0
  168. package/dist/i18n/tt.d.ts +3 -0
  169. package/dist/i18n/tt.js +28 -0
  170. package/dist/i18n/types.d.ts +27 -0
  171. package/dist/i18n/types.js +1 -0
  172. package/dist/i18n/ug.d.ts +3 -0
  173. package/dist/i18n/ug.js +28 -0
  174. package/dist/i18n/uk.d.ts +3 -0
  175. package/dist/i18n/uk.js +28 -0
  176. package/dist/i18n/ur.d.ts +3 -0
  177. package/dist/i18n/ur.js +28 -0
  178. package/dist/i18n/uz.d.ts +3 -0
  179. package/dist/i18n/uz.js +28 -0
  180. package/dist/i18n/vi.d.ts +3 -0
  181. package/dist/i18n/vi.js +28 -0
  182. package/dist/i18n/yo.d.ts +3 -0
  183. package/dist/i18n/yo.js +28 -0
  184. package/dist/i18n/zh.d.ts +3 -0
  185. package/dist/i18n/zh.js +28 -0
  186. package/dist/i18n/zu.d.ts +3 -0
  187. package/dist/i18n/zu.js +28 -0
  188. package/dist/index.d.ts +2 -0
  189. package/dist/index.js +1 -0
  190. package/dist/kit/handlers.d.ts +2 -2
  191. package/dist/kit/handlers.js +95 -66
  192. package/dist/passkey.d.ts +1 -0
  193. package/dist/passkey.js +22 -0
  194. package/dist/types.d.ts +5 -1
  195. package/package.json +90 -90
@@ -1,14 +1,19 @@
1
1
  <script lang="ts">
2
2
  import { guessDeviceName } from '../device.js';
3
+ import { resolveMessages, detectLocaleClient, type AuthMessages } from '../i18n/index.js';
3
4
  import OtpInput from './OtpInput.svelte';
4
5
  import PasskeyPrompt from './PasskeyPrompt.svelte';
5
6
 
6
7
  interface Props {
7
8
  apiBase?: string;
9
+ locale?: string;
10
+ messages?: Partial<AuthMessages>;
8
11
  onSuccess?: () => void;
9
12
  }
10
13
 
11
- let { apiBase = '/api/auth', onSuccess }: Props = $props();
14
+ let { apiBase = '/api/auth', locale, messages: messageOverrides, onSuccess }: Props = $props();
15
+
16
+ let m = $derived(resolveMessages(locale ?? detectLocaleClient(), messageOverrides));
12
17
 
13
18
  let step = $state<1 | 2 | 3 | 4>(1);
14
19
  let congratsTimeout: ReturnType<typeof setTimeout> | null = null;
@@ -38,6 +43,8 @@ async function tryConditionalWebAuthn() {
38
43
  optionsJSON: options,
39
44
  useBrowserAutofill: true
40
45
  });
46
+ // User selected a passkey — show loading while we verify
47
+ loading = true;
41
48
  const verifyRes = await fetch(`${apiBase}/passkey/login-finish`, {
42
49
  method: 'POST',
43
50
  headers: { 'Content-Type': 'application/json' },
@@ -48,18 +55,54 @@ async function tryConditionalWebAuthn() {
48
55
  }
49
56
  } catch {
50
57
  // Passkey autofill not available or cancelled
58
+ } finally {
59
+ loading = false;
51
60
  }
52
61
  }
53
62
 
54
63
  async function handleEmailSubmit() {
55
64
  error = '';
56
65
  if (!email.includes('@')) {
57
- error = 'Please enter a valid email address.';
66
+ error = m.errorInvalidEmail;
58
67
  return;
59
68
  }
60
- loading = true;
61
69
  conditionalAbort?.abort();
62
70
  conditionalAbort = null;
71
+
72
+ try {
73
+ const { startAuthentication } = await import('@simplewebauthn/browser');
74
+ const checkRes = await fetch(`${apiBase}/passkey/check-email`, {
75
+ method: 'POST',
76
+ headers: { 'Content-Type': 'application/json' },
77
+ body: JSON.stringify({ email })
78
+ });
79
+ if (checkRes.ok) {
80
+ const options = await checkRes.json();
81
+ if (options.allowCredentials?.length > 0) {
82
+ loading = true;
83
+ try {
84
+ const authResponse = await startAuthentication({ optionsJSON: options });
85
+ const verifyRes = await fetch(`${apiBase}/passkey/login-finish`, {
86
+ method: 'POST',
87
+ headers: { 'Content-Type': 'application/json' },
88
+ body: JSON.stringify(authResponse)
89
+ });
90
+ if (verifyRes.ok) {
91
+ onSuccess?.();
92
+ return;
93
+ }
94
+ } catch {
95
+ // cancelled — fall through to OTP
96
+ } finally {
97
+ loading = false;
98
+ }
99
+ }
100
+ }
101
+ } catch {
102
+ // passkey check failed — proceed with OTP
103
+ }
104
+
105
+ loading = true;
63
106
  try {
64
107
  const res = await fetch(`${apiBase}/start`, {
65
108
  method: 'POST',
@@ -73,7 +116,7 @@ async function handleEmailSubmit() {
73
116
  }
74
117
  step = 2;
75
118
  } catch {
76
- error = 'Something went wrong. Please try again.';
119
+ error = m.errorGeneric;
77
120
  } finally {
78
121
  loading = false;
79
122
  }
@@ -90,7 +133,7 @@ async function handleOtpComplete(code: string) {
90
133
  });
91
134
  if (!res.ok) {
92
135
  const data = await res.json().catch(() => null);
93
- error = data?.error ?? 'Invalid code. Please try again.';
136
+ error = data?.error ?? m.errorInvalidCode;
94
137
  otpInput?.clear();
95
138
  return;
96
139
  }
@@ -101,7 +144,7 @@ async function handleOtpComplete(code: string) {
101
144
  step = 3;
102
145
  }
103
146
  } catch {
104
- error = 'Something went wrong. Please try again.';
147
+ error = m.errorGeneric;
105
148
  } finally {
106
149
  loading = false;
107
150
  }
@@ -118,12 +161,12 @@ async function resendCode() {
118
161
  });
119
162
  if (!res.ok) {
120
163
  const data = await res.json().catch(() => null);
121
- error = data?.error ?? 'Failed to resend code.';
164
+ error = data?.error ?? m.errorResendFailed;
122
165
  return;
123
166
  }
124
167
  otpInput?.clear();
125
168
  } catch {
126
- error = 'Something went wrong. Please try again.';
169
+ error = m.errorGeneric;
127
170
  } finally {
128
171
  loading = false;
129
172
  }
@@ -166,7 +209,7 @@ function handlePasskeySkip() {
166
209
  bind:value={email}
167
210
  required
168
211
  autocomplete="username webauthn"
169
- placeholder="you@example.com"
212
+ placeholder={m.emailPlaceholder}
170
213
  class="anahtar-input"
171
214
  />
172
215
 
@@ -175,12 +218,12 @@ function handlePasskeySkip() {
175
218
  {/if}
176
219
 
177
220
  <button type="submit" disabled={loading} class="anahtar-button">
178
- {loading ? '...' : 'Continue'}
221
+ {loading ? '...' : m.continue}
179
222
  </button>
180
223
  </form>
181
224
  {:else if step === 2}
182
225
  <div class="anahtar-otp-step">
183
- <p class="anahtar-subtitle">We sent a code to</p>
226
+ <p class="anahtar-subtitle">{m.codeSentTo}</p>
184
227
  <p class="anahtar-email">{email}</p>
185
228
 
186
229
  <OtpInput bind:this={otpInput} onComplete={handleOtpComplete} disabled={loading} />
@@ -190,12 +233,12 @@ function handlePasskeySkip() {
190
233
  {/if}
191
234
 
192
235
  {#if loading}
193
- <p class="anahtar-subtitle">Verifying...</p>
236
+ <p class="anahtar-subtitle">{m.verifying}</p>
194
237
  {/if}
195
238
 
196
239
  <div class="anahtar-links">
197
240
  <button onclick={resendCode} disabled={loading} class="anahtar-link">
198
- Didn't get it? Resend
241
+ {m.resend}
199
242
  </button>
200
243
  <button
201
244
  onclick={() => {
@@ -204,12 +247,12 @@ function handlePasskeySkip() {
204
247
  }}
205
248
  class="anahtar-link"
206
249
  >
207
- Use a different email
250
+ {m.differentEmail}
208
251
  </button>
209
252
  </div>
210
253
  </div>
211
254
  {:else if step === 3}
212
- <PasskeyPrompt onRegister={handlePasskeyRegister} onSkip={handlePasskeySkip} />
255
+ <PasskeyPrompt {m} onRegister={handlePasskeyRegister} onSkip={handlePasskeySkip} />
213
256
  {:else if step === 4}
214
257
  <div class="anahtar-congrats">
215
258
  <div class="anahtar-congrats-icon">
@@ -220,9 +263,9 @@ function handlePasskeySkip() {
220
263
  <path d="m17.5 4.5 2 2"/>
221
264
  </svg>
222
265
  </div>
223
- <p class="anahtar-congrats-title">You're a passkey!</p>
266
+ <p class="anahtar-congrats-title">{m.passkeySuccess}</p>
224
267
  <button onclick={() => onSuccess?.()} class="anahtar-button">
225
- Continue
268
+ {m.continue}
226
269
  </button>
227
270
  </div>
228
271
  {/if}
@@ -1,5 +1,8 @@
1
+ import { type AuthMessages } from '../i18n/index.js';
1
2
  interface Props {
2
3
  apiBase?: string;
4
+ locale?: string;
5
+ messages?: Partial<AuthMessages>;
3
6
  onSuccess?: () => void;
4
7
  }
5
8
  declare const AuthFlow: import("svelte").Component<Props, {}, "">;
@@ -22,6 +22,20 @@
22
22
  function handleInput(index: number, e: Event) {
23
23
  const input = e.target as HTMLInputElement;
24
24
  const val = input.value.replace(/\D/g, '');
25
+
26
+ if (val.length > 1) {
27
+ for (let i = 0; i < length; i++) {
28
+ digits[i] = val[i] ?? '';
29
+ }
30
+ const nextEmpty = digits.findIndex((d) => !d);
31
+ const focusIdx = nextEmpty === -1 ? length - 1 : nextEmpty;
32
+ inputs[focusIdx]?.focus();
33
+ if (digits.every((d) => d.length === 1)) {
34
+ onComplete?.(digits.join(''));
35
+ }
36
+ return;
37
+ }
38
+
25
39
  digits[index] = val.slice(0, 1);
26
40
  input.value = digits[index];
27
41
 
@@ -61,8 +75,8 @@
61
75
  <input
62
76
  bind:this={inputs[i]}
63
77
  type="text"
64
- maxlength="1"
65
78
  inputmode="numeric"
79
+ autocomplete={i === 0 ? 'one-time-code' : 'off'}
66
80
  value={digits[i]}
67
81
  {disabled}
68
82
  oninput={(e) => handleInput(i, e)}
@@ -1,11 +1,14 @@
1
1
  <script lang="ts">
2
+ import type { AuthMessages } from '../i18n/types.js';
3
+
2
4
  interface Props {
5
+ m: AuthMessages;
3
6
  countdownSeconds?: number;
4
7
  onRegister: () => Promise<void>;
5
8
  onSkip: () => void;
6
9
  }
7
10
 
8
- let { countdownSeconds = 3, onRegister, onSkip }: Props = $props();
11
+ let { m, countdownSeconds = 3, onRegister, onSkip }: Props = $props();
9
12
 
10
13
  let countdown = $state(countdownSeconds);
11
14
  let failed = $state(false);
@@ -70,15 +73,15 @@ let dashOffset = $derived(circumference * (1 - countdown / countdownSeconds));
70
73
  </div>
71
74
 
72
75
  {#if !failed}
73
- <p class="anahtar-passkey-title">Making you a passkey</p>
74
- <p class="anahtar-passkey-subtitle">for easier login</p>
75
- <button onclick={onSkip} class="anahtar-passkey-skip">Skip</button>
76
+ <p class="anahtar-passkey-title">{m.passkeyCreating}</p>
77
+ <p class="anahtar-passkey-subtitle">{m.passkeySubtitle}</p>
78
+ <button onclick={onSkip} class="anahtar-passkey-skip">{m.passkeySkip}</button>
76
79
  {:else}
77
- <p class="anahtar-passkey-title">Set up a passkey?</p>
80
+ <p class="anahtar-passkey-title">{m.passkeySetup}</p>
78
81
  <button onclick={triggerRegistration} class="anahtar-passkey-add" disabled={registering}>
79
- Add passkey
82
+ {m.passkeyAdd}
80
83
  </button>
81
- <button onclick={onSkip} class="anahtar-passkey-skip">Maybe later</button>
84
+ <button onclick={onSkip} class="anahtar-passkey-skip">{m.passkeyMaybeLater}</button>
82
85
  {/if}
83
86
  </div>
84
87
 
@@ -1,4 +1,6 @@
1
+ import type { AuthMessages } from '../i18n/types.js';
1
2
  interface Props {
3
+ m: AuthMessages;
2
4
  countdownSeconds?: number;
3
5
  onRegister: () => Promise<void>;
4
6
  onSkip: () => void;
@@ -2,3 +2,5 @@ export { guessDeviceName } from '../device.js';
2
2
  export { default as AuthFlow } from './AuthFlow.svelte';
3
3
  export { default as OtpInput } from './OtpInput.svelte';
4
4
  export { default as PasskeyPrompt } from './PasskeyPrompt.svelte';
5
+ export type { AuthMessages } from '../i18n/types.js';
6
+ export { resolveMessages, detectLocaleClient, locales } from '../i18n/index.js';
@@ -2,3 +2,4 @@ export { guessDeviceName } from '../device.js';
2
2
  export { default as AuthFlow } from './AuthFlow.svelte';
3
3
  export { default as OtpInput } from './OtpInput.svelte';
4
4
  export { default as PasskeyPrompt } from './PasskeyPrompt.svelte';
5
+ export { resolveMessages, detectLocaleClient, locales } from '../i18n/index.js';
@@ -0,0 +1,3 @@
1
+ import type { AuthMessages } from './types.js';
2
+ declare const af: AuthMessages;
3
+ export default af;
@@ -0,0 +1,28 @@
1
+ const af = {
2
+ emailPlaceholder: 'jy@voorbeeld.com',
3
+ continue: 'Gaan voort',
4
+ codeSentTo: 'Ons het \'n kode gestuur na',
5
+ verifying: 'Verifieer...',
6
+ resend: 'Nie ontvang nie? Stuur weer',
7
+ differentEmail: 'Gebruik \'n ander e-pos',
8
+ passkeyCreating: 'Ons skep jou passkey',
9
+ passkeySubtitle: 'vir makliker aanmelding',
10
+ passkeySkip: 'Slaan oor',
11
+ passkeySetup: 'Stel \'n passkey op?',
12
+ passkeyAdd: 'Voeg passkey by',
13
+ passkeyMaybeLater: 'Miskien later',
14
+ passkeySuccess: 'Jy het \'n passkey!',
15
+ errorInvalidEmail: 'Voer asseblief \'n geldige e-posadres in.',
16
+ errorGeneric: 'Iets het fout gegaan. Probeer asseblief weer.',
17
+ errorResendFailed: 'Kon nie die kode weer stuur nie.',
18
+ errorInvalidCode: 'Ongeldige kode. Probeer asseblief weer.',
19
+ errorCodeExpired: 'Kode het verval. Versoek asseblief \'n nuwe een.',
20
+ errorTooManyAttempts: 'Te veel pogings. Versoek asseblief \'n nuwe kode.',
21
+ errorInvalidInput: 'Ongeldige invoer',
22
+ errorNotAuthenticated: 'Nie geverifieer nie',
23
+ errorNotFound: 'Nie gevind nie',
24
+ errorAuthFailed: 'Verifikasie het misluk',
25
+ errorPasskeyRegFailed: 'Passkey-registrasie het misluk',
26
+ errorPasskeyNotFound: 'Passkey nie gevind nie',
27
+ };
28
+ export default af;
@@ -0,0 +1,3 @@
1
+ import type { AuthMessages } from './types.js';
2
+ declare const ak: AuthMessages;
3
+ export default ak;
@@ -0,0 +1,28 @@
1
+ const ak = {
2
+ emailPlaceholder: 'wo@nhwɛso.com',
3
+ continue: 'Toa so',
4
+ codeSentTo: 'Yɛde kɔd abrɛ wo wɔ',
5
+ verifying: 'Ɛrehwehwɛ mu...',
6
+ resend: 'Woanya? San brɛ',
7
+ differentEmail: 'Fa email foforɔ',
8
+ passkeyCreating: 'Yɛreyɛ wo passkey',
9
+ passkeySubtitle: 'na woabɛn mu ntɛm',
10
+ passkeySkip: 'Twa mu',
11
+ passkeySetup: 'Siesie passkey?',
12
+ passkeyAdd: 'Fa passkey ka ho',
13
+ passkeyMaybeLater: 'Ebia akyire yi',
14
+ passkeySuccess: 'Wowɔ passkey!',
15
+ errorInvalidEmail: 'Mesrɛ wo, hyɛ email address a ɛyɛ pɛpɛɛpɛ.',
16
+ errorGeneric: 'Biribi antɔ yiye. Mesrɛ wo, bɔ mmɔden bio.',
17
+ errorResendFailed: 'Kɔd no san brɛ no anni yiye.',
18
+ errorInvalidCode: 'Kɔd no nyɛ papa. Mesrɛ wo, bɔ mmɔden bio.',
19
+ errorCodeExpired: 'Kɔd no bere ato mu. Mesrɛ wo, srɛ foforɔ.',
20
+ errorTooManyAttempts: 'Wabɔ mmɔden dodo. Mesrɛ wo, srɛ kɔd foforɔ.',
21
+ errorInvalidInput: 'Nea wode ahyɛ mu no nyɛ papa',
22
+ errorNotAuthenticated: 'Wonnhyɛ mu',
23
+ errorNotFound: 'Yɛanhunu',
24
+ errorAuthFailed: 'Nhyɛmu anni yiye',
25
+ errorPasskeyRegFailed: 'Passkey no registration anni yiye',
26
+ errorPasskeyNotFound: 'Yɛanhunu passkey no',
27
+ };
28
+ export default ak;
@@ -0,0 +1,3 @@
1
+ import type { AuthMessages } from './types.js';
2
+ declare const am: AuthMessages;
3
+ export default am;
@@ -0,0 +1,28 @@
1
+ const am = {
2
+ emailPlaceholder: 'you@example.com',
3
+ continue: 'ቀጥል',
4
+ codeSentTo: 'ኮድ ልከናል ወደ',
5
+ verifying: 'በማረጋገጥ ላይ...',
6
+ resend: 'አልደረሰህም? እንደገና ላክ',
7
+ differentEmail: 'ሌላ ኢሜይል ተጠቀም',
8
+ passkeyCreating: 'Passkey እየሠራንልህ ነው',
9
+ passkeySubtitle: 'ለቀላል መግቢያ',
10
+ passkeySkip: 'ዝለል',
11
+ passkeySetup: 'Passkey ማዘጋጀት ትፈልጋለህ?',
12
+ passkeyAdd: 'Passkey ጨምር',
13
+ passkeyMaybeLater: 'ሌላ ጊዜ',
14
+ passkeySuccess: 'Passkey አለህ!',
15
+ errorInvalidEmail: 'እባክህ ትክክለኛ ኢሜይል አድራሻ አስገባ።',
16
+ errorGeneric: 'ችግር ተፈጥሯል። እባክህ እንደገና ሞክር።',
17
+ errorResendFailed: 'ኮዱን እንደገና መላክ አልተሳካም።',
18
+ errorInvalidCode: 'ኮዱ ትክክል አይደለም። እባክህ እንደገና ሞክር።',
19
+ errorCodeExpired: 'ኮዱ ጊዜው አልፏል። እባክህ አዲስ ጠይቅ።',
20
+ errorTooManyAttempts: 'ብዙ ጊዜ ሞክረሃል። እባክህ አዲስ ኮድ ጠይቅ።',
21
+ errorInvalidInput: 'ግቤቱ ትክክል አይደለም',
22
+ errorNotAuthenticated: 'አልተረጋገጠም',
23
+ errorNotFound: 'አልተገኘም',
24
+ errorAuthFailed: 'ማረጋገጡ አልተሳካም',
25
+ errorPasskeyRegFailed: 'Passkey ምዝገባ አልተሳካም',
26
+ errorPasskeyNotFound: 'Passkey አልተገኘም',
27
+ };
28
+ export default am;
@@ -0,0 +1,3 @@
1
+ import type { AuthMessages } from './types.js';
2
+ declare const ar: AuthMessages;
3
+ export default ar;
@@ -0,0 +1,28 @@
1
+ const ar = {
2
+ emailPlaceholder: 'you@example.com',
3
+ continue: 'متابعة',
4
+ codeSentTo: 'أرسلنا رمزًا إلى',
5
+ verifying: 'جارٍ التحقق...',
6
+ resend: 'لم يصلك؟ إعادة الإرسال',
7
+ differentEmail: 'استخدام بريد إلكتروني آخر',
8
+ passkeyCreating: 'جارٍ إنشاء مفتاح المرور',
9
+ passkeySubtitle: 'لتسجيل دخول أسهل',
10
+ passkeySkip: 'تخطي',
11
+ passkeySetup: 'إعداد مفتاح مرور؟',
12
+ passkeyAdd: 'إضافة مفتاح مرور',
13
+ passkeyMaybeLater: 'ربما لاحقًا',
14
+ passkeySuccess: 'مفتاح المرور جاهز!',
15
+ errorInvalidEmail: 'يرجى إدخال بريد إلكتروني صالح.',
16
+ errorGeneric: 'حدث خطأ ما. يرجى المحاولة مرة أخرى.',
17
+ errorResendFailed: 'فشل إعادة إرسال الرمز.',
18
+ errorInvalidCode: 'رمز غير صالح. يرجى المحاولة مرة أخرى.',
19
+ errorCodeExpired: 'انتهت صلاحية الرمز. يرجى طلب رمز جديد.',
20
+ errorTooManyAttempts: 'محاولات كثيرة جدًا. يرجى طلب رمز جديد.',
21
+ errorInvalidInput: 'إدخال غير صالح',
22
+ errorNotAuthenticated: 'غير مسجل الدخول',
23
+ errorNotFound: 'غير موجود',
24
+ errorAuthFailed: 'فشل التحقق من الهوية',
25
+ errorPasskeyRegFailed: 'فشل تسجيل مفتاح المرور',
26
+ errorPasskeyNotFound: 'مفتاح المرور غير موجود',
27
+ };
28
+ export default ar;
@@ -0,0 +1,3 @@
1
+ import type { AuthMessages } from './types.js';
2
+ declare const assamese: AuthMessages;
3
+ export default assamese;
@@ -0,0 +1,28 @@
1
+ const assamese = {
2
+ emailPlaceholder: 'you@example.com',
3
+ continue: 'আগবাঢ়ক',
4
+ codeSentTo: 'কোড পঠোৱা হৈছে:',
5
+ verifying: 'পৰীক্ষা কৰি আছে...',
6
+ resend: 'পোৱা নাই? পুনৰ পঠাওক',
7
+ differentEmail: 'বেলেগ ইমেইল ব্যৱহাৰ কৰক',
8
+ passkeyCreating: 'Passkey তৈয়াৰ কৰি আছে',
9
+ passkeySubtitle: 'সহজে লগ ইনৰ বাবে',
10
+ passkeySkip: 'এৰক',
11
+ passkeySetup: 'Passkey ছেট আপ কৰিবনে?',
12
+ passkeyAdd: 'Passkey যোগ কৰক',
13
+ passkeyMaybeLater: 'পিছত হ\'ব',
14
+ passkeySuccess: 'আপোনাৰ passkey সাজু!',
15
+ errorInvalidEmail: 'অনুগ্ৰহ কৰি এটা সঠিক ইমেইল ঠিকনা দিয়ক।',
16
+ errorGeneric: 'কিবা ভুল হৈছে। অনুগ্ৰহ কৰি পুনৰ চেষ্টা কৰক।',
17
+ errorResendFailed: 'কোড পুনৰ পঠাব পৰা নগ\'ল।',
18
+ errorInvalidCode: 'ভুল কোড। অনুগ্ৰহ কৰি পুনৰ চেষ্টা কৰক।',
19
+ errorCodeExpired: 'কোডৰ সময়সীমা শেষ। নতুন কোড বিচাৰক।',
20
+ errorTooManyAttempts: 'বহুত বেছি চেষ্টা হৈছে। নতুন কোড বিচাৰক।',
21
+ errorInvalidInput: 'অবৈধ ইনপুট',
22
+ errorNotAuthenticated: 'প্ৰমাণীকৃত নহয়',
23
+ errorNotFound: 'পোৱা নগ\'ল',
24
+ errorAuthFailed: 'প্ৰমাণীকৰণ বিফল',
25
+ errorPasskeyRegFailed: 'Passkey পঞ্জীয়ন বিফল',
26
+ errorPasskeyNotFound: 'Passkey পোৱা নগ\'ল',
27
+ };
28
+ export default assamese;
@@ -0,0 +1,3 @@
1
+ import type { AuthMessages } from './types.js';
2
+ declare const az: AuthMessages;
3
+ export default az;
@@ -0,0 +1,28 @@
1
+ const az = {
2
+ emailPlaceholder: 'siz@numune.com',
3
+ continue: 'Davam et',
4
+ codeSentTo: 'Kod göndərdik:',
5
+ verifying: 'Yoxlanılır...',
6
+ resend: 'Almadınız? Yenidən göndər',
7
+ differentEmail: 'Başqa email istifadə et',
8
+ passkeyCreating: 'Sizin üçün passkey yaradılır',
9
+ passkeySubtitle: 'asan giriş üçün',
10
+ passkeySkip: 'Keç',
11
+ passkeySetup: 'Passkey qurmaq istəyirsiniz?',
12
+ passkeyAdd: 'Passkey əlavə et',
13
+ passkeyMaybeLater: 'Bəlkə sonra',
14
+ passkeySuccess: 'Passkey hazırdır!',
15
+ errorInvalidEmail: 'Zəhmət olmasa, düzgün email ünvanı daxil edin.',
16
+ errorGeneric: 'Xəta baş verdi. Zəhmət olmasa, yenidən cəhd edin.',
17
+ errorResendFailed: 'Kod yenidən göndərilə bilmədi.',
18
+ errorInvalidCode: 'Kod yanlışdır. Zəhmət olmasa, yenidən cəhd edin.',
19
+ errorCodeExpired: 'Kodun vaxtı bitib. Zəhmət olmasa, yeni kod tələb edin.',
20
+ errorTooManyAttempts: 'Həddindən çox cəhd. Zəhmət olmasa, yeni kod tələb edin.',
21
+ errorInvalidInput: 'Yanlış daxiletmə',
22
+ errorNotAuthenticated: 'Doğrulanmayıb',
23
+ errorNotFound: 'Tapılmadı',
24
+ errorAuthFailed: 'Doğrulama uğursuz oldu',
25
+ errorPasskeyRegFailed: 'Passkey qeydiyyatı uğursuz oldu',
26
+ errorPasskeyNotFound: 'Passkey tapılmadı',
27
+ };
28
+ export default az;
@@ -0,0 +1,3 @@
1
+ import type { AuthMessages } from './types.js';
2
+ declare const be: AuthMessages;
3
+ export default be;
@@ -0,0 +1,28 @@
1
+ const be = {
2
+ emailPlaceholder: 'you@example.com',
3
+ continue: 'Працягнуць',
4
+ codeSentTo: 'Мы адправілі код на',
5
+ verifying: 'Правяраем…',
6
+ resend: 'Не атрымалі? Адправіць зноў',
7
+ differentEmail: 'Выкарыстаць іншы email',
8
+ passkeyCreating: 'Ствараем вам passkey',
9
+ passkeySubtitle: 'для лягчэйшага ўваходу',
10
+ passkeySkip: 'Прапусціць',
11
+ passkeySetup: 'Наладзіць passkey?',
12
+ passkeyAdd: 'Дадаць passkey',
13
+ passkeyMaybeLater: 'Можа, пазней',
14
+ passkeySuccess: 'У вас ёсць passkey!',
15
+ errorInvalidEmail: 'Калі ласка, увядзіце сапраўдны адрас электроннай пошты.',
16
+ errorGeneric: 'Нешта пайшло не так. Калі ласка, паспрабуйце зноў.',
17
+ errorResendFailed: 'Не ўдалося адправіць код паўторна.',
18
+ errorInvalidCode: 'Няправільны код. Калі ласка, паспрабуйце зноў.',
19
+ errorCodeExpired: 'Код скончыўся. Калі ласка, запытайце новы.',
20
+ errorTooManyAttempts: 'Занадта шмат спроб. Калі ласка, запытайце новы код.',
21
+ errorInvalidInput: 'Няправільныя даныя',
22
+ errorNotAuthenticated: 'Не аўтэнтыфікавана',
23
+ errorNotFound: 'Не знойдзена',
24
+ errorAuthFailed: 'Аўтэнтыфікацыя не ўдалася',
25
+ errorPasskeyRegFailed: 'Рэгістрацыя passkey не ўдалася',
26
+ errorPasskeyNotFound: 'Passkey не знойдзены',
27
+ };
28
+ export default be;
@@ -0,0 +1,3 @@
1
+ import type { AuthMessages } from './types.js';
2
+ declare const bg: AuthMessages;
3
+ export default bg;
@@ -0,0 +1,28 @@
1
+ const bg = {
2
+ emailPlaceholder: 'you@example.com',
3
+ continue: 'Напред',
4
+ codeSentTo: 'Изпратихме код на',
5
+ verifying: 'Проверява се...',
6
+ resend: 'Не получихте? Изпрати отново',
7
+ differentEmail: 'Използвай друг имейл',
8
+ passkeyCreating: 'Създаваме ви passkey',
9
+ passkeySubtitle: 'за по-лесно влизане',
10
+ passkeySkip: 'Пропусни',
11
+ passkeySetup: 'Да настроим passkey?',
12
+ passkeyAdd: 'Добави passkey',
13
+ passkeyMaybeLater: 'По-късно',
14
+ passkeySuccess: 'Вашият passkey е готов!',
15
+ errorInvalidEmail: 'Моля, въведете валиден имейл адрес.',
16
+ errorGeneric: 'Нещо се обърка. Моля, опитайте отново.',
17
+ errorResendFailed: 'Кодът не можа да бъде изпратен отново.',
18
+ errorInvalidCode: 'Невалиден код. Моля, опитайте отново.',
19
+ errorCodeExpired: 'Кодът е изтекъл. Моля, поискайте нов.',
20
+ errorTooManyAttempts: 'Твърде много опити. Моля, поискайте нов код.',
21
+ errorInvalidInput: 'Невалиден вход',
22
+ errorNotAuthenticated: 'Не сте удостоверени',
23
+ errorNotFound: 'Не е намерено',
24
+ errorAuthFailed: 'Удостоверяването не успя',
25
+ errorPasskeyRegFailed: 'Регистрацията на passkey не успя',
26
+ errorPasskeyNotFound: 'Passkey не е намерен',
27
+ };
28
+ export default bg;
@@ -0,0 +1,3 @@
1
+ import type { AuthMessages } from './types.js';
2
+ declare const bn: AuthMessages;
3
+ export default bn;
@@ -0,0 +1,28 @@
1
+ const bn = {
2
+ emailPlaceholder: 'you@example.com',
3
+ continue: 'এগিয়ে যান',
4
+ codeSentTo: 'আমরা একটি কোড পাঠিয়েছি',
5
+ verifying: 'যাচাই হচ্ছে...',
6
+ resend: 'পাননি? আবার পাঠান',
7
+ differentEmail: 'অন্য ইমেইল ব্যবহার করুন',
8
+ passkeyCreating: 'আপনার জন্য passkey তৈরি হচ্ছে',
9
+ passkeySubtitle: 'সহজে লগইনের জন্য',
10
+ passkeySkip: 'এড়িয়ে যান',
11
+ passkeySetup: 'Passkey তৈরি করবেন?',
12
+ passkeyAdd: 'Passkey যোগ করুন',
13
+ passkeyMaybeLater: 'পরে হবে',
14
+ passkeySuccess: 'আপনার passkey তৈরি হয়ে গেছে!',
15
+ errorInvalidEmail: 'অনুগ্রহ করে একটি সঠিক ইমেইল ঠিকানা দিন।',
16
+ errorGeneric: 'কিছু সমস্যা হয়েছে। অনুগ্রহ করে আবার চেষ্টা করুন।',
17
+ errorResendFailed: 'কোড পুনরায় পাঠানো যায়নি।',
18
+ errorInvalidCode: 'ভুল কোড। অনুগ্রহ করে আবার চেষ্টা করুন।',
19
+ errorCodeExpired: 'কোডের মেয়াদ শেষ। অনুগ্রহ করে নতুন কোড নিন।',
20
+ errorTooManyAttempts: 'অনেকবার চেষ্টা হয়ে গেছে। অনুগ্রহ করে নতুন কোড নিন।',
21
+ errorInvalidInput: 'অবৈধ ইনপুট',
22
+ errorNotAuthenticated: 'প্রমাণীকৃত নয়',
23
+ errorNotFound: 'পাওয়া যায়নি',
24
+ errorAuthFailed: 'প্রমাণীকরণ ব্যর্থ',
25
+ errorPasskeyRegFailed: 'Passkey নিবন্ধন ব্যর্থ',
26
+ errorPasskeyNotFound: 'Passkey পাওয়া যায়নি',
27
+ };
28
+ export default bn;
@@ -0,0 +1,3 @@
1
+ import type { AuthMessages } from './types.js';
2
+ declare const ca: AuthMessages;
3
+ export default ca;
@@ -0,0 +1,28 @@
1
+ const ca = {
2
+ emailPlaceholder: 'tu@exemple.com',
3
+ continue: 'Continua',
4
+ codeSentTo: 'Hem enviat un codi a',
5
+ verifying: 'Verificant...',
6
+ resend: 'No l\'has rebut? Reenvia',
7
+ differentEmail: 'Usa un altre correu',
8
+ passkeyCreating: 'Creant el teu passkey',
9
+ passkeySubtitle: 'per iniciar sessió més fàcilment',
10
+ passkeySkip: 'Omet',
11
+ passkeySetup: 'Configurar un passkey?',
12
+ passkeyAdd: 'Afegir passkey',
13
+ passkeyMaybeLater: 'Potser més tard',
14
+ passkeySuccess: 'Ja tens un passkey!',
15
+ errorInvalidEmail: 'Introdueix una adreça de correu vàlida.',
16
+ errorGeneric: 'Alguna cosa ha fallat. Torna-ho a provar.',
17
+ errorResendFailed: 'No s\'ha pogut reenviar el codi.',
18
+ errorInvalidCode: 'Codi no vàlid. Torna-ho a provar.',
19
+ errorCodeExpired: 'El codi ha caducat. Sol·licita\'n un de nou.',
20
+ errorTooManyAttempts: 'Massa intents. Sol·licita un codi nou.',
21
+ errorInvalidInput: 'Entrada no vàlida',
22
+ errorNotAuthenticated: 'No autenticat',
23
+ errorNotFound: 'No trobat',
24
+ errorAuthFailed: 'L\'autenticació ha fallat',
25
+ errorPasskeyRegFailed: 'El registre del passkey ha fallat',
26
+ errorPasskeyNotFound: 'Passkey no trobat',
27
+ };
28
+ export default ca;
@@ -0,0 +1,3 @@
1
+ import type { AuthMessages } from './types.js';
2
+ declare const cs: AuthMessages;
3
+ export default cs;