@atproto/oauth-provider 0.3.1 → 0.5.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 (404) hide show
  1. package/.linguirc +57 -0
  2. package/CHANGELOG.md +29 -0
  3. package/LICENSE.txt +1 -1
  4. package/dist/account/account-manager.d.ts +17 -3
  5. package/dist/account/account-manager.d.ts.map +1 -1
  6. package/dist/account/account-manager.js +102 -8
  7. package/dist/account/account-manager.js.map +1 -1
  8. package/dist/account/account-store.d.ts +81 -15
  9. package/dist/account/account-store.d.ts.map +1 -1
  10. package/dist/account/account-store.js +70 -19
  11. package/dist/account/account-store.js.map +1 -1
  12. package/dist/account/sign-in-data.d.ts +28 -0
  13. package/dist/account/sign-in-data.d.ts.map +1 -0
  14. package/dist/account/sign-in-data.js +16 -0
  15. package/dist/account/sign-in-data.js.map +1 -0
  16. package/dist/account/sign-up-data.d.ts +26 -0
  17. package/dist/account/sign-up-data.d.ts.map +1 -0
  18. package/dist/account/sign-up-data.js +11 -0
  19. package/dist/account/sign-up-data.js.map +1 -0
  20. package/dist/assets/app/bundle-manifest.json +598 -6
  21. package/dist/assets/app/index-ItwwtJ8r.js +36 -0
  22. package/dist/assets/app/index-ItwwtJ8r.js.map +1 -0
  23. package/dist/assets/app/main-B_dNxQo_.js +4 -0
  24. package/dist/assets/app/main-B_dNxQo_.js.map +1 -0
  25. package/dist/assets/app/main-CSatvmRR.css +3 -0
  26. package/dist/assets/app/main-CSatvmRR.js +306 -0
  27. package/dist/assets/app/main-CSatvmRR.js.map +1 -0
  28. package/dist/assets/app/messages-BQeltXSF.js +4 -0
  29. package/dist/assets/app/messages-BQeltXSF.js.map +1 -0
  30. package/dist/assets/app/messages-BQkEhfjg.js +4 -0
  31. package/dist/assets/app/messages-BQkEhfjg.js.map +1 -0
  32. package/dist/assets/app/messages-BUjKj_UJ.js +4 -0
  33. package/dist/assets/app/messages-BUjKj_UJ.js.map +1 -0
  34. package/dist/assets/app/messages-BWIQa8fO.js +4 -0
  35. package/dist/assets/app/messages-BWIQa8fO.js.map +1 -0
  36. package/dist/assets/app/messages-BaNVb0bp.js +4 -0
  37. package/dist/assets/app/messages-BaNVb0bp.js.map +1 -0
  38. package/dist/assets/app/messages-BaizVXcF.js +4 -0
  39. package/dist/assets/app/messages-BaizVXcF.js.map +1 -0
  40. package/dist/assets/app/messages-BfoClA1Y.js +4 -0
  41. package/dist/assets/app/messages-BfoClA1Y.js.map +1 -0
  42. package/dist/assets/app/messages-BsKGDZnC.js +4 -0
  43. package/dist/assets/app/messages-BsKGDZnC.js.map +1 -0
  44. package/dist/assets/app/messages-Bu-TJhml.js +4 -0
  45. package/dist/assets/app/messages-Bu-TJhml.js.map +1 -0
  46. package/dist/assets/app/messages-BvOKnBQk.js +4 -0
  47. package/dist/assets/app/messages-BvOKnBQk.js.map +1 -0
  48. package/dist/assets/app/messages-BxDzCiWz.js +4 -0
  49. package/dist/assets/app/messages-BxDzCiWz.js.map +1 -0
  50. package/dist/assets/app/messages-CDgFOy4S.js +4 -0
  51. package/dist/assets/app/messages-CDgFOy4S.js.map +1 -0
  52. package/dist/assets/app/messages-CLbTz0o9.js +4 -0
  53. package/dist/assets/app/messages-CLbTz0o9.js.map +1 -0
  54. package/dist/assets/app/messages-CNwSh0t7.js +4 -0
  55. package/dist/assets/app/messages-CNwSh0t7.js.map +1 -0
  56. package/dist/assets/app/messages-CSMNJ6P8.js +4 -0
  57. package/dist/assets/app/messages-CSMNJ6P8.js.map +1 -0
  58. package/dist/assets/app/messages-CZQUw3mp.js +4 -0
  59. package/dist/assets/app/messages-CZQUw3mp.js.map +1 -0
  60. package/dist/assets/app/messages-CZT41oVp.js +4 -0
  61. package/dist/assets/app/messages-CZT41oVp.js.map +1 -0
  62. package/dist/assets/app/messages-C_b-d3t8.js +4 -0
  63. package/dist/assets/app/messages-C_b-d3t8.js.map +1 -0
  64. package/dist/assets/app/messages-C_u3MTc2.js +4 -0
  65. package/dist/assets/app/messages-C_u3MTc2.js.map +1 -0
  66. package/dist/assets/app/messages-Cn8nHZic.js +4 -0
  67. package/dist/assets/app/messages-Cn8nHZic.js.map +1 -0
  68. package/dist/assets/app/messages-CtDywJUm.js +4 -0
  69. package/dist/assets/app/messages-CtDywJUm.js.map +1 -0
  70. package/dist/assets/app/messages-CurtIjBF.js +4 -0
  71. package/dist/assets/app/messages-CurtIjBF.js.map +1 -0
  72. package/dist/assets/app/messages-Cv6zIbaP.js +4 -0
  73. package/dist/assets/app/messages-Cv6zIbaP.js.map +1 -0
  74. package/dist/assets/app/messages-D1eLQuPE.js +4 -0
  75. package/dist/assets/app/messages-D1eLQuPE.js.map +1 -0
  76. package/dist/assets/app/messages-D8vHEaYW.js +4 -0
  77. package/dist/assets/app/messages-D8vHEaYW.js.map +1 -0
  78. package/dist/assets/app/messages-DJ1Q4GeC.js +4 -0
  79. package/dist/assets/app/messages-DJ1Q4GeC.js.map +1 -0
  80. package/dist/assets/app/messages-DRL3exqd.js +4 -0
  81. package/dist/assets/app/messages-DRL3exqd.js.map +1 -0
  82. package/dist/assets/app/messages-DWLPQRTp.js +4 -0
  83. package/dist/assets/app/messages-DWLPQRTp.js.map +1 -0
  84. package/dist/assets/app/messages-DjVaE9YE.js +4 -0
  85. package/dist/assets/app/messages-DjVaE9YE.js.map +1 -0
  86. package/dist/assets/app/messages-DqpMfFJR.js +4 -0
  87. package/dist/assets/app/messages-DqpMfFJR.js.map +1 -0
  88. package/dist/assets/app/messages-ETjhJBEN.js +4 -0
  89. package/dist/assets/app/messages-ETjhJBEN.js.map +1 -0
  90. package/dist/assets/app/messages-EUKrgrGn.js +4 -0
  91. package/dist/assets/app/messages-EUKrgrGn.js.map +1 -0
  92. package/dist/assets/app/messages-QQrOUcPW.js +4 -0
  93. package/dist/assets/app/messages-QQrOUcPW.js.map +1 -0
  94. package/dist/assets/app/messages-e2QGqFL6.js +4 -0
  95. package/dist/assets/app/messages-e2QGqFL6.js.map +1 -0
  96. package/dist/assets/app/messages-p61py7gD.js +4 -0
  97. package/dist/assets/app/messages-p61py7gD.js.map +1 -0
  98. package/dist/assets/asset.d.ts +1 -0
  99. package/dist/assets/asset.d.ts.map +1 -1
  100. package/dist/assets/assets-middleware.d.ts.map +1 -1
  101. package/dist/assets/assets-middleware.js +12 -7
  102. package/dist/assets/assets-middleware.js.map +1 -1
  103. package/dist/assets/index.d.ts +3 -2
  104. package/dist/assets/index.d.ts.map +1 -1
  105. package/dist/assets/index.js +13 -1
  106. package/dist/assets/index.js.map +1 -1
  107. package/dist/client/client-store.d.ts +3 -3
  108. package/dist/client/client-store.d.ts.map +1 -1
  109. package/dist/client/client-store.js +6 -5
  110. package/dist/client/client-store.js.map +1 -1
  111. package/dist/device/device-manager.d.ts +12 -13
  112. package/dist/device/device-manager.d.ts.map +1 -1
  113. package/dist/device/device-manager.js +5 -3
  114. package/dist/device/device-manager.js.map +1 -1
  115. package/dist/device/device-store.d.ts +3 -3
  116. package/dist/device/device-store.d.ts.map +1 -1
  117. package/dist/device/device-store.js +10 -9
  118. package/dist/device/device-store.js.map +1 -1
  119. package/dist/dpop/dpop-manager.d.ts +15 -7
  120. package/dist/dpop/dpop-manager.d.ts.map +1 -1
  121. package/dist/dpop/dpop-manager.js +17 -3
  122. package/dist/dpop/dpop-manager.js.map +1 -1
  123. package/dist/dpop/dpop-nonce.d.ts +11 -5
  124. package/dist/dpop/dpop-nonce.d.ts.map +1 -1
  125. package/dist/dpop/dpop-nonce.js +47 -38
  126. package/dist/dpop/dpop-nonce.js.map +1 -1
  127. package/dist/errors/handle-unavailable-error.d.ts +11 -0
  128. package/dist/errors/handle-unavailable-error.d.ts.map +1 -0
  129. package/dist/errors/handle-unavailable-error.js +19 -0
  130. package/dist/errors/handle-unavailable-error.js.map +1 -0
  131. package/dist/errors/invalid-request-error.d.ts +6 -8
  132. package/dist/errors/invalid-request-error.d.ts.map +1 -1
  133. package/dist/errors/invalid-request-error.js +10 -8
  134. package/dist/errors/invalid-request-error.js.map +1 -1
  135. package/dist/lib/csp/index.d.ts +18 -0
  136. package/dist/lib/csp/index.d.ts.map +1 -0
  137. package/dist/lib/csp/index.js +72 -0
  138. package/dist/lib/csp/index.js.map +1 -0
  139. package/dist/lib/hcaptcha.d.ts +177 -0
  140. package/dist/lib/hcaptcha.d.ts.map +1 -0
  141. package/dist/lib/hcaptcha.js +155 -0
  142. package/dist/lib/hcaptcha.js.map +1 -0
  143. package/dist/lib/html/build-document.d.ts +11 -3
  144. package/dist/lib/html/build-document.d.ts.map +1 -1
  145. package/dist/lib/html/build-document.js +51 -15
  146. package/dist/lib/html/build-document.js.map +1 -1
  147. package/dist/lib/http/middleware.d.ts.map +1 -1
  148. package/dist/lib/http/middleware.js +4 -1
  149. package/dist/lib/http/middleware.js.map +1 -1
  150. package/dist/lib/http/request.d.ts +18 -3
  151. package/dist/lib/http/request.d.ts.map +1 -1
  152. package/dist/lib/http/request.js +56 -23
  153. package/dist/lib/http/request.js.map +1 -1
  154. package/dist/lib/http/response.d.ts +4 -2
  155. package/dist/lib/http/response.d.ts.map +1 -1
  156. package/dist/lib/http/response.js +23 -5
  157. package/dist/lib/http/response.js.map +1 -1
  158. package/dist/lib/locale.d.ts +15 -0
  159. package/dist/lib/locale.d.ts.map +1 -0
  160. package/dist/lib/locale.js +17 -0
  161. package/dist/lib/locale.js.map +1 -0
  162. package/dist/lib/util/function.d.ts +2 -2
  163. package/dist/lib/util/function.d.ts.map +1 -1
  164. package/dist/lib/util/function.js.map +1 -1
  165. package/dist/lib/util/type.d.ts +88 -1
  166. package/dist/lib/util/type.d.ts.map +1 -1
  167. package/dist/lib/util/type.js +41 -0
  168. package/dist/lib/util/type.js.map +1 -1
  169. package/dist/metadata/build-metadata.d.ts +2 -2
  170. package/dist/metadata/build-metadata.d.ts.map +1 -1
  171. package/dist/metadata/build-metadata.js.map +1 -1
  172. package/dist/oauth-errors.d.ts +1 -0
  173. package/dist/oauth-errors.d.ts.map +1 -1
  174. package/dist/oauth-errors.js +3 -1
  175. package/dist/oauth-errors.js.map +1 -1
  176. package/dist/oauth-hooks.d.ts +60 -3
  177. package/dist/oauth-hooks.d.ts.map +1 -1
  178. package/dist/oauth-hooks.js +3 -3
  179. package/dist/oauth-hooks.js.map +1 -1
  180. package/dist/oauth-provider.d.ts +28 -22
  181. package/dist/oauth-provider.d.ts.map +1 -1
  182. package/dist/oauth-provider.js +212 -211
  183. package/dist/oauth-provider.js.map +1 -1
  184. package/dist/oauth-verifier.d.ts +1 -1
  185. package/dist/oauth-verifier.d.ts.map +1 -1
  186. package/dist/oauth-verifier.js +2 -1
  187. package/dist/oauth-verifier.js.map +1 -1
  188. package/dist/output/build-authorize-data.d.ts +0 -1
  189. package/dist/output/build-authorize-data.d.ts.map +1 -1
  190. package/dist/output/build-authorize-data.js +0 -1
  191. package/dist/output/build-authorize-data.js.map +1 -1
  192. package/dist/output/build-customization-data.d.ts +232 -0
  193. package/dist/output/build-customization-data.d.ts.map +1 -0
  194. package/dist/output/build-customization-data.js +145 -0
  195. package/dist/output/build-customization-data.js.map +1 -0
  196. package/dist/output/output-manager.d.ts +16 -9
  197. package/dist/output/output-manager.d.ts.map +1 -1
  198. package/dist/output/output-manager.js +78 -42
  199. package/dist/output/output-manager.js.map +1 -1
  200. package/dist/output/send-authorize-redirect.d.ts +9 -6
  201. package/dist/output/send-authorize-redirect.d.ts.map +1 -1
  202. package/dist/output/send-authorize-redirect.js +20 -14
  203. package/dist/output/send-authorize-redirect.js.map +1 -1
  204. package/dist/output/send-web-page.d.ts +7 -2
  205. package/dist/output/send-web-page.d.ts.map +1 -1
  206. package/dist/output/send-web-page.js +37 -21
  207. package/dist/output/send-web-page.js.map +1 -1
  208. package/dist/request/request-manager.d.ts +1 -1
  209. package/dist/request/request-manager.d.ts.map +1 -1
  210. package/dist/request/request-manager.js +4 -4
  211. package/dist/request/request-manager.js.map +1 -1
  212. package/dist/request/request-store.d.ts +3 -3
  213. package/dist/request/request-store.d.ts.map +1 -1
  214. package/dist/request/request-store.js +11 -10
  215. package/dist/request/request-store.js.map +1 -1
  216. package/dist/token/token-store.d.ts +4 -4
  217. package/dist/token/token-store.d.ts.map +1 -1
  218. package/dist/token/token-store.js +13 -12
  219. package/dist/token/token-store.js.map +1 -1
  220. package/package.json +46 -21
  221. package/rollup.config.js +61 -17
  222. package/src/account/account-manager.ts +159 -8
  223. package/src/account/account-store.ts +127 -32
  224. package/src/account/sign-in-data.ts +15 -0
  225. package/src/account/sign-up-data.ts +11 -0
  226. package/src/assets/app/app.tsx +31 -16
  227. package/src/assets/app/backend-data.ts +15 -60
  228. package/src/assets/app/backend-types.ts +66 -0
  229. package/src/assets/app/components/forms/button-toggle-visibility.tsx +43 -0
  230. package/src/assets/app/components/forms/button.tsx +60 -0
  231. package/src/assets/app/components/forms/fieldset.tsx +55 -0
  232. package/src/assets/app/components/forms/form-card-async.tsx +103 -0
  233. package/src/assets/app/components/forms/form-card.tsx +49 -0
  234. package/src/assets/app/components/forms/input-checkbox.tsx +73 -0
  235. package/src/assets/app/components/forms/input-container.tsx +107 -0
  236. package/src/assets/app/components/forms/input-email-address.tsx +66 -0
  237. package/src/assets/app/components/forms/input-new-password.tsx +62 -0
  238. package/src/assets/app/components/forms/input-password.tsx +88 -0
  239. package/src/assets/app/components/forms/input-text.tsx +76 -0
  240. package/src/assets/app/components/forms/input-token.tsx +94 -0
  241. package/src/assets/app/components/forms/wizard-card.tsx +116 -0
  242. package/src/assets/app/components/layouts/layout-title-page.tsx +77 -0
  243. package/src/assets/app/components/layouts/layout-welcome.tsx +73 -0
  244. package/src/assets/app/components/utils/account-identifier.tsx +23 -0
  245. package/src/assets/app/components/utils/account-image.tsx +33 -0
  246. package/src/assets/app/components/utils/admonition.tsx +52 -0
  247. package/src/assets/app/components/utils/client-name.tsx +45 -0
  248. package/src/assets/app/components/utils/error-card.tsx +93 -0
  249. package/src/assets/app/components/utils/error-message.tsx +62 -0
  250. package/src/assets/app/components/utils/help-card.tsx +46 -0
  251. package/src/assets/app/components/utils/icons.tsx +88 -0
  252. package/src/assets/app/components/utils/link-anchor.tsx +28 -0
  253. package/src/assets/app/components/utils/link-title.tsx +26 -0
  254. package/src/assets/app/components/utils/multi-lang-string.tsx +56 -0
  255. package/src/assets/app/components/utils/password-strength-label.tsx +37 -0
  256. package/src/assets/app/components/utils/password-strength-meter.tsx +58 -0
  257. package/src/assets/app/components/{url-viewer.tsx → utils/url-viewer.tsx} +9 -6
  258. package/src/assets/app/hooks/use-api.ts +128 -55
  259. package/src/assets/app/hooks/use-async-action.ts +120 -0
  260. package/src/assets/app/hooks/use-browser-color-scheme.ts +31 -0
  261. package/src/assets/app/hooks/use-csrf-token.ts +1 -1
  262. package/src/assets/app/hooks/use-random-string.ts +37 -0
  263. package/src/assets/app/hooks/use-stepper.ts +87 -0
  264. package/src/assets/app/index.html +182 -0
  265. package/src/assets/app/lib/api.ts +248 -79
  266. package/src/assets/app/lib/clsx.ts +5 -8
  267. package/src/assets/app/lib/json-client.ts +94 -0
  268. package/src/assets/app/lib/password.ts +98 -0
  269. package/src/assets/app/lib/ref.ts +17 -0
  270. package/src/assets/app/locales/an/messages.po +492 -0
  271. package/src/assets/app/locales/ast/messages.po +492 -0
  272. package/src/assets/app/locales/ca/messages.po +492 -0
  273. package/src/assets/app/locales/da/messages.po +492 -0
  274. package/src/assets/app/locales/de/messages.po +492 -0
  275. package/src/assets/app/locales/el/messages.po +492 -0
  276. package/src/assets/app/locales/en/messages.po +492 -0
  277. package/src/assets/app/locales/en-GB/messages.po +492 -0
  278. package/src/assets/app/locales/es/messages.po +492 -0
  279. package/src/assets/app/locales/eu/messages.po +492 -0
  280. package/src/assets/app/locales/fi/messages.po +492 -0
  281. package/src/assets/app/locales/fr/messages.po +492 -0
  282. package/src/assets/app/locales/ga/messages.po +492 -0
  283. package/src/assets/app/locales/gl/messages.po +492 -0
  284. package/src/assets/app/locales/hi/messages.po +492 -0
  285. package/src/assets/app/locales/hu/messages.po +492 -0
  286. package/src/assets/app/locales/ia/messages.po +492 -0
  287. package/src/assets/app/locales/id/messages.po +492 -0
  288. package/src/assets/app/locales/it/messages.po +492 -0
  289. package/src/assets/app/locales/ja/messages.po +492 -0
  290. package/src/assets/app/locales/km/messages.po +492 -0
  291. package/src/assets/app/locales/ko/messages.po +492 -0
  292. package/src/assets/app/locales/load.ts +8 -0
  293. package/src/assets/app/locales/locale-context.ts +19 -0
  294. package/src/assets/app/locales/locale-provider.tsx +112 -0
  295. package/src/assets/app/locales/locale-selector.tsx +58 -0
  296. package/src/assets/app/locales/locales.ts +168 -0
  297. package/src/assets/app/locales/ne/messages.po +492 -0
  298. package/src/assets/app/locales/nl/messages.po +492 -0
  299. package/src/assets/app/locales/pl/messages.po +492 -0
  300. package/src/assets/app/locales/pt-BR/messages.po +492 -0
  301. package/src/assets/app/locales/ro/messages.po +492 -0
  302. package/src/assets/app/locales/ru/messages.po +492 -0
  303. package/src/assets/app/locales/sv/messages.po +492 -0
  304. package/src/assets/app/locales/th/messages.po +492 -0
  305. package/src/assets/app/locales/tr/messages.po +492 -0
  306. package/src/assets/app/locales/uk/messages.po +492 -0
  307. package/src/assets/app/locales/vi/messages.po +492 -0
  308. package/src/assets/app/locales/zh-CN/messages.po +492 -0
  309. package/src/assets/app/locales/zh-HK/messages.po +492 -0
  310. package/src/assets/app/locales/zh-TW/messages.po +492 -0
  311. package/src/assets/app/main.css +23 -2
  312. package/src/assets/app/main.tsx +24 -8
  313. package/src/assets/app/views/authorize/accept/accept-form.tsx +150 -0
  314. package/src/assets/app/views/authorize/accept/accept-view.tsx +70 -0
  315. package/src/assets/app/views/authorize/authorize-view.tsx +180 -0
  316. package/src/assets/app/views/authorize/reset-password/reset-password-confirm-form.tsx +88 -0
  317. package/src/assets/app/views/authorize/reset-password/reset-password-request-form.tsx +80 -0
  318. package/src/assets/app/views/authorize/reset-password/reset-password-view.tsx +127 -0
  319. package/src/assets/app/views/authorize/sign-in/sign-in-form.tsx +244 -0
  320. package/src/assets/app/views/authorize/sign-in/sign-in-picker.tsx +116 -0
  321. package/src/assets/app/views/authorize/sign-in/sign-in-view.tsx +145 -0
  322. package/src/assets/app/views/authorize/sign-up/sign-up-account-form.tsx +140 -0
  323. package/src/assets/app/views/authorize/sign-up/sign-up-disclaimer.tsx +51 -0
  324. package/src/assets/app/views/authorize/sign-up/sign-up-handle-form.tsx +289 -0
  325. package/src/assets/app/views/authorize/sign-up/sign-up-hcaptcha-form.tsx +108 -0
  326. package/src/assets/app/views/authorize/sign-up/sign-up-view.tsx +158 -0
  327. package/src/assets/app/views/authorize/welcome/welcome-view.tsx +56 -0
  328. package/src/assets/app/views/error/error-view.tsx +31 -0
  329. package/src/assets/asset.ts +1 -0
  330. package/src/assets/assets-middleware.ts +13 -8
  331. package/src/assets/index.ts +15 -2
  332. package/src/client/client-store.ts +10 -12
  333. package/src/device/device-manager.ts +14 -15
  334. package/src/device/device-store.ts +9 -15
  335. package/src/dpop/dpop-manager.ts +20 -8
  336. package/src/dpop/dpop-nonce.ts +58 -40
  337. package/src/errors/handle-unavailable-error.ts +18 -0
  338. package/src/errors/invalid-request-error.ts +10 -8
  339. package/src/lib/csp/index.ts +98 -0
  340. package/src/lib/hcaptcha.ts +182 -0
  341. package/src/lib/html/build-document.ts +60 -16
  342. package/src/lib/http/middleware.ts +4 -3
  343. package/src/lib/http/request.ts +81 -28
  344. package/src/lib/http/response.ts +22 -9
  345. package/src/lib/locale.ts +21 -0
  346. package/src/lib/util/function.ts +0 -3
  347. package/src/lib/util/type.ts +130 -1
  348. package/src/metadata/build-metadata.ts +2 -1
  349. package/src/oauth-errors.ts +1 -0
  350. package/src/oauth-hooks.ts +69 -3
  351. package/src/oauth-provider.ts +410 -315
  352. package/src/oauth-verifier.ts +3 -1
  353. package/src/output/build-authorize-data.ts +1 -3
  354. package/src/output/build-customization-data.ts +189 -0
  355. package/src/output/output-manager.ts +111 -48
  356. package/src/output/send-authorize-redirect.ts +43 -36
  357. package/src/output/send-web-page.ts +40 -26
  358. package/src/request/request-manager.ts +4 -4
  359. package/src/request/request-store.ts +12 -16
  360. package/src/token/token-store.ts +14 -18
  361. package/tailwind.config.js +5 -0
  362. package/tsconfig.backend.tsbuildinfo +1 -1
  363. package/tsconfig.frontend.tsbuildinfo +1 -1
  364. package/tsconfig.tools.tsbuildinfo +1 -1
  365. package/vite.config.mjs +16 -0
  366. package/.postcssrc.yml +0 -3
  367. package/dist/assets/app/main.css +0 -3
  368. package/dist/assets/app/main.js +0 -20
  369. package/dist/assets/app/main.js.map +0 -1
  370. package/dist/output/customization.d.ts +0 -27
  371. package/dist/output/customization.d.ts.map +0 -1
  372. package/dist/output/customization.js +0 -88
  373. package/dist/output/customization.js.map +0 -1
  374. package/src/assets/app/components/accept-form.tsx +0 -137
  375. package/src/assets/app/components/account-identifier.tsx +0 -18
  376. package/src/assets/app/components/account-picker.tsx +0 -127
  377. package/src/assets/app/components/button.tsx +0 -34
  378. package/src/assets/app/components/client-name.tsx +0 -37
  379. package/src/assets/app/components/fieldset.tsx +0 -26
  380. package/src/assets/app/components/form-card.tsx +0 -47
  381. package/src/assets/app/components/help-card.tsx +0 -42
  382. package/src/assets/app/components/icons/alert-icon.tsx +0 -5
  383. package/src/assets/app/components/icons/at-symbol-icon.tsx +0 -5
  384. package/src/assets/app/components/icons/caret-right-icon.tsx +0 -5
  385. package/src/assets/app/components/icons/lock-icon.tsx +0 -5
  386. package/src/assets/app/components/icons/token-icon.tsx +0 -5
  387. package/src/assets/app/components/icons/util.tsx +0 -17
  388. package/src/assets/app/components/info-card.tsx +0 -45
  389. package/src/assets/app/components/input-checkbox.tsx +0 -47
  390. package/src/assets/app/components/input-container.tsx +0 -37
  391. package/src/assets/app/components/input-layout.tsx +0 -47
  392. package/src/assets/app/components/input-text.tsx +0 -69
  393. package/src/assets/app/components/layout-title-page.tsx +0 -60
  394. package/src/assets/app/components/layout-welcome.tsx +0 -74
  395. package/src/assets/app/components/sign-in-form.tsx +0 -337
  396. package/src/assets/app/components/sign-up-account-form.tsx +0 -194
  397. package/src/assets/app/components/sign-up-disclaimer.tsx +0 -44
  398. package/src/assets/app/views/accept-view.tsx +0 -55
  399. package/src/assets/app/views/authorize-view.tsx +0 -106
  400. package/src/assets/app/views/error-view.tsx +0 -36
  401. package/src/assets/app/views/sign-in-view.tsx +0 -111
  402. package/src/assets/app/views/sign-up-view.tsx +0 -86
  403. package/src/assets/app/views/welcome-view.tsx +0 -54
  404. package/src/output/customization.ts +0 -118
@@ -4,23 +4,20 @@ exports.InvalidRequestError = void 0;
4
4
  const oauth_error_js_1 = require("./oauth-error.js");
5
5
  /**
6
6
  * @see
7
- * {@link https://datatracker.ietf.org/doc/html/rfc6749#section-5.2 | RFC6749 - Issuing an Access Token }
8
- *
9
- * The request is missing a required parameter, includes an unsupported
7
+ * {@link https://datatracker.ietf.org/doc/html/rfc6749#section-5.2 | RFC6749 - Issuing an Access Token}
8
+ * : The request is missing a required parameter, includes an unsupported
10
9
  * parameter value (other than grant type), repeats a parameter, includes
11
10
  * multiple credentials, utilizes more than one mechanism for authenticating the
12
11
  * client, or is otherwise malformed.
13
12
  *
14
13
  * @see
15
14
  * {@link https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.2.1 | RFC6749 - Authorization Code Grant, Authorization Request}
16
- *
17
- * The request is missing a required parameter, includes an invalid parameter
15
+ * : The request is missing a required parameter, includes an invalid parameter
18
16
  * value, includes a parameter more than once, or is otherwise malformed.
19
17
  *
20
18
  * @see
21
- * {@link https://datatracker.ietf.org/doc/html/rfc6750#section-3.1 | RFC6750 - The WWW-Authenticate Response Header Field }
22
- *
23
- * The request is missing a required parameter, includes an unsupported
19
+ * {@link https://datatracker.ietf.org/doc/html/rfc6750#section-3.1 | RFC6750 - The WWW-Authenticate Response Header Field}
20
+ * : The request is missing a required parameter, includes an unsupported
24
21
  * parameter or parameter value, repeats the same parameter, uses more than one
25
22
  * method for including an access token, or is otherwise malformed. The resource
26
23
  * server SHOULD respond with the HTTP 400 (Bad Request) status code.
@@ -29,6 +26,11 @@ class InvalidRequestError extends oauth_error_js_1.OAuthError {
29
26
  constructor(error_description, cause) {
30
27
  super('invalid_request', error_description, 400, cause);
31
28
  }
29
+ static from(err, message = 'Invalid request data') {
30
+ if (err instanceof oauth_error_js_1.OAuthError)
31
+ return err;
32
+ return new InvalidRequestError(message, err);
33
+ }
32
34
  }
33
35
  exports.InvalidRequestError = InvalidRequestError;
34
36
  //# sourceMappingURL=invalid-request-error.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"invalid-request-error.js","sourceRoot":"","sources":["../../src/errors/invalid-request-error.ts"],"names":[],"mappings":";;;AAAA,qDAA6C;AAE7C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAa,mBAAoB,SAAQ,2BAAU;IACjD,YAAY,iBAAyB,EAAE,KAAe;QACpD,KAAK,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;IACzD,CAAC;CACF;AAJD,kDAIC"}
1
+ {"version":3,"file":"invalid-request-error.js","sourceRoot":"","sources":["../../src/errors/invalid-request-error.ts"],"names":[],"mappings":";;;AAAA,qDAA6C;AAE7C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAa,mBAAoB,SAAQ,2BAAU;IACjD,YAAY,iBAAyB,EAAE,KAAe;QACpD,KAAK,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;IACzD,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,GAAY,EAAE,OAAO,GAAG,sBAAsB;QACxD,IAAI,GAAG,YAAY,2BAAU;YAAE,OAAO,GAAG,CAAA;QACzC,OAAO,IAAI,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAC9C,CAAC;CACF;AATD,kDASC"}
@@ -0,0 +1,18 @@
1
+ import { Simplify } from '../util/type.js';
2
+ export type CspValue = `data:` | `https:${string}` | `'none'` | `'self'` | `'sha256-${string}'` | `'nonce-${string}'` | `'unsafe-inline'` | `'unsafe-eval'` | `'strict-dynamic'` | `'report-sample'` | `'unsafe-hashes'`;
3
+ declare const STRING_DIRECTIVES: readonly ["base-uri"];
4
+ declare const BOOLEAN_DIRECTIVES: readonly ["upgrade-insecure-requests", "block-all-mixed-content"];
5
+ declare const ARRAY_DIRECTIVES: readonly ["connect-src", "default-src", "form-action", "frame-ancestors", "frame-src", "img-src", "script-src", "style-src"];
6
+ export type CspConfig = Simplify<{
7
+ [K in (typeof BOOLEAN_DIRECTIVES)[number]]?: boolean;
8
+ } & {
9
+ [K in (typeof STRING_DIRECTIVES)[number]]?: CspValue;
10
+ } & {
11
+ [K in (typeof ARRAY_DIRECTIVES)[number]]?: readonly CspValue[];
12
+ }>;
13
+ export declare function buildCsp(config: CspConfig): string;
14
+ export declare function mergeCsp(a: CspConfig, b?: CspConfig): CspConfig;
15
+ export declare function mergeCsp(a: CspConfig | undefined, b: CspConfig): CspConfig;
16
+ export declare function mergeCsp(a?: CspConfig, b?: CspConfig): CspConfig | undefined;
17
+ export {};
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/csp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE1C,MAAM,MAAM,QAAQ,GAChB,OAAO,GACP,SAAS,MAAM,EAAE,GACjB,QAAQ,GACR,QAAQ,GACR,WAAW,MAAM,GAAG,GACpB,UAAU,MAAM,GAAG,GACnB,iBAAiB,GACjB,eAAe,GACf,kBAAkB,GAClB,iBAAiB,GACjB,iBAAiB,CAAA;AAErB,QAAA,MAAM,iBAAiB,uBAAwB,CAAA;AAC/C,QAAA,MAAM,kBAAkB,mEAGd,CAAA;AACV,QAAA,MAAM,gBAAgB,8HASZ,CAAA;AAEV,MAAM,MAAM,SAAS,GAAG,QAAQ,CAC9B;KACG,CAAC,IAAI,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO;CACrD,GAAG;KACD,CAAC,IAAI,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ;CACrD,GAAG;KACD,CAAC,IAAI,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,QAAQ,EAAE;CAC/D,CACF,CAAA;AAID,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAgBlD;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;AAChE,wBAAgB,QAAQ,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;AAC3E,wBAAgB,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAA"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildCsp = buildCsp;
4
+ exports.mergeCsp = mergeCsp;
5
+ const STRING_DIRECTIVES = ['base-uri'];
6
+ const BOOLEAN_DIRECTIVES = [
7
+ 'upgrade-insecure-requests',
8
+ 'block-all-mixed-content',
9
+ ];
10
+ const ARRAY_DIRECTIVES = [
11
+ 'connect-src',
12
+ 'default-src',
13
+ 'form-action',
14
+ 'frame-ancestors',
15
+ 'frame-src',
16
+ 'img-src',
17
+ 'script-src',
18
+ 'style-src',
19
+ ];
20
+ const NONE = "'none'";
21
+ function buildCsp(config) {
22
+ const values = [];
23
+ for (const name of BOOLEAN_DIRECTIVES) {
24
+ if (config[name] === true)
25
+ values.push(name);
26
+ }
27
+ for (const name of STRING_DIRECTIVES) {
28
+ if (config[name])
29
+ values.push(`${name} ${config[name]}`);
30
+ }
31
+ for (const name of ARRAY_DIRECTIVES) {
32
+ if (config[name]?.length)
33
+ values.push(`${name} ${config[name].join(' ')}`);
34
+ }
35
+ return values.join('; ');
36
+ }
37
+ function mergeCsp(a, b) {
38
+ if (!a)
39
+ return b;
40
+ if (!b)
41
+ return a;
42
+ const result = {};
43
+ for (const name of BOOLEAN_DIRECTIVES) {
44
+ if (a[name] || b[name]) {
45
+ result[name] = true;
46
+ }
47
+ }
48
+ for (const name of STRING_DIRECTIVES) {
49
+ if (a[name] || b[name]) {
50
+ const aNotNone = a[name] === NONE ? undefined : a[name];
51
+ const bNotNone = b[name] === NONE ? undefined : b[name];
52
+ // @NOTE b takes precedence
53
+ result[name] = bNotNone || aNotNone || NONE;
54
+ }
55
+ }
56
+ for (const name of ARRAY_DIRECTIVES) {
57
+ if (a[name] && b[name]) {
58
+ const set = new Set(a[name]);
59
+ if (b[name])
60
+ for (const value of b[name])
61
+ set.add(value);
62
+ if (set.size > 1 && set.has(NONE))
63
+ set.delete(NONE);
64
+ result[name] = [...set];
65
+ }
66
+ else if (a[name] || b[name]) {
67
+ result[name] = Array.from((a[name] || b[name]));
68
+ }
69
+ }
70
+ return result;
71
+ }
72
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/csp/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,177 @@
1
+ import { z } from 'zod';
2
+ import { Fetch, FetchBound } from '@atproto-labs/fetch';
3
+ export declare const hcaptchaTokenSchema: z.ZodString;
4
+ export type HcaptchaToken = z.infer<typeof hcaptchaTokenSchema>;
5
+ export declare const hcaptchaConfigSchema: z.ZodObject<{
6
+ /**
7
+ * The hCaptcha site key to use for the sign-up form.
8
+ */
9
+ siteKey: z.ZodString;
10
+ /**
11
+ * The hCaptcha secret key to use for the sign-up form.
12
+ */
13
+ secretKey: z.ZodString;
14
+ /**
15
+ * A salt to use when hashing client tokens.
16
+ */
17
+ tokenSalt: z.ZodString;
18
+ /**
19
+ * The risk score over which the user is considered a threat and will be
20
+ * denied access. This will be ignored if the enterprise features are not
21
+ * available.
22
+ */
23
+ scoreThreshold: z.ZodOptional<z.ZodNumber>;
24
+ }, "strip", z.ZodTypeAny, {
25
+ siteKey: string;
26
+ secretKey: string;
27
+ tokenSalt: string;
28
+ scoreThreshold?: number | undefined;
29
+ }, {
30
+ siteKey: string;
31
+ secretKey: string;
32
+ tokenSalt: string;
33
+ scoreThreshold?: number | undefined;
34
+ }>;
35
+ export type HcaptchaConfig = z.infer<typeof hcaptchaConfigSchema>;
36
+ /**
37
+ * @see {@link https://docs.hcaptcha.com/#verify-the-user-response-server-side hCaptcha API}
38
+ */
39
+ export declare const hcaptchaVerifyResultSchema: z.ZodObject<{
40
+ /**
41
+ * is the passcode valid, and does it meet security criteria you specified, e.g. sitekey?
42
+ */
43
+ success: z.ZodBoolean;
44
+ /**
45
+ * timestamp of the challenge (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
46
+ */
47
+ challenge_ts: z.ZodString;
48
+ /**
49
+ * the hostname of the site where the challenge was passed
50
+ */
51
+ hostname: z.ZodString;
52
+ /**
53
+ * optional: any error codes
54
+ */
55
+ 'error-codes': z.ZodArray<z.ZodString, "many">;
56
+ /**
57
+ * ENTERPRISE feature: a score denoting malicious activity. Value ranges from
58
+ * 0.0 (no risk) to 1.0 (confirmed threat).
59
+ */
60
+ score: z.ZodOptional<z.ZodNumber>;
61
+ /**
62
+ * ENTERPRISE feature: reason(s) for score.
63
+ */
64
+ score_reason: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
65
+ /**
66
+ * sitekey of the request
67
+ */
68
+ sitekey: z.ZodOptional<z.ZodString>;
69
+ /**
70
+ * obj of form: {'ip_device': 1, .. etc}
71
+ */
72
+ behavior_counts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
73
+ /**
74
+ * how similar is this? (0.0 - 1.0, -1 on err)
75
+ */
76
+ similarity: z.ZodOptional<z.ZodNumber>;
77
+ /**
78
+ * count of similar_tokens not processed
79
+ */
80
+ similarity_failures: z.ZodOptional<z.ZodNumber>;
81
+ /**
82
+ * array of strings for any similarity errors
83
+ */
84
+ similarity_error_details: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
85
+ /**
86
+ * encoded clientID
87
+ */
88
+ scoped_uid_0: z.ZodOptional<z.ZodString>;
89
+ /**
90
+ * encoded IP
91
+ */
92
+ scoped_uid_1: z.ZodOptional<z.ZodString>;
93
+ /**
94
+ * encoded IP (APT)
95
+ */
96
+ scoped_uid_2: z.ZodOptional<z.ZodString>;
97
+ /**
98
+ * Risk Insights (APT + RI)
99
+ */
100
+ risk_insights: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
101
+ /**
102
+ * Advanced Threat Signatures (APT)
103
+ */
104
+ sigs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
105
+ /**
106
+ * tags added via Rules
107
+ */
108
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
109
+ }, "strip", z.ZodTypeAny, {
110
+ hostname: string;
111
+ success: boolean;
112
+ challenge_ts: string;
113
+ 'error-codes': string[];
114
+ score?: number | undefined;
115
+ score_reason?: string[] | undefined;
116
+ sitekey?: string | undefined;
117
+ behavior_counts?: Record<string, unknown> | undefined;
118
+ similarity?: number | undefined;
119
+ similarity_failures?: number | undefined;
120
+ similarity_error_details?: string[] | undefined;
121
+ scoped_uid_0?: string | undefined;
122
+ scoped_uid_1?: string | undefined;
123
+ scoped_uid_2?: string | undefined;
124
+ risk_insights?: Record<string, unknown> | undefined;
125
+ sigs?: Record<string, unknown> | undefined;
126
+ tags?: string[] | undefined;
127
+ }, {
128
+ hostname: string;
129
+ success: boolean;
130
+ challenge_ts: string;
131
+ 'error-codes': string[];
132
+ score?: number | undefined;
133
+ score_reason?: string[] | undefined;
134
+ sitekey?: string | undefined;
135
+ behavior_counts?: Record<string, unknown> | undefined;
136
+ similarity?: number | undefined;
137
+ similarity_failures?: number | undefined;
138
+ similarity_error_details?: string[] | undefined;
139
+ scoped_uid_0?: string | undefined;
140
+ scoped_uid_1?: string | undefined;
141
+ scoped_uid_2?: string | undefined;
142
+ risk_insights?: Record<string, unknown> | undefined;
143
+ sigs?: Record<string, unknown> | undefined;
144
+ tags?: string[] | undefined;
145
+ }>;
146
+ export type HcaptchaVerifyResult = z.infer<typeof hcaptchaVerifyResultSchema>;
147
+ export declare class HCaptchaClient {
148
+ private readonly hostname;
149
+ private readonly config;
150
+ protected readonly fetch: FetchBound;
151
+ constructor(hostname: string, config: HcaptchaConfig, fetch?: Fetch);
152
+ verify(behaviorType: 'login' | 'signup', response: string, remoteip: string, handle: string, userAgent?: string): Promise<{
153
+ allowed: boolean;
154
+ result: {
155
+ hostname: string;
156
+ success: boolean;
157
+ challenge_ts: string;
158
+ 'error-codes': string[];
159
+ score?: number | undefined;
160
+ score_reason?: string[] | undefined;
161
+ sitekey?: string | undefined;
162
+ behavior_counts?: Record<string, unknown> | undefined;
163
+ similarity?: number | undefined;
164
+ similarity_failures?: number | undefined;
165
+ similarity_error_details?: string[] | undefined;
166
+ scoped_uid_0?: string | undefined;
167
+ scoped_uid_1?: string | undefined;
168
+ scoped_uid_2?: string | undefined;
169
+ risk_insights?: Record<string, unknown> | undefined;
170
+ sigs?: Record<string, unknown> | undefined;
171
+ tags?: string[] | undefined;
172
+ };
173
+ }>;
174
+ isAllowed({ success, hostname, score }: HcaptchaVerifyResult): boolean;
175
+ hashToken(value: string): string;
176
+ }
177
+ //# sourceMappingURL=hcaptcha.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hcaptcha.d.ts","sourceRoot":"","sources":["../../src/lib/hcaptcha.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EACL,KAAK,EACL,UAAU,EAKX,MAAM,qBAAqB,CAAA;AAG5B,eAAO,MAAM,mBAAmB,aAAoB,CAAA;AACpD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D,eAAO,MAAM,oBAAoB;IAC/B;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;;;OAIG;;;;;;;;;;;;EAEH,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEjE;;GAEG;AACH,eAAO,MAAM,0BAA0B;IACrC;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;;OAGG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEH,CAAA;AAEF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAQ7E,qBAAa,cAAc;IAGvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHzB,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;gBAEjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,EACvC,KAAK,GAAE,KAAwB;IAK3B,MAAM,CACV,YAAY,EAAE,OAAO,GAAG,QAAQ,EAChC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;IA2BpB,SAAS,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,oBAAoB;IAa5D,SAAS,CAAC,KAAK,EAAE,MAAM;CAMxB"}
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HCaptchaClient = exports.hcaptchaVerifyResultSchema = exports.hcaptchaConfigSchema = exports.hcaptchaTokenSchema = void 0;
4
+ const node_crypto_1 = require("node:crypto");
5
+ const zod_1 = require("zod");
6
+ const fetch_1 = require("@atproto-labs/fetch");
7
+ const pipe_1 = require("@atproto-labs/pipe");
8
+ exports.hcaptchaTokenSchema = zod_1.z.string().min(1);
9
+ exports.hcaptchaConfigSchema = zod_1.z.object({
10
+ /**
11
+ * The hCaptcha site key to use for the sign-up form.
12
+ */
13
+ siteKey: zod_1.z.string().min(1),
14
+ /**
15
+ * The hCaptcha secret key to use for the sign-up form.
16
+ */
17
+ secretKey: zod_1.z.string().min(1),
18
+ /**
19
+ * A salt to use when hashing client tokens.
20
+ */
21
+ tokenSalt: zod_1.z.string().min(1),
22
+ /**
23
+ * The risk score over which the user is considered a threat and will be
24
+ * denied access. This will be ignored if the enterprise features are not
25
+ * available.
26
+ */
27
+ scoreThreshold: zod_1.z.number().optional(),
28
+ });
29
+ /**
30
+ * @see {@link https://docs.hcaptcha.com/#verify-the-user-response-server-side hCaptcha API}
31
+ */
32
+ exports.hcaptchaVerifyResultSchema = zod_1.z.object({
33
+ /**
34
+ * is the passcode valid, and does it meet security criteria you specified, e.g. sitekey?
35
+ */
36
+ success: zod_1.z.boolean(),
37
+ /**
38
+ * timestamp of the challenge (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
39
+ */
40
+ challenge_ts: zod_1.z.string(),
41
+ /**
42
+ * the hostname of the site where the challenge was passed
43
+ */
44
+ hostname: zod_1.z.string(),
45
+ /**
46
+ * optional: any error codes
47
+ */
48
+ 'error-codes': zod_1.z.array(zod_1.z.string()),
49
+ /**
50
+ * ENTERPRISE feature: a score denoting malicious activity. Value ranges from
51
+ * 0.0 (no risk) to 1.0 (confirmed threat).
52
+ */
53
+ score: zod_1.z.number().optional(),
54
+ /**
55
+ * ENTERPRISE feature: reason(s) for score.
56
+ */
57
+ score_reason: zod_1.z.array(zod_1.z.string()).optional(),
58
+ /**
59
+ * sitekey of the request
60
+ */
61
+ sitekey: zod_1.z.string().optional(),
62
+ /**
63
+ * obj of form: {'ip_device': 1, .. etc}
64
+ */
65
+ behavior_counts: zod_1.z.record(zod_1.z.unknown()).optional(),
66
+ /**
67
+ * how similar is this? (0.0 - 1.0, -1 on err)
68
+ */
69
+ similarity: zod_1.z.number().optional(),
70
+ /**
71
+ * count of similar_tokens not processed
72
+ */
73
+ similarity_failures: zod_1.z.number().optional(),
74
+ /**
75
+ * array of strings for any similarity errors
76
+ */
77
+ similarity_error_details: zod_1.z.array(zod_1.z.string()).optional(),
78
+ /**
79
+ * encoded clientID
80
+ */
81
+ scoped_uid_0: zod_1.z.string().optional(),
82
+ /**
83
+ * encoded IP
84
+ */
85
+ scoped_uid_1: zod_1.z.string().optional(),
86
+ /**
87
+ * encoded IP (APT)
88
+ */
89
+ scoped_uid_2: zod_1.z.string().optional(),
90
+ /**
91
+ * Risk Insights (APT + RI)
92
+ */
93
+ risk_insights: zod_1.z.record(zod_1.z.unknown()).optional(),
94
+ /**
95
+ * Advanced Threat Signatures (APT)
96
+ */
97
+ sigs: zod_1.z.record(zod_1.z.unknown()).optional(),
98
+ /**
99
+ * tags added via Rules
100
+ */
101
+ tags: zod_1.z.array(zod_1.z.string()).optional(),
102
+ });
103
+ const fetchSuccessHandler = (0, pipe_1.pipe)((0, fetch_1.fetchOkProcessor)(), (0, fetch_1.fetchJsonProcessor)(), (0, fetch_1.fetchJsonZodProcessor)(exports.hcaptchaVerifyResultSchema));
104
+ class HCaptchaClient {
105
+ hostname;
106
+ config;
107
+ fetch;
108
+ constructor(hostname, config, fetch = globalThis.fetch) {
109
+ this.hostname = hostname;
110
+ this.config = config;
111
+ this.fetch = (0, fetch_1.bindFetch)(fetch);
112
+ }
113
+ async verify(behaviorType, response, remoteip, handle, userAgent) {
114
+ const result = await this.fetch('https://api.hcaptcha.com/siteverify', {
115
+ method: 'POST',
116
+ headers: {
117
+ 'Content-Type': 'application/x-www-form-urlencoded',
118
+ },
119
+ body: new URLSearchParams({
120
+ secret: this.config.secretKey,
121
+ sitekey: this.config.siteKey,
122
+ behavior_type: behaviorType,
123
+ response,
124
+ remoteip,
125
+ client_tokens: JSON.stringify({
126
+ hashedIp: this.hashToken(remoteip),
127
+ hashedHandle: this.hashToken(handle),
128
+ hashedUserAgent: userAgent ? this.hashToken(userAgent) : undefined,
129
+ }),
130
+ }).toString(),
131
+ }).then(fetchSuccessHandler);
132
+ return {
133
+ allowed: this.isAllowed(result),
134
+ result,
135
+ };
136
+ }
137
+ isAllowed({ success, hostname, score }) {
138
+ return (success &&
139
+ // Fool-proofing: If this is false, the user is trying to use a token
140
+ // generated for the same siteKey, but on another domain.
141
+ hostname === this.hostname &&
142
+ // Ignore if enterprise feature is not enabled
143
+ score != null &&
144
+ this.config.scoreThreshold != null &&
145
+ score < this.config.scoreThreshold);
146
+ }
147
+ hashToken(value) {
148
+ const hash = (0, node_crypto_1.createHash)('sha256');
149
+ hash.update(this.config.tokenSalt);
150
+ hash.update(value);
151
+ return hash.digest().toString('base64');
152
+ }
153
+ }
154
+ exports.HCaptchaClient = HCaptchaClient;
155
+ //# sourceMappingURL=hcaptcha.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hcaptcha.js","sourceRoot":"","sources":["../../src/lib/hcaptcha.ts"],"names":[],"mappings":"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"}
@@ -5,9 +5,16 @@ export type AssetRef = {
5
5
  sha256: string;
6
6
  };
7
7
  export type Attrs = Record<string, boolean | string | undefined>;
8
- export type LinkAttrs = {
8
+ /**
9
+ * @see {@link https://developer.mozilla.org/fr/docs/Web/HTML/Attributes/rel}
10
+ */
11
+ declare const ALLOWED_LINK_REL_VALUES: readonly ["alternate", "author", "canonical", "dns-prefetch", "external", "expect", "help", "icon", "license", "manifest", "me", "modulepreload", "next", "pingback", "preconnect", "prefetch", "preload", "prerender", "prev", "privacy-policy", "search", "stylesheet", "terms-of-service"];
12
+ export type LinkRel = (typeof ALLOWED_LINK_REL_VALUES)[number];
13
+ export declare const isLinkRel: (rel: unknown) => rel is LinkRel;
14
+ export type LinkAttrs = Attrs & {
9
15
  href: string;
10
- } & Attrs;
16
+ rel: LinkRel;
17
+ };
11
18
  export type MetaAttrs = {
12
19
  name: string;
13
20
  content: string;
@@ -24,8 +31,9 @@ export type BuildDocumentOptions = {
24
31
  title?: HtmlValue;
25
32
  scripts?: readonly (Html | AssetRef)[];
26
33
  styles?: readonly (Html | AssetRef)[];
27
- body: HtmlValue;
34
+ body?: HtmlValue;
28
35
  bodyAttrs?: Attrs;
29
36
  };
30
37
  export declare const buildDocument: ({ htmlAttrs, head, title, body, bodyAttrs, base, meta, links, scripts, styles, }: BuildDocumentOptions) => Html;
38
+ export {};
31
39
  //# sourceMappingURL=build-document.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-document.d.ts","sourceRoot":"","sources":["../../../src/lib/html/build-document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGhC,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC,CAAA;AAChE,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAA;AAChD,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAO7C,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,CAAC,EAAE,KAAK,CAAA;IACjB,IAAI,CAAC,EAAE,GAAG,CAAA;IACV,IAAI,CAAC,EAAE,SAAS,SAAS,EAAE,CAAA;IAC3B,KAAK,CAAC,EAAE,SAAS,SAAS,EAAE,CAAA;IAC5B,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,OAAO,CAAC,EAAE,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAA;IACtC,MAAM,CAAC,EAAE,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAA;IACrC,IAAI,EAAE,SAAS,CAAA;IACf,SAAS,CAAC,EAAE,KAAK,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,aAAa,qFAWvB,oBAAoB,SAcf,CAAA"}
1
+ {"version":3,"file":"build-document.d.ts","sourceRoot":"","sources":["../../../src/lib/html/build-document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGhC,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC,CAAA;AAEhE;;GAEG;AACH,QAAA,MAAM,uBAAuB,+RAwBlB,CAAA;AACX,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAA;AAC9D,eAAO,MAAM,SAAS,QAAS,OAAO,KAAG,GAAG,IAAI,OACe,CAAA;AAE/D,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,OAAO,CAAA;CACb,CAAA;AACD,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAO7C,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,CAAC,EAAE,KAAK,CAAA;IACjB,IAAI,CAAC,EAAE,GAAG,CAAA;IACV,IAAI,CAAC,EAAE,SAAS,SAAS,EAAE,CAAA;IAC3B,KAAK,CAAC,EAAE,SAAS,SAAS,EAAE,CAAA;IAC5B,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,OAAO,CAAC,EAAE,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAA;IACtC,MAAM,CAAC,EAAE,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAA;IACrC,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,SAAS,CAAC,EAAE,KAAK,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,aAAa,qFAWvB,oBAAoB,SAef,CAAA"}
@@ -1,8 +1,38 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildDocument = void 0;
3
+ exports.buildDocument = exports.isLinkRel = void 0;
4
4
  const html_js_1 = require("./html.js");
5
5
  const tags_js_1 = require("./tags.js");
6
+ /**
7
+ * @see {@link https://developer.mozilla.org/fr/docs/Web/HTML/Attributes/rel}
8
+ */
9
+ const ALLOWED_LINK_REL_VALUES = Object.freeze([
10
+ 'alternate',
11
+ 'author',
12
+ 'canonical',
13
+ 'dns-prefetch',
14
+ 'external',
15
+ 'expect',
16
+ 'help',
17
+ 'icon',
18
+ 'license',
19
+ 'manifest',
20
+ 'me',
21
+ 'modulepreload',
22
+ 'next',
23
+ 'pingback',
24
+ 'preconnect',
25
+ 'prefetch',
26
+ 'preload',
27
+ 'prerender',
28
+ 'prev',
29
+ 'privacy-policy',
30
+ 'search',
31
+ 'stylesheet',
32
+ 'terms-of-service',
33
+ ]);
34
+ const isLinkRel = (rel) => ALLOWED_LINK_REL_VALUES.includes(rel);
35
+ exports.isLinkRel = isLinkRel;
6
36
  const defaultViewport = (0, tags_js_1.html) `<meta
7
37
  name="viewport"
8
38
  content="width=device-width, initial-scale=1.0"
@@ -15,22 +45,23 @@ const buildDocument = ({ htmlAttrs, head, title, body, bodyAttrs, base, meta, li
15
45
  ${base && (0, tags_js_1.html) `<base href="${base.href}" />`}
16
46
  ${meta?.some(isViewportMeta) ? null : defaultViewport}
17
47
  ${meta?.map(metaToHtml)}
48
+ ${styles?.map(linkPreload('style'))}
49
+ ${scripts?.map(linkPreload('script'))}
18
50
  ${links?.map(linkToHtml)}
19
- ${head} ${styles?.map(styleToHtml)}
51
+ ${head}
52
+ ${styles?.map(styleToHtml)}
20
53
  </head>
21
- <body${attrsToHtml(bodyAttrs)}>
22
- ${body} ${scripts?.map(scriptToHtml)}
23
- </body>
54
+ <body${attrsToHtml(bodyAttrs)}>${body}${scripts?.map(scriptToHtml)}</body>
24
55
  </html>`;
25
56
  exports.buildDocument = buildDocument;
26
57
  function isViewportMeta(attrs) {
27
58
  return 'name' in attrs && attrs.name === 'viewport';
28
59
  }
29
- function* linkToHtml(attrs) {
30
- yield (0, tags_js_1.html) `<link${attrsToHtml(attrs)} />`;
60
+ function linkToHtml(attrs) {
61
+ return (0, tags_js_1.html) `<link${attrsToHtml(attrs)} />`;
31
62
  }
32
- function* metaToHtml(attrs) {
33
- yield (0, tags_js_1.html) `<meta${attrsToHtml(attrs)} />`;
63
+ function metaToHtml(attrs) {
64
+ return (0, tags_js_1.html) `<meta${attrsToHtml(attrs)} />`;
34
65
  }
35
66
  function* attrsToHtml(attrs) {
36
67
  if (attrs) {
@@ -46,16 +77,21 @@ function* attrsToHtml(attrs) {
46
77
  }
47
78
  }
48
79
  }
49
- function* scriptToHtml(script) {
50
- yield script instanceof html_js_1.Html
80
+ function linkPreload(as) {
81
+ return (style) => style instanceof html_js_1.Html
82
+ ? undefined
83
+ : (0, tags_js_1.html) `<link rel="preload" href="${style.url}" as="${as}" />`;
84
+ }
85
+ function scriptToHtml(script) {
86
+ return script instanceof html_js_1.Html
51
87
  ? // prettier-ignore
52
88
  (0, tags_js_1.html) `<script>${script}</script>` // hash validity requires no space around the content
53
- : (0, tags_js_1.html) `<script type="module" src="${script.url}?${script.sha256}"></script>`;
89
+ : (0, tags_js_1.html) `<script type="module" src="${script.url}"></script>`;
54
90
  }
55
- function* styleToHtml(style) {
56
- yield style instanceof html_js_1.Html
91
+ function styleToHtml(style) {
92
+ return style instanceof html_js_1.Html
57
93
  ? // prettier-ignore
58
94
  (0, tags_js_1.html) `<style>${style}</style>` // hash validity requires no space around the content
59
- : (0, tags_js_1.html) `<link rel="stylesheet" href="${style.url}?${style.sha256}" />`;
95
+ : (0, tags_js_1.html) `<link rel="stylesheet" href="${style.url}" />`;
60
96
  }
61
97
  //# sourceMappingURL=build-document.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-document.js","sourceRoot":"","sources":["../../../src/lib/html/build-document.ts"],"names":[],"mappings":";;;AACA,uCAAgC;AAChC,uCAAgC;AAahC,MAAM,eAAe,GAAG,IAAA,cAAI,EAAA;;;GAGzB,CAAA;AAeI,MAAM,aAAa,GAAG,CAAC,EAC5B,SAAS,EACT,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,OAAO,EACP,MAAM,GACe,EAAE,EAAE,CAAC,IAAA,cAAI,EAAA;OACzB,WAAW,CAAC,SAAS,CAAC;;;MAGvB,KAAK,IAAI,IAAA,cAAI,EAAA,UAAU,KAAK,UAAU;MACtC,IAAI,IAAI,IAAA,cAAI,EAAA,eAAe,IAAI,CAAC,IAAI,MAAM;MAC1C,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe;MACnD,IAAI,EAAE,GAAG,CAAC,UAAU,CAAC;MACrB,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC;MACtB,IAAI,IAAI,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC;;SAE7B,WAAW,CAAC,SAAS,CAAC;MACzB,IAAI,IAAI,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC;;QAEhC,CAAA;AAzBK,QAAA,aAAa,iBAyBlB;AAER,SAAS,cAAc,CACrB,KAAQ;IAER,OAAO,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAA;AACrD,CAAC;AAED,QAAQ,CAAC,CAAC,UAAU,CAAC,KAAgB;IACnC,MAAM,IAAA,cAAI,EAAA,QAAQ,WAAW,CAAC,KAAK,CAAC,KAAK,CAAA;AAC3C,CAAC;AAED,QAAQ,CAAC,CAAC,UAAU,CAAC,KAAgB;IACnC,MAAM,IAAA,cAAI,EAAA,QAAQ,WAAW,CAAC,KAAK,CAAC,KAAK,CAAA;AAC3C,CAAC;AAED,QAAQ,CAAC,CAAC,WAAW,CAAC,KAAa;IACjC,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAClD,IAAI,KAAK,IAAI,IAAI;gBAAE,SAAQ;iBACtB,IAAI,KAAK,KAAK,KAAK;gBAAE,SAAQ;iBAC7B,IAAI,KAAK,KAAK,IAAI;gBAAE,MAAM,IAAA,cAAI,EAAA,IAAI,IAAI,EAAE,CAAA;;gBACxC,MAAM,IAAA,cAAI,EAAA,IAAI,IAAI,KAAK,KAAK,GAAG,CAAA;QACtC,CAAC;IACH,CAAC;AACH,CAAC;AAED,QAAQ,CAAC,CAAC,YAAY,CAAC,MAAuB;IAC5C,MAAM,MAAM,YAAY,cAAI;QAC1B,CAAC,CAAC,kBAAkB;YAClB,IAAA,cAAI,EAAA,WAAW,MAAM,WAAW,CAAC,qDAAqD;QACxF,CAAC,CAAC,IAAA,cAAI,EAAA,8BAA8B,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,aAAa,CAAA;AAChF,CAAC;AAED,QAAQ,CAAC,CAAC,WAAW,CAAC,KAAsB;IAC1C,MAAM,KAAK,YAAY,cAAI;QACzB,CAAC,CAAC,kBAAkB;YAClB,IAAA,cAAI,EAAA,UAAU,KAAK,UAAU,CAAC,qDAAqD;QACrF,CAAC,CAAC,IAAA,cAAI,EAAA,gCAAgC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,MAAM,CAAA;AACzE,CAAC"}
1
+ {"version":3,"file":"build-document.js","sourceRoot":"","sources":["../../../src/lib/html/build-document.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/lib/http/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAEhE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9D,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACpE,WAAW,EAAE,QAAQ,CAAC,IAAI,GAAG,SAAS,GAAG,CAAC,CAAC,EAC3C,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACjC,CAAC,CAAA;AAwCJ,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IACvD,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC,GAC/C,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GACpB,KAAK,CAAA;AAEX;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC3D,UAAU,EAAE,CAAC,EACb,OAAO,CAAC,EAAE,mBAAmB,GASxB,SAAS,CAAC,CAAC,CAAC,CAClB;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,YAAY,CAqBd;AA4CD,wBAAgB,IAAI,CAAC,CAAC,SAAS,YAAY,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAQvD"}
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/lib/http/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAEhE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAI9D,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACpE,WAAW,EAAE,QAAQ,CAAC,IAAI,GAAG,SAAS,GAAG,CAAC,CAAC,EAC3C,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACjC,CAAC,CAAA;AAuCJ,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IACvD,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC,GAC/C,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GACpB,KAAK,CAAA;AAEX;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC3D,UAAU,EAAE,CAAC,EACb,OAAO,CAAC,EAAE,mBAAmB,GASxB,SAAS,CAAC,CAAC,CAAC,CAClB;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,YAAY,CAqBd;AA4CD,wBAAgB,IAAI,CAAC,CAAC,SAAS,YAAY,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAQvD"}