@atproto/oauth-provider 0.4.0 → 0.5.1

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 (402) hide show
  1. package/.linguirc +57 -0
  2. package/CHANGELOG.md +29 -0
  3. package/dist/account/account-manager.d.ts +17 -3
  4. package/dist/account/account-manager.d.ts.map +1 -1
  5. package/dist/account/account-manager.js +102 -8
  6. package/dist/account/account-manager.js.map +1 -1
  7. package/dist/account/account-store.d.ts +81 -15
  8. package/dist/account/account-store.d.ts.map +1 -1
  9. package/dist/account/account-store.js +70 -19
  10. package/dist/account/account-store.js.map +1 -1
  11. package/dist/account/sign-in-data.d.ts +28 -0
  12. package/dist/account/sign-in-data.d.ts.map +1 -0
  13. package/dist/account/sign-in-data.js +16 -0
  14. package/dist/account/sign-in-data.js.map +1 -0
  15. package/dist/account/sign-up-data.d.ts +26 -0
  16. package/dist/account/sign-up-data.d.ts.map +1 -0
  17. package/dist/account/sign-up-data.js +11 -0
  18. package/dist/account/sign-up-data.js.map +1 -0
  19. package/dist/assets/app/bundle-manifest.json +598 -6
  20. package/dist/assets/app/index-ItwwtJ8r.js +36 -0
  21. package/dist/assets/app/index-ItwwtJ8r.js.map +1 -0
  22. package/dist/assets/app/main-B_dNxQo_.js +4 -0
  23. package/dist/assets/app/main-B_dNxQo_.js.map +1 -0
  24. package/dist/assets/app/main-CSatvmRR.css +3 -0
  25. package/dist/assets/app/main-CSatvmRR.js +306 -0
  26. package/dist/assets/app/main-CSatvmRR.js.map +1 -0
  27. package/dist/assets/app/messages-BQeltXSF.js +4 -0
  28. package/dist/assets/app/messages-BQeltXSF.js.map +1 -0
  29. package/dist/assets/app/messages-BQkEhfjg.js +4 -0
  30. package/dist/assets/app/messages-BQkEhfjg.js.map +1 -0
  31. package/dist/assets/app/messages-BUjKj_UJ.js +4 -0
  32. package/dist/assets/app/messages-BUjKj_UJ.js.map +1 -0
  33. package/dist/assets/app/messages-BWIQa8fO.js +4 -0
  34. package/dist/assets/app/messages-BWIQa8fO.js.map +1 -0
  35. package/dist/assets/app/messages-BaNVb0bp.js +4 -0
  36. package/dist/assets/app/messages-BaNVb0bp.js.map +1 -0
  37. package/dist/assets/app/messages-BaizVXcF.js +4 -0
  38. package/dist/assets/app/messages-BaizVXcF.js.map +1 -0
  39. package/dist/assets/app/messages-BfoClA1Y.js +4 -0
  40. package/dist/assets/app/messages-BfoClA1Y.js.map +1 -0
  41. package/dist/assets/app/messages-BsKGDZnC.js +4 -0
  42. package/dist/assets/app/messages-BsKGDZnC.js.map +1 -0
  43. package/dist/assets/app/messages-Bu-TJhml.js +4 -0
  44. package/dist/assets/app/messages-Bu-TJhml.js.map +1 -0
  45. package/dist/assets/app/messages-BvOKnBQk.js +4 -0
  46. package/dist/assets/app/messages-BvOKnBQk.js.map +1 -0
  47. package/dist/assets/app/messages-BxDzCiWz.js +4 -0
  48. package/dist/assets/app/messages-BxDzCiWz.js.map +1 -0
  49. package/dist/assets/app/messages-CDgFOy4S.js +4 -0
  50. package/dist/assets/app/messages-CDgFOy4S.js.map +1 -0
  51. package/dist/assets/app/messages-CLbTz0o9.js +4 -0
  52. package/dist/assets/app/messages-CLbTz0o9.js.map +1 -0
  53. package/dist/assets/app/messages-CNwSh0t7.js +4 -0
  54. package/dist/assets/app/messages-CNwSh0t7.js.map +1 -0
  55. package/dist/assets/app/messages-CSMNJ6P8.js +4 -0
  56. package/dist/assets/app/messages-CSMNJ6P8.js.map +1 -0
  57. package/dist/assets/app/messages-CZQUw3mp.js +4 -0
  58. package/dist/assets/app/messages-CZQUw3mp.js.map +1 -0
  59. package/dist/assets/app/messages-CZT41oVp.js +4 -0
  60. package/dist/assets/app/messages-CZT41oVp.js.map +1 -0
  61. package/dist/assets/app/messages-C_b-d3t8.js +4 -0
  62. package/dist/assets/app/messages-C_b-d3t8.js.map +1 -0
  63. package/dist/assets/app/messages-C_u3MTc2.js +4 -0
  64. package/dist/assets/app/messages-C_u3MTc2.js.map +1 -0
  65. package/dist/assets/app/messages-Cn8nHZic.js +4 -0
  66. package/dist/assets/app/messages-Cn8nHZic.js.map +1 -0
  67. package/dist/assets/app/messages-CtDywJUm.js +4 -0
  68. package/dist/assets/app/messages-CtDywJUm.js.map +1 -0
  69. package/dist/assets/app/messages-CurtIjBF.js +4 -0
  70. package/dist/assets/app/messages-CurtIjBF.js.map +1 -0
  71. package/dist/assets/app/messages-Cv6zIbaP.js +4 -0
  72. package/dist/assets/app/messages-Cv6zIbaP.js.map +1 -0
  73. package/dist/assets/app/messages-D1eLQuPE.js +4 -0
  74. package/dist/assets/app/messages-D1eLQuPE.js.map +1 -0
  75. package/dist/assets/app/messages-D8vHEaYW.js +4 -0
  76. package/dist/assets/app/messages-D8vHEaYW.js.map +1 -0
  77. package/dist/assets/app/messages-DJ1Q4GeC.js +4 -0
  78. package/dist/assets/app/messages-DJ1Q4GeC.js.map +1 -0
  79. package/dist/assets/app/messages-DRL3exqd.js +4 -0
  80. package/dist/assets/app/messages-DRL3exqd.js.map +1 -0
  81. package/dist/assets/app/messages-DWLPQRTp.js +4 -0
  82. package/dist/assets/app/messages-DWLPQRTp.js.map +1 -0
  83. package/dist/assets/app/messages-DjVaE9YE.js +4 -0
  84. package/dist/assets/app/messages-DjVaE9YE.js.map +1 -0
  85. package/dist/assets/app/messages-DqpMfFJR.js +4 -0
  86. package/dist/assets/app/messages-DqpMfFJR.js.map +1 -0
  87. package/dist/assets/app/messages-ETjhJBEN.js +4 -0
  88. package/dist/assets/app/messages-ETjhJBEN.js.map +1 -0
  89. package/dist/assets/app/messages-EUKrgrGn.js +4 -0
  90. package/dist/assets/app/messages-EUKrgrGn.js.map +1 -0
  91. package/dist/assets/app/messages-QQrOUcPW.js +4 -0
  92. package/dist/assets/app/messages-QQrOUcPW.js.map +1 -0
  93. package/dist/assets/app/messages-e2QGqFL6.js +4 -0
  94. package/dist/assets/app/messages-e2QGqFL6.js.map +1 -0
  95. package/dist/assets/app/messages-p61py7gD.js +4 -0
  96. package/dist/assets/app/messages-p61py7gD.js.map +1 -0
  97. package/dist/assets/asset.d.ts +1 -0
  98. package/dist/assets/asset.d.ts.map +1 -1
  99. package/dist/assets/assets-middleware.d.ts.map +1 -1
  100. package/dist/assets/assets-middleware.js +12 -7
  101. package/dist/assets/assets-middleware.js.map +1 -1
  102. package/dist/assets/index.d.ts +3 -2
  103. package/dist/assets/index.d.ts.map +1 -1
  104. package/dist/assets/index.js +13 -1
  105. package/dist/assets/index.js.map +1 -1
  106. package/dist/client/client-store.d.ts +3 -3
  107. package/dist/client/client-store.d.ts.map +1 -1
  108. package/dist/client/client-store.js +6 -5
  109. package/dist/client/client-store.js.map +1 -1
  110. package/dist/device/device-manager.d.ts +9 -8
  111. package/dist/device/device-manager.d.ts.map +1 -1
  112. package/dist/device/device-manager.js.map +1 -1
  113. package/dist/device/device-store.d.ts +3 -3
  114. package/dist/device/device-store.d.ts.map +1 -1
  115. package/dist/device/device-store.js +10 -9
  116. package/dist/device/device-store.js.map +1 -1
  117. package/dist/dpop/dpop-manager.d.ts +15 -7
  118. package/dist/dpop/dpop-manager.d.ts.map +1 -1
  119. package/dist/dpop/dpop-manager.js +17 -3
  120. package/dist/dpop/dpop-manager.js.map +1 -1
  121. package/dist/dpop/dpop-nonce.d.ts +11 -5
  122. package/dist/dpop/dpop-nonce.d.ts.map +1 -1
  123. package/dist/dpop/dpop-nonce.js +47 -38
  124. package/dist/dpop/dpop-nonce.js.map +1 -1
  125. package/dist/errors/handle-unavailable-error.d.ts +11 -0
  126. package/dist/errors/handle-unavailable-error.d.ts.map +1 -0
  127. package/dist/errors/handle-unavailable-error.js +19 -0
  128. package/dist/errors/handle-unavailable-error.js.map +1 -0
  129. package/dist/errors/invalid-request-error.d.ts +6 -8
  130. package/dist/errors/invalid-request-error.d.ts.map +1 -1
  131. package/dist/errors/invalid-request-error.js +10 -8
  132. package/dist/errors/invalid-request-error.js.map +1 -1
  133. package/dist/lib/csp/index.d.ts +18 -0
  134. package/dist/lib/csp/index.d.ts.map +1 -0
  135. package/dist/lib/csp/index.js +72 -0
  136. package/dist/lib/csp/index.js.map +1 -0
  137. package/dist/lib/hcaptcha.d.ts +177 -0
  138. package/dist/lib/hcaptcha.d.ts.map +1 -0
  139. package/dist/lib/hcaptcha.js +155 -0
  140. package/dist/lib/hcaptcha.js.map +1 -0
  141. package/dist/lib/html/build-document.d.ts +11 -3
  142. package/dist/lib/html/build-document.d.ts.map +1 -1
  143. package/dist/lib/html/build-document.js +51 -15
  144. package/dist/lib/html/build-document.js.map +1 -1
  145. package/dist/lib/http/middleware.d.ts.map +1 -1
  146. package/dist/lib/http/middleware.js +4 -1
  147. package/dist/lib/http/middleware.js.map +1 -1
  148. package/dist/lib/http/request.d.ts +5 -2
  149. package/dist/lib/http/request.d.ts.map +1 -1
  150. package/dist/lib/http/request.js +16 -1
  151. package/dist/lib/http/request.js.map +1 -1
  152. package/dist/lib/http/response.d.ts +4 -2
  153. package/dist/lib/http/response.d.ts.map +1 -1
  154. package/dist/lib/http/response.js +23 -5
  155. package/dist/lib/http/response.js.map +1 -1
  156. package/dist/lib/locale.d.ts +15 -0
  157. package/dist/lib/locale.d.ts.map +1 -0
  158. package/dist/lib/locale.js +17 -0
  159. package/dist/lib/locale.js.map +1 -0
  160. package/dist/lib/util/function.d.ts +2 -2
  161. package/dist/lib/util/function.d.ts.map +1 -1
  162. package/dist/lib/util/function.js.map +1 -1
  163. package/dist/lib/util/type.d.ts +88 -1
  164. package/dist/lib/util/type.d.ts.map +1 -1
  165. package/dist/lib/util/type.js +41 -0
  166. package/dist/lib/util/type.js.map +1 -1
  167. package/dist/metadata/build-metadata.d.ts +2 -2
  168. package/dist/metadata/build-metadata.d.ts.map +1 -1
  169. package/dist/metadata/build-metadata.js.map +1 -1
  170. package/dist/oauth-errors.d.ts +1 -0
  171. package/dist/oauth-errors.d.ts.map +1 -1
  172. package/dist/oauth-errors.js +3 -1
  173. package/dist/oauth-errors.js.map +1 -1
  174. package/dist/oauth-hooks.d.ts +60 -3
  175. package/dist/oauth-hooks.d.ts.map +1 -1
  176. package/dist/oauth-hooks.js +3 -3
  177. package/dist/oauth-hooks.js.map +1 -1
  178. package/dist/oauth-provider.d.ts +23 -18
  179. package/dist/oauth-provider.d.ts.map +1 -1
  180. package/dist/oauth-provider.js +207 -204
  181. package/dist/oauth-provider.js.map +1 -1
  182. package/dist/oauth-verifier.d.ts +1 -1
  183. package/dist/oauth-verifier.d.ts.map +1 -1
  184. package/dist/oauth-verifier.js +2 -1
  185. package/dist/oauth-verifier.js.map +1 -1
  186. package/dist/output/build-authorize-data.d.ts +0 -1
  187. package/dist/output/build-authorize-data.d.ts.map +1 -1
  188. package/dist/output/build-authorize-data.js +0 -1
  189. package/dist/output/build-authorize-data.js.map +1 -1
  190. package/dist/output/build-customization-data.d.ts +241 -0
  191. package/dist/output/build-customization-data.d.ts.map +1 -0
  192. package/dist/output/build-customization-data.js +174 -0
  193. package/dist/output/build-customization-data.js.map +1 -0
  194. package/dist/output/output-manager.d.ts +16 -9
  195. package/dist/output/output-manager.d.ts.map +1 -1
  196. package/dist/output/output-manager.js +78 -42
  197. package/dist/output/output-manager.js.map +1 -1
  198. package/dist/output/send-authorize-redirect.d.ts +9 -6
  199. package/dist/output/send-authorize-redirect.d.ts.map +1 -1
  200. package/dist/output/send-authorize-redirect.js +20 -14
  201. package/dist/output/send-authorize-redirect.js.map +1 -1
  202. package/dist/output/send-web-page.d.ts +7 -2
  203. package/dist/output/send-web-page.d.ts.map +1 -1
  204. package/dist/output/send-web-page.js +37 -21
  205. package/dist/output/send-web-page.js.map +1 -1
  206. package/dist/request/request-manager.d.ts +1 -1
  207. package/dist/request/request-manager.d.ts.map +1 -1
  208. package/dist/request/request-manager.js +4 -4
  209. package/dist/request/request-manager.js.map +1 -1
  210. package/dist/request/request-store.d.ts +3 -3
  211. package/dist/request/request-store.d.ts.map +1 -1
  212. package/dist/request/request-store.js +11 -10
  213. package/dist/request/request-store.js.map +1 -1
  214. package/dist/token/token-store.d.ts +4 -4
  215. package/dist/token/token-store.d.ts.map +1 -1
  216. package/dist/token/token-store.js +13 -12
  217. package/dist/token/token-store.js.map +1 -1
  218. package/package.json +43 -20
  219. package/rollup.config.js +61 -17
  220. package/src/account/account-manager.ts +159 -8
  221. package/src/account/account-store.ts +127 -32
  222. package/src/account/sign-in-data.ts +15 -0
  223. package/src/account/sign-up-data.ts +11 -0
  224. package/src/assets/app/app.tsx +31 -16
  225. package/src/assets/app/backend-data.ts +15 -60
  226. package/src/assets/app/backend-types.ts +66 -0
  227. package/src/assets/app/components/forms/button-toggle-visibility.tsx +43 -0
  228. package/src/assets/app/components/forms/button.tsx +60 -0
  229. package/src/assets/app/components/forms/fieldset.tsx +55 -0
  230. package/src/assets/app/components/forms/form-card-async.tsx +103 -0
  231. package/src/assets/app/components/forms/form-card.tsx +49 -0
  232. package/src/assets/app/components/forms/input-checkbox.tsx +73 -0
  233. package/src/assets/app/components/forms/input-container.tsx +107 -0
  234. package/src/assets/app/components/forms/input-email-address.tsx +66 -0
  235. package/src/assets/app/components/forms/input-new-password.tsx +62 -0
  236. package/src/assets/app/components/forms/input-password.tsx +88 -0
  237. package/src/assets/app/components/forms/input-text.tsx +76 -0
  238. package/src/assets/app/components/forms/input-token.tsx +94 -0
  239. package/src/assets/app/components/forms/wizard-card.tsx +116 -0
  240. package/src/assets/app/components/layouts/layout-title-page.tsx +77 -0
  241. package/src/assets/app/components/layouts/layout-welcome.tsx +73 -0
  242. package/src/assets/app/components/utils/account-identifier.tsx +23 -0
  243. package/src/assets/app/components/utils/account-image.tsx +33 -0
  244. package/src/assets/app/components/utils/admonition.tsx +52 -0
  245. package/src/assets/app/components/utils/client-name.tsx +45 -0
  246. package/src/assets/app/components/utils/error-card.tsx +93 -0
  247. package/src/assets/app/components/utils/error-message.tsx +62 -0
  248. package/src/assets/app/components/utils/help-card.tsx +46 -0
  249. package/src/assets/app/components/utils/icons.tsx +88 -0
  250. package/src/assets/app/components/utils/link-anchor.tsx +28 -0
  251. package/src/assets/app/components/utils/link-title.tsx +26 -0
  252. package/src/assets/app/components/utils/multi-lang-string.tsx +56 -0
  253. package/src/assets/app/components/utils/password-strength-label.tsx +37 -0
  254. package/src/assets/app/components/utils/password-strength-meter.tsx +58 -0
  255. package/src/assets/app/components/{url-viewer.tsx → utils/url-viewer.tsx} +9 -6
  256. package/src/assets/app/hooks/use-api.ts +128 -55
  257. package/src/assets/app/hooks/use-async-action.ts +120 -0
  258. package/src/assets/app/hooks/use-browser-color-scheme.ts +31 -0
  259. package/src/assets/app/hooks/use-csrf-token.ts +1 -1
  260. package/src/assets/app/hooks/use-random-string.ts +37 -0
  261. package/src/assets/app/hooks/use-stepper.ts +87 -0
  262. package/src/assets/app/index.html +182 -0
  263. package/src/assets/app/lib/api.ts +248 -79
  264. package/src/assets/app/lib/clsx.ts +5 -8
  265. package/src/assets/app/lib/json-client.ts +94 -0
  266. package/src/assets/app/lib/password.ts +98 -0
  267. package/src/assets/app/lib/ref.ts +17 -0
  268. package/src/assets/app/locales/an/messages.po +492 -0
  269. package/src/assets/app/locales/ast/messages.po +492 -0
  270. package/src/assets/app/locales/ca/messages.po +492 -0
  271. package/src/assets/app/locales/da/messages.po +492 -0
  272. package/src/assets/app/locales/de/messages.po +492 -0
  273. package/src/assets/app/locales/el/messages.po +492 -0
  274. package/src/assets/app/locales/en/messages.po +492 -0
  275. package/src/assets/app/locales/en-GB/messages.po +492 -0
  276. package/src/assets/app/locales/es/messages.po +492 -0
  277. package/src/assets/app/locales/eu/messages.po +492 -0
  278. package/src/assets/app/locales/fi/messages.po +492 -0
  279. package/src/assets/app/locales/fr/messages.po +492 -0
  280. package/src/assets/app/locales/ga/messages.po +492 -0
  281. package/src/assets/app/locales/gl/messages.po +492 -0
  282. package/src/assets/app/locales/hi/messages.po +492 -0
  283. package/src/assets/app/locales/hu/messages.po +492 -0
  284. package/src/assets/app/locales/ia/messages.po +492 -0
  285. package/src/assets/app/locales/id/messages.po +492 -0
  286. package/src/assets/app/locales/it/messages.po +492 -0
  287. package/src/assets/app/locales/ja/messages.po +492 -0
  288. package/src/assets/app/locales/km/messages.po +492 -0
  289. package/src/assets/app/locales/ko/messages.po +492 -0
  290. package/src/assets/app/locales/load.ts +8 -0
  291. package/src/assets/app/locales/locale-context.ts +19 -0
  292. package/src/assets/app/locales/locale-provider.tsx +112 -0
  293. package/src/assets/app/locales/locale-selector.tsx +58 -0
  294. package/src/assets/app/locales/locales.ts +168 -0
  295. package/src/assets/app/locales/ne/messages.po +492 -0
  296. package/src/assets/app/locales/nl/messages.po +492 -0
  297. package/src/assets/app/locales/pl/messages.po +492 -0
  298. package/src/assets/app/locales/pt-BR/messages.po +492 -0
  299. package/src/assets/app/locales/ro/messages.po +492 -0
  300. package/src/assets/app/locales/ru/messages.po +492 -0
  301. package/src/assets/app/locales/sv/messages.po +492 -0
  302. package/src/assets/app/locales/th/messages.po +492 -0
  303. package/src/assets/app/locales/tr/messages.po +492 -0
  304. package/src/assets/app/locales/uk/messages.po +492 -0
  305. package/src/assets/app/locales/vi/messages.po +492 -0
  306. package/src/assets/app/locales/zh-CN/messages.po +492 -0
  307. package/src/assets/app/locales/zh-HK/messages.po +492 -0
  308. package/src/assets/app/locales/zh-TW/messages.po +492 -0
  309. package/src/assets/app/main.css +23 -2
  310. package/src/assets/app/main.tsx +24 -8
  311. package/src/assets/app/views/authorize/accept/accept-form.tsx +150 -0
  312. package/src/assets/app/views/authorize/accept/accept-view.tsx +70 -0
  313. package/src/assets/app/views/authorize/authorize-view.tsx +180 -0
  314. package/src/assets/app/views/authorize/reset-password/reset-password-confirm-form.tsx +88 -0
  315. package/src/assets/app/views/authorize/reset-password/reset-password-request-form.tsx +80 -0
  316. package/src/assets/app/views/authorize/reset-password/reset-password-view.tsx +127 -0
  317. package/src/assets/app/views/authorize/sign-in/sign-in-form.tsx +244 -0
  318. package/src/assets/app/views/authorize/sign-in/sign-in-picker.tsx +116 -0
  319. package/src/assets/app/views/authorize/sign-in/sign-in-view.tsx +145 -0
  320. package/src/assets/app/views/authorize/sign-up/sign-up-account-form.tsx +140 -0
  321. package/src/assets/app/views/authorize/sign-up/sign-up-disclaimer.tsx +51 -0
  322. package/src/assets/app/views/authorize/sign-up/sign-up-handle-form.tsx +289 -0
  323. package/src/assets/app/views/authorize/sign-up/sign-up-hcaptcha-form.tsx +108 -0
  324. package/src/assets/app/views/authorize/sign-up/sign-up-view.tsx +158 -0
  325. package/src/assets/app/views/authorize/welcome/welcome-view.tsx +56 -0
  326. package/src/assets/app/views/error/error-view.tsx +31 -0
  327. package/src/assets/asset.ts +1 -0
  328. package/src/assets/assets-middleware.ts +13 -8
  329. package/src/assets/index.ts +15 -2
  330. package/src/client/client-store.ts +10 -12
  331. package/src/device/device-manager.ts +8 -12
  332. package/src/device/device-store.ts +9 -15
  333. package/src/dpop/dpop-manager.ts +20 -8
  334. package/src/dpop/dpop-nonce.ts +58 -40
  335. package/src/errors/handle-unavailable-error.ts +18 -0
  336. package/src/errors/invalid-request-error.ts +10 -8
  337. package/src/lib/csp/index.ts +98 -0
  338. package/src/lib/hcaptcha.ts +182 -0
  339. package/src/lib/html/build-document.ts +60 -16
  340. package/src/lib/http/middleware.ts +4 -3
  341. package/src/lib/http/request.ts +31 -1
  342. package/src/lib/http/response.ts +22 -9
  343. package/src/lib/locale.ts +21 -0
  344. package/src/lib/util/function.ts +0 -3
  345. package/src/lib/util/type.ts +130 -1
  346. package/src/metadata/build-metadata.ts +2 -1
  347. package/src/oauth-errors.ts +1 -0
  348. package/src/oauth-hooks.ts +69 -3
  349. package/src/oauth-provider.ts +403 -307
  350. package/src/oauth-verifier.ts +3 -1
  351. package/src/output/build-authorize-data.ts +1 -3
  352. package/src/output/build-customization-data.ts +228 -0
  353. package/src/output/output-manager.ts +111 -48
  354. package/src/output/send-authorize-redirect.ts +43 -36
  355. package/src/output/send-web-page.ts +40 -26
  356. package/src/request/request-manager.ts +4 -4
  357. package/src/request/request-store.ts +12 -16
  358. package/src/token/token-store.ts +14 -18
  359. package/tailwind.config.js +5 -0
  360. package/tsconfig.backend.tsbuildinfo +1 -1
  361. package/tsconfig.frontend.tsbuildinfo +1 -1
  362. package/tsconfig.tools.tsbuildinfo +1 -1
  363. package/vite.config.mjs +16 -0
  364. package/.postcssrc.yml +0 -3
  365. package/dist/assets/app/main.css +0 -3
  366. package/dist/assets/app/main.js +0 -20
  367. package/dist/assets/app/main.js.map +0 -1
  368. package/dist/output/customization.d.ts +0 -27
  369. package/dist/output/customization.d.ts.map +0 -1
  370. package/dist/output/customization.js +0 -88
  371. package/dist/output/customization.js.map +0 -1
  372. package/src/assets/app/components/accept-form.tsx +0 -137
  373. package/src/assets/app/components/account-identifier.tsx +0 -18
  374. package/src/assets/app/components/account-picker.tsx +0 -127
  375. package/src/assets/app/components/button.tsx +0 -34
  376. package/src/assets/app/components/client-name.tsx +0 -37
  377. package/src/assets/app/components/fieldset.tsx +0 -26
  378. package/src/assets/app/components/form-card.tsx +0 -47
  379. package/src/assets/app/components/help-card.tsx +0 -42
  380. package/src/assets/app/components/icons/alert-icon.tsx +0 -5
  381. package/src/assets/app/components/icons/at-symbol-icon.tsx +0 -5
  382. package/src/assets/app/components/icons/caret-right-icon.tsx +0 -5
  383. package/src/assets/app/components/icons/lock-icon.tsx +0 -5
  384. package/src/assets/app/components/icons/token-icon.tsx +0 -5
  385. package/src/assets/app/components/icons/util.tsx +0 -17
  386. package/src/assets/app/components/info-card.tsx +0 -45
  387. package/src/assets/app/components/input-checkbox.tsx +0 -47
  388. package/src/assets/app/components/input-container.tsx +0 -37
  389. package/src/assets/app/components/input-layout.tsx +0 -47
  390. package/src/assets/app/components/input-text.tsx +0 -69
  391. package/src/assets/app/components/layout-title-page.tsx +0 -60
  392. package/src/assets/app/components/layout-welcome.tsx +0 -74
  393. package/src/assets/app/components/sign-in-form.tsx +0 -337
  394. package/src/assets/app/components/sign-up-account-form.tsx +0 -194
  395. package/src/assets/app/components/sign-up-disclaimer.tsx +0 -44
  396. package/src/assets/app/views/accept-view.tsx +0 -55
  397. package/src/assets/app/views/authorize-view.tsx +0 -106
  398. package/src/assets/app/views/error-view.tsx +0 -36
  399. package/src/assets/app/views/sign-in-view.tsx +0 -111
  400. package/src/assets/app/views/sign-up-view.tsx +0 -86
  401. package/src/assets/app/views/welcome-view.tsx +0 -54
  402. package/src/output/customization.ts +0 -118
package/.linguirc ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "format": "po",
3
+ "sourceLocale": "en",
4
+ "locales": [
5
+ "en",
6
+ "an",
7
+ "ast",
8
+ "ca",
9
+ "da",
10
+ "de",
11
+ "el",
12
+ "en-GB",
13
+ "es",
14
+ "eu",
15
+ "fi",
16
+ "fr",
17
+ "ga",
18
+ "gl",
19
+ "hi",
20
+ "hu",
21
+ "ia",
22
+ "id",
23
+ "it",
24
+ "ja",
25
+ "km",
26
+ "ko",
27
+ "ne",
28
+ "nl",
29
+ "pl",
30
+ "pt-BR",
31
+ "ro",
32
+ "ru",
33
+ "sv",
34
+ "th",
35
+ "tr",
36
+ "uk",
37
+ "vi",
38
+ "zh-CN",
39
+ "zh-HK",
40
+ "zh-TW"
41
+ ],
42
+ "fallbackLocales": {
43
+ "default": "en"
44
+ },
45
+ "catalogs": [
46
+ {
47
+ "path": "<rootDir>/src/assets/app/locales/{locale}/messages",
48
+ "include": [
49
+ "<rootDir>/src/assets/app"
50
+ ],
51
+ "exclude": [
52
+ "**/dist/**",
53
+ "**/node_modules/**"
54
+ ]
55
+ }
56
+ ]
57
+ }
package/CHANGELOG.md CHANGED
@@ -1,5 +1,34 @@
1
1
  # @atproto/oauth-provider
2
2
 
3
+ ## 0.5.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#3611](https://github.com/bluesky-social/atproto/pull/3611) [`c01d7f5d1`](https://github.com/bluesky-social/atproto/commit/c01d7f5d155445d7741c09f91c84af64b31bdbed) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Make branding colors optional
8
+
9
+ - [#3614](https://github.com/bluesky-social/atproto/pull/3614) [`8827ff433`](https://github.com/bluesky-social/atproto/commit/8827ff433a211d2db80840cfc4ee146a7fb44849) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Improve branding parsing
10
+
11
+ ## 0.5.0
12
+
13
+ ### Minor Changes
14
+
15
+ - [#2945](https://github.com/bluesky-social/atproto/pull/2945) [`850e39843`](https://github.com/bluesky-social/atproto/commit/850e39843cb0ec9ea716675f7568c0c601f45e29) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Add support for account sign-up
16
+
17
+ ### Patch Changes
18
+
19
+ - [#2945](https://github.com/bluesky-social/atproto/pull/2945) [`850e39843`](https://github.com/bluesky-social/atproto/commit/850e39843cb0ec9ea716675f7568c0c601f45e29) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Add support for password reset
20
+
21
+ - [#2945](https://github.com/bluesky-social/atproto/pull/2945) [`850e39843`](https://github.com/bluesky-social/atproto/commit/850e39843cb0ec9ea716675f7568c0c601f45e29) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Properly support locales with 3 chars (Asturian)
22
+
23
+ - [#2945](https://github.com/bluesky-social/atproto/pull/2945) [`850e39843`](https://github.com/bluesky-social/atproto/commit/850e39843cb0ec9ea716675f7568c0c601f45e29) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Add support for multiple locales
24
+
25
+ - Updated dependencies [[`850e39843`](https://github.com/bluesky-social/atproto/commit/850e39843cb0ec9ea716675f7568c0c601f45e29), [`850e39843`](https://github.com/bluesky-social/atproto/commit/850e39843cb0ec9ea716675f7568c0c601f45e29), [`850e39843`](https://github.com/bluesky-social/atproto/commit/850e39843cb0ec9ea716675f7568c0c601f45e29)]:
26
+ - @atproto-labs/fetch@0.2.2
27
+ - @atproto/oauth-types@0.2.4
28
+ - @atproto/jwk@0.1.4
29
+ - @atproto-labs/fetch-node@0.1.8
30
+ - @atproto/jwk-jose@0.1.5
31
+
3
32
  ## 0.4.0
4
33
 
5
34
  ### Minor Changes
@@ -1,14 +1,28 @@
1
+ import { OAuthIssuerIdentifier } from '@atproto/oauth-types';
1
2
  import { Client } from '../client/client.js';
2
3
  import { DeviceId } from '../device/device-id.js';
4
+ import { HCaptchaClient } from '../lib/hcaptcha.js';
5
+ import { OAuthHooks, RequestMetadata } from '../oauth-hooks.js';
6
+ import { Customization } from '../oauth-provider.js';
3
7
  import { Sub } from '../oidc/sub.js';
4
8
  import { ClientAuth } from '../token/token-store.js';
5
- import { Account, AccountInfo, AccountStore, SignInCredentials } from './account-store.js';
9
+ import { Account, AccountInfo, AccountStore, ResetPasswordConfirmData, ResetPasswordRequestData } from './account-store.js';
10
+ import { SignInData } from './sign-in-data.js';
11
+ import { SignUpData } from './sign-up-data.js';
6
12
  export declare class AccountManager {
7
13
  protected readonly store: AccountStore;
8
- constructor(store: AccountStore);
9
- signIn(credentials: SignInCredentials, deviceId: DeviceId): Promise<AccountInfo>;
14
+ protected readonly hooks: OAuthHooks;
15
+ protected readonly inviteCodeRequired: boolean;
16
+ protected readonly hcaptchaClient?: HCaptchaClient;
17
+ constructor(issuer: OAuthIssuerIdentifier, store: AccountStore, hooks: OAuthHooks, customization: Customization);
18
+ protected verifySignupData(data: SignUpData, deviceId: DeviceId, deviceMetadata: RequestMetadata): Promise<void>;
19
+ signUp(data: SignUpData, deviceId: DeviceId, deviceMetadata: RequestMetadata): Promise<AccountInfo>;
20
+ signIn(data: SignInData, deviceId: DeviceId, deviceMetadata: RequestMetadata): Promise<AccountInfo>;
10
21
  get(deviceId: DeviceId, sub: Sub): Promise<AccountInfo>;
11
22
  addAuthorizedClient(deviceId: DeviceId, account: Account, client: Client, _clientAuth: ClientAuth): Promise<void>;
12
23
  list(deviceId: DeviceId): Promise<AccountInfo[]>;
24
+ resetPasswordRequest(data: ResetPasswordRequestData): Promise<void>;
25
+ resetPasswordConfirm(data: ResetPasswordConfirmData): Promise<void>;
26
+ verifyHandleAvailability(handle: string): Promise<void>;
13
27
  }
14
28
  //# sourceMappingURL=account-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"account-manager.d.ts","sourceRoot":"","sources":["../../src/account/account-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAGjD,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EACL,OAAO,EACP,WAAW,EACX,YAAY,EACZ,iBAAiB,EAClB,MAAM,oBAAoB,CAAA;AAI3B,qBAAa,cAAc;IACb,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY;gBAAnB,KAAK,EAAE,YAAY;IAErC,MAAM,CACjB,WAAW,EAAE,iBAAiB,EAC9B,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,WAAW,CAAC;IASV,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC;IAOvD,mBAAmB,CAC9B,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,UAAU,GACtB,OAAO,CAAC,IAAI,CAAC;IAOH,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAI9D"}
1
+ {"version":3,"file":"account-manager.d.ts","sourceRoot":"","sources":["../../src/account/account-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAEtB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAEjD,OAAO,EAAE,cAAc,EAAwB,MAAM,oBAAoB,CAAA;AAGzE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EACL,OAAO,EACP,WAAW,EACX,YAAY,EACZ,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAK9C,qBAAa,cAAc;IAMvB,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY;IACtC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU;IANtC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAA;IAC9C,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAA;gBAGhD,MAAM,EAAE,qBAAqB,EACV,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,UAAU,EACpC,aAAa,EAAE,aAAa;cAQd,gBAAgB,CAC9B,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,eAAe,GAC9B,OAAO,CAAC,IAAI,CAAC;IA2CH,MAAM,CACjB,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,eAAe,GAC9B,OAAO,CAAC,WAAW,CAAC;IAsCV,MAAM,CACjB,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,eAAe,GAC9B,OAAO,CAAC,WAAW,CAAC;IA4BV,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC;IAOvD,mBAAmB,CAC9B,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,UAAU,GACtB,OAAO,CAAC,IAAI,CAAC;IAOH,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAKhD,oBAAoB,CAAC,IAAI,EAAE,wBAAwB;IAMnD,oBAAoB,CAAC,IAAI,EAAE,wBAAwB;IAMnD,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAKrE"}
@@ -2,27 +2,106 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AccountManager = void 0;
4
4
  const oauth_types_1 = require("@atproto/oauth-types");
5
+ const invalid_request_error_js_1 = require("../errors/invalid-request-error.js");
6
+ const hcaptcha_js_1 = require("../lib/hcaptcha.js");
7
+ const function_js_1 = require("../lib/util/function.js");
5
8
  const time_js_1 = require("../lib/util/time.js");
6
- const oauth_errors_js_1 = require("../oauth-errors.js");
7
9
  const TIMING_ATTACK_MITIGATION_DELAY = 400;
10
+ const BRUTE_FORCE_MITIGATION_DELAY = 300;
8
11
  class AccountManager {
9
12
  store;
10
- constructor(store) {
13
+ hooks;
14
+ inviteCodeRequired;
15
+ hcaptchaClient;
16
+ constructor(issuer, store, hooks, customization) {
11
17
  this.store = store;
18
+ this.hooks = hooks;
19
+ this.inviteCodeRequired = customization.inviteCodeRequired !== false;
20
+ this.hcaptchaClient = customization.hcaptcha
21
+ ? new hcaptcha_js_1.HCaptchaClient(new URL(issuer).hostname, customization.hcaptcha)
22
+ : undefined;
12
23
  }
13
- async signIn(credentials, deviceId) {
24
+ async verifySignupData(data, deviceId, deviceMetadata) {
25
+ let hcaptchaResult;
26
+ if (this.inviteCodeRequired && !data.inviteCode) {
27
+ throw new invalid_request_error_js_1.InvalidRequestError('Invite code is required');
28
+ }
29
+ if (this.hcaptchaClient) {
30
+ if (!data.hcaptchaToken) {
31
+ throw new invalid_request_error_js_1.InvalidRequestError('hCaptcha token is required');
32
+ }
33
+ const { allowed, result } = await this.hcaptchaClient.verify('signup', data.hcaptchaToken, deviceMetadata.ipAddress, data.handle, deviceMetadata.userAgent);
34
+ await (0, function_js_1.callAsync)(this.hooks.onSignupHcaptchaResult, {
35
+ data,
36
+ allowed,
37
+ result,
38
+ deviceId,
39
+ deviceMetadata,
40
+ });
41
+ if (!allowed) {
42
+ throw new invalid_request_error_js_1.InvalidRequestError('hCaptcha verification failed');
43
+ }
44
+ hcaptchaResult = result;
45
+ }
46
+ await (0, function_js_1.callAsync)(this.hooks.onSignupAttempt, {
47
+ data,
48
+ deviceId,
49
+ deviceMetadata,
50
+ hcaptchaResult,
51
+ });
52
+ }
53
+ async signUp(data, deviceId, deviceMetadata) {
54
+ await this.verifySignupData(data, deviceId, deviceMetadata);
55
+ // Mitigation against brute forcing email of users.
56
+ // @TODO Add rate limit to all the OAuth routes.
57
+ return (0, time_js_1.constantTime)(BRUTE_FORCE_MITIGATION_DELAY, async () => {
58
+ let account;
59
+ try {
60
+ account = await this.store.createAccount(data);
61
+ }
62
+ catch (err) {
63
+ throw invalid_request_error_js_1.InvalidRequestError.from(err, 'Account creation failed');
64
+ }
65
+ try {
66
+ const info = await this.store.addDeviceAccount(deviceId, account.sub, false);
67
+ await (0, function_js_1.callAsync)(this.hooks.onSignedUp, {
68
+ data,
69
+ info,
70
+ account,
71
+ deviceId,
72
+ deviceMetadata,
73
+ });
74
+ return { account, info };
75
+ }
76
+ catch (err) {
77
+ throw invalid_request_error_js_1.InvalidRequestError.from(err, 'Something went wrong, try singing-in');
78
+ }
79
+ });
80
+ }
81
+ async signIn(data, deviceId, deviceMetadata) {
14
82
  return (0, time_js_1.constantTime)(TIMING_ATTACK_MITIGATION_DELAY, async () => {
15
- const result = await this.store.authenticateAccount(credentials, deviceId);
16
- if (result)
17
- return result;
18
- throw new oauth_errors_js_1.InvalidRequestError('Invalid credentials');
83
+ try {
84
+ const account = await this.store.authenticateAccount(data);
85
+ const info = await this.store.addDeviceAccount(deviceId, account.sub, data.remember);
86
+ await (0, function_js_1.callAsync)(this.hooks.onSignedIn, {
87
+ data,
88
+ info,
89
+ account,
90
+ deviceId,
91
+ deviceMetadata,
92
+ });
93
+ return { account, info };
94
+ }
95
+ catch (err) {
96
+ throw invalid_request_error_js_1.InvalidRequestError.from(err, 'Unable to sign-in due to an unexpected server error');
97
+ }
19
98
  });
20
99
  }
21
100
  async get(deviceId, sub) {
22
101
  const result = await this.store.getDeviceAccount(deviceId, sub);
23
102
  if (result)
24
103
  return result;
25
- throw new oauth_errors_js_1.InvalidRequestError(`Account not found`);
104
+ throw new invalid_request_error_js_1.InvalidRequestError(`Account not found`);
26
105
  }
27
106
  async addAuthorizedClient(deviceId, account, client, _clientAuth) {
28
107
  // "Loopback" clients are not distinguishable from one another.
@@ -34,6 +113,21 @@ class AccountManager {
34
113
  const results = await this.store.listDeviceAccounts(deviceId);
35
114
  return results.filter((result) => result.info.remembered);
36
115
  }
116
+ async resetPasswordRequest(data) {
117
+ return (0, time_js_1.constantTime)(TIMING_ATTACK_MITIGATION_DELAY, async () => {
118
+ await this.store.resetPasswordRequest(data);
119
+ });
120
+ }
121
+ async resetPasswordConfirm(data) {
122
+ return (0, time_js_1.constantTime)(TIMING_ATTACK_MITIGATION_DELAY, async () => {
123
+ await this.store.resetPasswordConfirm(data);
124
+ });
125
+ }
126
+ async verifyHandleAvailability(handle) {
127
+ return (0, time_js_1.constantTime)(TIMING_ATTACK_MITIGATION_DELAY, async () => {
128
+ return this.store.verifyHandleAvailability(handle);
129
+ });
130
+ }
37
131
  }
38
132
  exports.AccountManager = AccountManager;
39
133
  //# sourceMappingURL=account-manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"account-manager.js","sourceRoot":"","sources":["../../src/account/account-manager.ts"],"names":[],"mappings":";;;AAAA,sDAA8D;AAG9D,iDAAkD;AAClD,wDAAwD;AAUxD,MAAM,8BAA8B,GAAG,GAAG,CAAA;AAE1C,MAAa,cAAc;IACM;IAA/B,YAA+B,KAAmB;QAAnB,UAAK,GAAL,KAAK,CAAc;IAAG,CAAC;IAE/C,KAAK,CAAC,MAAM,CACjB,WAA8B,EAC9B,QAAkB;QAElB,OAAO,IAAA,sBAAY,EAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;YAC1E,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAA;YAEzB,MAAM,IAAI,qCAAmB,CAAC,qBAAqB,CAAC,CAAA;QACtD,CAAC,CAAC,CAAA;IACJ,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,QAAkB,EAAE,GAAQ;QAC3C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;QAC/D,IAAI,MAAM;YAAE,OAAO,MAAM,CAAA;QAEzB,MAAM,IAAI,qCAAmB,CAAC,mBAAmB,CAAC,CAAA;IACpD,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAC9B,QAAkB,EAClB,OAAgB,EAChB,MAAc,EACd,WAAuB;QAEvB,+DAA+D;QAC/D,IAAI,IAAA,qCAAuB,EAAC,MAAM,CAAC,EAAE,CAAC;YAAE,OAAM;QAE9C,MAAM,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;IACxE,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,QAAkB;QAClC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAA;QAC7D,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC3D,CAAC;CACF;AAtCD,wCAsCC"}
1
+ {"version":3,"file":"account-manager.js","sourceRoot":"","sources":["../../src/account/account-manager.ts"],"names":[],"mappings":"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"}
@@ -2,43 +2,103 @@ import { z } from 'zod';
2
2
  import { ClientId } from '../client/client-id.js';
3
3
  import { DeviceId } from '../device/device-id.js';
4
4
  import { Awaitable } from '../lib/util/type.js';
5
+ import { HandleUnavailableError, InvalidRequestError, SecondAuthenticationFactorRequiredError } from '../oauth-errors.js';
5
6
  import { Sub } from '../oidc/sub.js';
6
7
  import { Account } from './account.js';
7
- export declare const signInCredentialsSchema: z.ZodObject<{
8
+ export declare const oldPasswordSchema: z.ZodString;
9
+ export declare const newPasswordSchema: z.ZodString;
10
+ export declare const tokenSchema: z.ZodString;
11
+ export declare const handleSchema: z.ZodString;
12
+ export declare const emailSchema: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
13
+ export declare const authenticateAccountDataSchema: z.ZodObject<{
14
+ locale: z.ZodString;
8
15
  username: z.ZodString;
9
16
  password: z.ZodString;
10
- /**
11
- * If false, the account must not be returned from
12
- * {@link AccountStore.listDeviceAccounts}. Note that this only makes sense when
13
- * used with a device ID.
14
- */
15
- remember: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
16
17
  emailOtp: z.ZodOptional<z.ZodString>;
17
- }, "strip", z.ZodTypeAny, {
18
+ }, "strict", z.ZodTypeAny, {
19
+ locale: string;
18
20
  password: string;
19
21
  username: string;
20
- remember: boolean;
21
22
  emailOtp?: string | undefined;
22
23
  }, {
24
+ locale: string;
23
25
  password: string;
24
26
  username: string;
25
27
  emailOtp?: string | undefined;
26
- remember?: boolean | undefined;
27
28
  }>;
28
- export type SignInCredentials = z.TypeOf<typeof signInCredentialsSchema>;
29
+ export type AuthenticateAccountData = z.TypeOf<typeof authenticateAccountDataSchema>;
30
+ export declare const createAccountDataSchema: z.ZodObject<{
31
+ locale: z.ZodString;
32
+ handle: z.ZodString;
33
+ email: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
34
+ password: z.ZodIntersection<z.ZodString, z.ZodString>;
35
+ inviteCode: z.ZodOptional<z.ZodString>;
36
+ }, "strict", z.ZodTypeAny, {
37
+ email: string;
38
+ locale: string;
39
+ password: string;
40
+ handle: string;
41
+ inviteCode?: string | undefined;
42
+ }, {
43
+ email: string;
44
+ locale: string;
45
+ password: string;
46
+ handle: string;
47
+ inviteCode?: string | undefined;
48
+ }>;
49
+ export type CreateAccountData = z.TypeOf<typeof createAccountDataSchema>;
50
+ export declare const resetPasswordRequestDataSchema: z.ZodObject<{
51
+ locale: z.ZodString;
52
+ email: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
53
+ }, "strict", z.ZodTypeAny, {
54
+ email: string;
55
+ locale: string;
56
+ }, {
57
+ email: string;
58
+ locale: string;
59
+ }>;
60
+ export type ResetPasswordRequestData = z.TypeOf<typeof resetPasswordRequestDataSchema>;
61
+ export declare const resetPasswordConfirmDataSchema: z.ZodObject<{
62
+ token: z.ZodString;
63
+ password: z.ZodIntersection<z.ZodString, z.ZodString>;
64
+ }, "strict", z.ZodTypeAny, {
65
+ token: string;
66
+ password: string;
67
+ }, {
68
+ token: string;
69
+ password: string;
70
+ }>;
71
+ export type ResetPasswordConfirmData = z.TypeOf<typeof resetPasswordConfirmDataSchema>;
29
72
  export type DeviceAccountInfo = {
30
73
  remembered: boolean;
31
74
  authenticatedAt: Date;
32
75
  authorizedClients: readonly ClientId[];
33
76
  };
34
- export type { Account, DeviceId, Sub };
77
+ export { type Account, type DeviceId, HandleUnavailableError, InvalidRequestError, SecondAuthenticationFactorRequiredError, type Sub, };
35
78
  export type AccountInfo = {
36
79
  account: Account;
37
80
  info: DeviceAccountInfo;
38
81
  };
39
82
  export interface AccountStore {
40
- authenticateAccount(credentials: SignInCredentials, deviceId: DeviceId): Awaitable<AccountInfo | null>;
83
+ /**
84
+ * @throws {HandleUnavailableError} - To indicate that the handle is already taken
85
+ * @throws {InvalidRequestError} - To indicate that some data is invalid
86
+ */
87
+ createAccount(data: CreateAccountData): Awaitable<Account>;
88
+ /**
89
+ * @throws {InvalidRequestError} - When the credentials are not valid
90
+ * @throws {SecondAuthenticationFactorRequiredError} - To indicate that an {@link SecondAuthenticationFactorRequiredError.type} is required in the credentials
91
+ */
92
+ authenticateAccount(data: AuthenticateAccountData): Awaitable<Account>;
41
93
  addAuthorizedClient(deviceId: DeviceId, sub: Sub, clientId: ClientId): Awaitable<void>;
94
+ /**
95
+ * @param remember If false, the account must not be returned from
96
+ * {@link AccountStore.listDeviceAccounts}.
97
+ */
98
+ addDeviceAccount(deviceId: DeviceId, sub: Sub, remember: boolean): Awaitable<DeviceAccountInfo>;
99
+ /**
100
+ * @returns The account info, whether the account, even if remember was false.
101
+ */
42
102
  getDeviceAccount(deviceId: DeviceId, sub: Sub): Awaitable<AccountInfo | null>;
43
103
  removeDeviceAccount(deviceId: DeviceId, sub: Sub): Awaitable<void>;
44
104
  /**
@@ -46,7 +106,13 @@ export interface AccountStore {
46
106
  * be returned. The others will be ignored.
47
107
  */
48
108
  listDeviceAccounts(deviceId: DeviceId): Awaitable<AccountInfo[]>;
109
+ resetPasswordRequest(data: ResetPasswordRequestData): Awaitable<void>;
110
+ resetPasswordConfirm(data: ResetPasswordConfirmData): Awaitable<void>;
111
+ /**
112
+ * @throws {HandleUnavailableError} - To indicate that the handle is already taken
113
+ */
114
+ verifyHandleAvailability(handle: string): Awaitable<void>;
49
115
  }
50
- export declare function isAccountStore(implementation: Record<string, unknown> & Partial<AccountStore>): implementation is Record<string, unknown> & AccountStore;
51
- export declare function asAccountStore(implementation?: Record<string, unknown> & Partial<AccountStore>): AccountStore;
116
+ export declare const isAccountStore: <V extends Partial<AccountStore>>(value: V) => value is V & import("../lib/util/type.js").RequiredDefined<AccountStore>;
117
+ export declare function asAccountStore<V>(implementation: V): V & AccountStore;
52
118
  //# sourceMappingURL=account-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"account-store.d.ts","sourceRoot":"","sources":["../../src/account/account-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,eAAO,MAAM,uBAAuB;;;IAIlC;;;;OAIG;;;;;;;;;;;;;EAIH,CAAA;AAEF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAExE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,EAAE,OAAO,CAAA;IACnB,eAAe,EAAE,IAAI,CAAA;IACrB,iBAAiB,EAAE,SAAS,QAAQ,EAAE,CAAA;CACvC,CAAA;AAGD,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAA;AAEtC,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,iBAAiB,CAAA;CACxB,CAAA;AAED,MAAM,WAAW,YAAY;IAC3B,mBAAmB,CACjB,WAAW,EAAE,iBAAiB,EAC9B,QAAQ,EAAE,QAAQ,GACjB,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IAEhC,mBAAmB,CACjB,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,QAAQ,GACjB,SAAS,CAAC,IAAI,CAAC,CAAA;IAElB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAG,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IAC7E,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;IAElE;;;OAGG;IACH,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,CAAA;CACjE;AAED,wBAAgB,cAAc,CAC5B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,GAC9D,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAQ1D;AAED,wBAAgB,cAAc,CAC5B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,GAC/D,YAAY,CAKd"}
1
+ {"version":3,"file":"account-store.d.ts","sourceRoot":"","sources":["../../src/account/account-store.ts"],"names":[],"mappings":"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"}
@@ -1,29 +1,80 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.signInCredentialsSchema = void 0;
4
- exports.isAccountStore = isAccountStore;
3
+ exports.isAccountStore = exports.SecondAuthenticationFactorRequiredError = exports.InvalidRequestError = exports.HandleUnavailableError = exports.resetPasswordConfirmDataSchema = exports.resetPasswordRequestDataSchema = exports.createAccountDataSchema = exports.authenticateAccountDataSchema = exports.emailSchema = exports.handleSchema = exports.tokenSchema = exports.newPasswordSchema = exports.oldPasswordSchema = void 0;
5
4
  exports.asAccountStore = asAccountStore;
5
+ const address_1 = require("@hapi/address");
6
+ const disposable_email_domains_js_1 = require("disposable-email-domains-js");
6
7
  const zod_1 = require("zod");
7
- exports.signInCredentialsSchema = zod_1.z.object({
8
+ const locale_js_1 = require("../lib/locale.js");
9
+ const type_js_1 = require("../lib/util/type.js");
10
+ const oauth_errors_js_1 = require("../oauth-errors.js");
11
+ Object.defineProperty(exports, "HandleUnavailableError", { enumerable: true, get: function () { return oauth_errors_js_1.HandleUnavailableError; } });
12
+ Object.defineProperty(exports, "InvalidRequestError", { enumerable: true, get: function () { return oauth_errors_js_1.InvalidRequestError; } });
13
+ Object.defineProperty(exports, "SecondAuthenticationFactorRequiredError", { enumerable: true, get: function () { return oauth_errors_js_1.SecondAuthenticationFactorRequiredError; } });
14
+ // @NOTE Change the length here to force stronger passwords (through a reset)
15
+ exports.oldPasswordSchema = zod_1.z.string().min(1);
16
+ exports.newPasswordSchema = zod_1.z.string().min(8);
17
+ exports.tokenSchema = zod_1.z.string().regex(/^[A-Z2-7]{5}-[A-Z2-7]{5}$/);
18
+ exports.handleSchema = zod_1.z
19
+ .string()
20
+ .min(3)
21
+ .max(30)
22
+ .regex(/^[a-z0-9][a-z0-9-]+[a-z0-9](?:\.[a-z0-9][a-z0-9-]+[a-z0-9])+$/);
23
+ exports.emailSchema = zod_1.z
24
+ .string()
25
+ .email()
26
+ // @NOTE using @hapi/address here, in addition to the email() check to ensure
27
+ // compatibility with the current email validation in the PDS's account
28
+ // manager
29
+ .refine(address_1.isEmailValid, {
30
+ message: 'Invalid email address',
31
+ })
32
+ .refine((email) => !(0, disposable_email_domains_js_1.isDisposableEmail)(email), {
33
+ message: 'Disposable email addresses are not allowed',
34
+ });
35
+ exports.authenticateAccountDataSchema = zod_1.z
36
+ .object({
37
+ locale: locale_js_1.localeSchema,
8
38
  username: zod_1.z.string(),
9
- password: zod_1.z.string(),
10
- /**
11
- * If false, the account must not be returned from
12
- * {@link AccountStore.listDeviceAccounts}. Note that this only makes sense when
13
- * used with a device ID.
14
- */
15
- remember: zod_1.z.boolean().optional().default(false),
39
+ password: exports.oldPasswordSchema,
16
40
  emailOtp: zod_1.z.string().optional(),
17
- });
18
- function isAccountStore(implementation) {
19
- return (typeof implementation.authenticateAccount === 'function' &&
20
- typeof implementation.getDeviceAccount === 'function' &&
21
- typeof implementation.addAuthorizedClient === 'function' &&
22
- typeof implementation.listDeviceAccounts === 'function' &&
23
- typeof implementation.removeDeviceAccount === 'function');
24
- }
41
+ })
42
+ .strict();
43
+ exports.createAccountDataSchema = zod_1.z
44
+ .object({
45
+ locale: locale_js_1.localeSchema,
46
+ handle: exports.handleSchema,
47
+ email: exports.emailSchema,
48
+ password: zod_1.z.intersection(exports.oldPasswordSchema, exports.newPasswordSchema),
49
+ inviteCode: exports.tokenSchema.optional(),
50
+ })
51
+ .strict();
52
+ exports.resetPasswordRequestDataSchema = zod_1.z
53
+ .object({
54
+ locale: locale_js_1.localeSchema,
55
+ email: exports.emailSchema,
56
+ })
57
+ .strict();
58
+ exports.resetPasswordConfirmDataSchema = zod_1.z
59
+ .object({
60
+ token: exports.tokenSchema,
61
+ password: zod_1.z.intersection(exports.oldPasswordSchema, exports.newPasswordSchema),
62
+ })
63
+ .strict();
64
+ exports.isAccountStore = (0, type_js_1.buildInterfaceChecker)([
65
+ 'createAccount',
66
+ 'authenticateAccount',
67
+ 'addAuthorizedClient',
68
+ 'addDeviceAccount',
69
+ 'getDeviceAccount',
70
+ 'removeDeviceAccount',
71
+ 'listDeviceAccounts',
72
+ 'resetPasswordRequest',
73
+ 'resetPasswordConfirm',
74
+ 'verifyHandleAvailability',
75
+ ]);
25
76
  function asAccountStore(implementation) {
26
- if (!implementation || !isAccountStore(implementation)) {
77
+ if (!implementation || !(0, exports.isAccountStore)(implementation)) {
27
78
  throw new Error('Invalid AccountStore implementation');
28
79
  }
29
80
  return implementation;
@@ -1 +1 @@
1
- {"version":3,"file":"account-store.js","sourceRoot":"","sources":["../../src/account/account-store.ts"],"names":[],"mappings":";;;AA2DA,wCAUC;AAED,wCAOC;AA9ED,6BAAuB;AAOV,QAAA,uBAAuB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC9C,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;IACpB,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;IAEpB;;;;OAIG;IACH,QAAQ,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAE/C,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAA;AAwCF,SAAgB,cAAc,CAC5B,cAA+D;IAE/D,OAAO,CACL,OAAO,cAAc,CAAC,mBAAmB,KAAK,UAAU;QACxD,OAAO,cAAc,CAAC,gBAAgB,KAAK,UAAU;QACrD,OAAO,cAAc,CAAC,mBAAmB,KAAK,UAAU;QACxD,OAAO,cAAc,CAAC,kBAAkB,KAAK,UAAU;QACvD,OAAO,cAAc,CAAC,mBAAmB,KAAK,UAAU,CACzD,CAAA;AACH,CAAC;AAED,SAAgB,cAAc,CAC5B,cAAgE;IAEhE,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IACxD,CAAC;IACD,OAAO,cAAc,CAAA;AACvB,CAAC"}
1
+ {"version":3,"file":"account-store.js","sourceRoot":"","sources":["../../src/account/account-store.ts"],"names":[],"mappings":";;;AAwKA,wCAKC;AA7KD,2CAA4C;AAC5C,6EAA+D;AAC/D,6BAAuB;AAGvB,gDAA+C;AAC/C,iDAAsE;AACtE,wDAI2B;AAmFzB,uGAtFA,wCAAsB,OAsFA;AACtB,oGAtFA,qCAAmB,OAsFA;AACnB,wHAtFA,yDAAuC,OAsFA;AAjFzC,6EAA6E;AAChE,QAAA,iBAAiB,GAAG,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AACrC,QAAA,iBAAiB,GAAG,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AACrC,QAAA,WAAW,GAAG,OAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAA;AAC3D,QAAA,YAAY,GAAG,OAAC;KAC1B,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,EAAE,CAAC;KACP,KAAK,CAAC,+DAA+D,CAAC,CAAA;AAC5D,QAAA,WAAW,GAAG,OAAC;KACzB,MAAM,EAAE;KACR,KAAK,EAAE;IACR,6EAA6E;IAC7E,uEAAuE;IACvE,UAAU;KACT,MAAM,CAAC,sBAAY,EAAE;IACpB,OAAO,EAAE,uBAAuB;CACjC,CAAC;KACD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAA,+CAAiB,EAAC,KAAK,CAAC,EAAE;IAC5C,OAAO,EAAE,4CAA4C;CACtD,CAAC,CAAA;AAES,QAAA,6BAA6B,GAAG,OAAC;KAC3C,MAAM,CAAC;IACN,MAAM,EAAE,wBAAY;IACpB,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;IACpB,QAAQ,EAAE,yBAAiB;IAC3B,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC;KACD,MAAM,EAAE,CAAA;AAME,QAAA,uBAAuB,GAAG,OAAC;KACrC,MAAM,CAAC;IACN,MAAM,EAAE,wBAAY;IACpB,MAAM,EAAE,oBAAY;IACpB,KAAK,EAAE,mBAAW;IAClB,QAAQ,EAAE,OAAC,CAAC,YAAY,CAAC,yBAAiB,EAAE,yBAAiB,CAAC;IAC9D,UAAU,EAAE,mBAAW,CAAC,QAAQ,EAAE;CACnC,CAAC;KACD,MAAM,EAAE,CAAA;AAIE,QAAA,8BAA8B,GAAG,OAAC;KAC5C,MAAM,CAAC;IACN,MAAM,EAAE,wBAAY;IACpB,KAAK,EAAE,mBAAW;CACnB,CAAC;KACD,MAAM,EAAE,CAAA;AAME,QAAA,8BAA8B,GAAG,OAAC;KAC5C,MAAM,CAAC;IACN,KAAK,EAAE,mBAAW;IAClB,QAAQ,EAAE,OAAC,CAAC,YAAY,CAAC,yBAAiB,EAAE,yBAAiB,CAAC;CAC/D,CAAC;KACD,MAAM,EAAE,CAAA;AA6EE,QAAA,cAAc,GAAG,IAAA,+BAAqB,EAAe;IAChE,eAAe;IACf,qBAAqB;IACrB,qBAAqB;IACrB,kBAAkB;IAClB,kBAAkB;IAClB,qBAAqB;IACrB,oBAAoB;IACpB,sBAAsB;IACtB,sBAAsB;IACtB,0BAA0B;CAC3B,CAAC,CAAA;AAEF,SAAgB,cAAc,CAAI,cAAiB;IACjD,IAAI,CAAC,cAAc,IAAI,CAAC,IAAA,sBAAc,EAAC,cAAc,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IACxD,CAAC;IACD,OAAO,cAAc,CAAA;AACvB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { z } from 'zod';
2
+ export declare const signInDataSchema: z.ZodObject<z.objectUtil.extendShape<{
3
+ locale: z.ZodString;
4
+ username: z.ZodString;
5
+ password: z.ZodString;
6
+ emailOtp: z.ZodOptional<z.ZodString>;
7
+ }, {
8
+ /**
9
+ * If false, the account must not be returned from
10
+ * {@link AccountStore.listDeviceAccounts}. Note that this only makes sense when
11
+ * used with a device ID.
12
+ */
13
+ remember: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
14
+ }>, "strict", z.ZodTypeAny, {
15
+ locale: string;
16
+ password: string;
17
+ username: string;
18
+ remember: boolean;
19
+ emailOtp?: string | undefined;
20
+ }, {
21
+ locale: string;
22
+ password: string;
23
+ username: string;
24
+ emailOtp?: string | undefined;
25
+ remember?: boolean | undefined;
26
+ }>;
27
+ export type SignInData = z.TypeOf<typeof signInDataSchema>;
28
+ //# sourceMappingURL=sign-in-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign-in-data.d.ts","sourceRoot":"","sources":["../../src/account/sign-in-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,gBAAgB;;;;;;IAEzB;;;;OAIG;;;;;;;;;;;;;;EAGI,CAAA;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAA"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.signInDataSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const account_store_js_1 = require("./account-store.js");
6
+ exports.signInDataSchema = account_store_js_1.authenticateAccountDataSchema
7
+ .extend({
8
+ /**
9
+ * If false, the account must not be returned from
10
+ * {@link AccountStore.listDeviceAccounts}. Note that this only makes sense when
11
+ * used with a device ID.
12
+ */
13
+ remember: zod_1.z.boolean().optional().default(false),
14
+ })
15
+ .strict();
16
+ //# sourceMappingURL=sign-in-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign-in-data.js","sourceRoot":"","sources":["../../src/account/sign-in-data.ts"],"names":[],"mappings":";;;AAAA,6BAAuB;AACvB,yDAAkE;AAErD,QAAA,gBAAgB,GAAG,gDAA6B;KAC1D,MAAM,CAAC;IACN;;;;OAIG;IACH,QAAQ,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CAChD,CAAC;KACD,MAAM,EAAE,CAAA"}
@@ -0,0 +1,26 @@
1
+ import { z } from 'zod';
2
+ export declare const signUpDataSchema: z.ZodObject<z.objectUtil.extendShape<{
3
+ locale: z.ZodString;
4
+ handle: z.ZodString;
5
+ email: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
6
+ password: z.ZodIntersection<z.ZodString, z.ZodString>;
7
+ inviteCode: z.ZodOptional<z.ZodString>;
8
+ }, {
9
+ hcaptchaToken: z.ZodOptional<z.ZodString>;
10
+ }>, "strict", z.ZodTypeAny, {
11
+ email: string;
12
+ locale: string;
13
+ password: string;
14
+ handle: string;
15
+ inviteCode?: string | undefined;
16
+ hcaptchaToken?: string | undefined;
17
+ }, {
18
+ email: string;
19
+ locale: string;
20
+ password: string;
21
+ handle: string;
22
+ inviteCode?: string | undefined;
23
+ hcaptchaToken?: string | undefined;
24
+ }>;
25
+ export type SignUpData = z.TypeOf<typeof signUpDataSchema>;
26
+ //# sourceMappingURL=sign-up-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign-up-data.d.ts","sourceRoot":"","sources":["../../src/account/sign-up-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;EAIlB,CAAA;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAA"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.signUpDataSchema = void 0;
4
+ const hcaptcha_js_1 = require("../lib/hcaptcha.js");
5
+ const account_store_js_1 = require("./account-store.js");
6
+ exports.signUpDataSchema = account_store_js_1.createAccountDataSchema
7
+ .extend({
8
+ hcaptchaToken: hcaptcha_js_1.hcaptchaTokenSchema.optional(),
9
+ })
10
+ .strict();
11
+ //# sourceMappingURL=sign-up-data.js.map