@trokky/trokky 2.0.3

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 (639) hide show
  1. package/dist/adapters/filesystem/filesystem-adapter.d.ts +80 -0
  2. package/dist/adapters/filesystem/filesystem-adapter.d.ts.map +1 -0
  3. package/dist/adapters/filesystem/filesystem-adapter.js +1370 -0
  4. package/dist/adapters/filesystem/filesystem-adapter.js.map +1 -0
  5. package/dist/adapters/filesystem/index.d.ts +29 -0
  6. package/dist/adapters/filesystem/index.d.ts.map +1 -0
  7. package/dist/adapters/filesystem/index.js +31 -0
  8. package/dist/adapters/filesystem/index.js.map +1 -0
  9. package/dist/adapters/filesystem/types.d.ts +111 -0
  10. package/dist/adapters/filesystem/types.d.ts.map +1 -0
  11. package/dist/adapters/filesystem/types.js +2 -0
  12. package/dist/adapters/filesystem/types.js.map +1 -0
  13. package/dist/adapters/filesystem-data/filesystem-data-adapter.d.ts +111 -0
  14. package/dist/adapters/filesystem-data/filesystem-data-adapter.d.ts.map +1 -0
  15. package/dist/adapters/filesystem-data/filesystem-data-adapter.js +1363 -0
  16. package/dist/adapters/filesystem-data/filesystem-data-adapter.js.map +1 -0
  17. package/dist/adapters/filesystem-data/index.d.ts +3 -0
  18. package/dist/adapters/filesystem-data/index.d.ts.map +1 -0
  19. package/dist/adapters/filesystem-data/index.js +13 -0
  20. package/dist/adapters/filesystem-data/index.js.map +1 -0
  21. package/dist/adapters/filesystem-data/types.d.ts +147 -0
  22. package/dist/adapters/filesystem-data/types.d.ts.map +1 -0
  23. package/dist/adapters/filesystem-data/types.js +2 -0
  24. package/dist/adapters/filesystem-data/types.js.map +1 -0
  25. package/dist/adapters/filesystem-media/filesystem-media-adapter.d.ts +32 -0
  26. package/dist/adapters/filesystem-media/filesystem-media-adapter.d.ts.map +1 -0
  27. package/dist/adapters/filesystem-media/filesystem-media-adapter.js +639 -0
  28. package/dist/adapters/filesystem-media/filesystem-media-adapter.js.map +1 -0
  29. package/dist/adapters/filesystem-media/index.d.ts +3 -0
  30. package/dist/adapters/filesystem-media/index.d.ts.map +1 -0
  31. package/dist/adapters/filesystem-media/index.js +13 -0
  32. package/dist/adapters/filesystem-media/index.js.map +1 -0
  33. package/dist/adapters/filesystem-media/types.d.ts +76 -0
  34. package/dist/adapters/filesystem-media/types.d.ts.map +1 -0
  35. package/dist/adapters/filesystem-media/types.js +2 -0
  36. package/dist/adapters/filesystem-media/types.js.map +1 -0
  37. package/dist/adapters/postgres-data/index.d.ts +3 -0
  38. package/dist/adapters/postgres-data/index.d.ts.map +1 -0
  39. package/dist/adapters/postgres-data/index.js +13 -0
  40. package/dist/adapters/postgres-data/index.js.map +1 -0
  41. package/dist/adapters/postgres-data/postgres-data-adapter.d.ts +154 -0
  42. package/dist/adapters/postgres-data/postgres-data-adapter.d.ts.map +1 -0
  43. package/dist/adapters/postgres-data/postgres-data-adapter.js +1432 -0
  44. package/dist/adapters/postgres-data/postgres-data-adapter.js.map +1 -0
  45. package/dist/adapters/postgres-data/types.d.ts +139 -0
  46. package/dist/adapters/postgres-data/types.d.ts.map +1 -0
  47. package/dist/adapters/postgres-data/types.js +2 -0
  48. package/dist/adapters/postgres-data/types.js.map +1 -0
  49. package/dist/core/adapters/registry.d.ts +79 -0
  50. package/dist/core/adapters/registry.d.ts.map +1 -0
  51. package/dist/core/adapters/registry.js +149 -0
  52. package/dist/core/adapters/registry.js.map +1 -0
  53. package/dist/core/core/engine.d.ts +551 -0
  54. package/dist/core/core/engine.d.ts.map +1 -0
  55. package/dist/core/core/engine.js +1074 -0
  56. package/dist/core/core/engine.js.map +1 -0
  57. package/dist/core/crypto/adapter.d.ts +63 -0
  58. package/dist/core/crypto/adapter.d.ts.map +1 -0
  59. package/dist/core/crypto/adapter.js +63 -0
  60. package/dist/core/crypto/adapter.js.map +1 -0
  61. package/dist/core/crypto/fallback-adapter.d.ts +23 -0
  62. package/dist/core/crypto/fallback-adapter.d.ts.map +1 -0
  63. package/dist/core/crypto/fallback-adapter.js +195 -0
  64. package/dist/core/crypto/fallback-adapter.js.map +1 -0
  65. package/dist/core/crypto/node-adapter.d.ts +20 -0
  66. package/dist/core/crypto/node-adapter.d.ts.map +1 -0
  67. package/dist/core/crypto/node-adapter.js +85 -0
  68. package/dist/core/crypto/node-adapter.js.map +1 -0
  69. package/dist/core/crypto/password-hash.d.ts +73 -0
  70. package/dist/core/crypto/password-hash.d.ts.map +1 -0
  71. package/dist/core/crypto/password-hash.js +244 -0
  72. package/dist/core/crypto/password-hash.js.map +1 -0
  73. package/dist/core/crypto/webcrypto-adapter.d.ts +24 -0
  74. package/dist/core/crypto/webcrypto-adapter.d.ts.map +1 -0
  75. package/dist/core/crypto/webcrypto-adapter.js +158 -0
  76. package/dist/core/crypto/webcrypto-adapter.js.map +1 -0
  77. package/dist/core/errors/index.d.ts +30 -0
  78. package/dist/core/errors/index.d.ts.map +1 -0
  79. package/dist/core/errors/index.js +61 -0
  80. package/dist/core/errors/index.js.map +1 -0
  81. package/dist/core/events/event-bus.d.ts +121 -0
  82. package/dist/core/events/event-bus.d.ts.map +1 -0
  83. package/dist/core/events/event-bus.js +631 -0
  84. package/dist/core/events/event-bus.js.map +1 -0
  85. package/dist/core/events/index.d.ts +17 -0
  86. package/dist/core/events/index.d.ts.map +1 -0
  87. package/dist/core/events/index.js +22 -0
  88. package/dist/core/events/index.js.map +1 -0
  89. package/dist/core/events/memory-storage.d.ts +57 -0
  90. package/dist/core/events/memory-storage.d.ts.map +1 -0
  91. package/dist/core/events/memory-storage.js +175 -0
  92. package/dist/core/events/memory-storage.js.map +1 -0
  93. package/dist/core/events/types.d.ts +434 -0
  94. package/dist/core/events/types.d.ts.map +1 -0
  95. package/dist/core/events/types.js +9 -0
  96. package/dist/core/events/types.js.map +1 -0
  97. package/dist/core/events/utils.d.ts +134 -0
  98. package/dist/core/events/utils.d.ts.map +1 -0
  99. package/dist/core/events/utils.js +333 -0
  100. package/dist/core/events/utils.js.map +1 -0
  101. package/dist/core/fields/conditional.d.ts +115 -0
  102. package/dist/core/fields/conditional.d.ts.map +1 -0
  103. package/dist/core/fields/conditional.js +296 -0
  104. package/dist/core/fields/conditional.js.map +1 -0
  105. package/dist/core/fields/field-type.d.ts +218 -0
  106. package/dist/core/fields/field-type.d.ts.map +1 -0
  107. package/dist/core/fields/field-type.js +17 -0
  108. package/dist/core/fields/field-type.js.map +1 -0
  109. package/dist/core/fields/helpers.d.ts +86 -0
  110. package/dist/core/fields/helpers.d.ts.map +1 -0
  111. package/dist/core/fields/helpers.js +260 -0
  112. package/dist/core/fields/helpers.js.map +1 -0
  113. package/dist/core/fields/index.d.ts +5 -0
  114. package/dist/core/fields/index.d.ts.map +1 -0
  115. package/dist/core/fields/index.js +6 -0
  116. package/dist/core/fields/index.js.map +1 -0
  117. package/dist/core/fields/registry.d.ts +78 -0
  118. package/dist/core/fields/registry.d.ts.map +1 -0
  119. package/dist/core/fields/registry.js +185 -0
  120. package/dist/core/fields/registry.js.map +1 -0
  121. package/dist/core/index.d.ts +39 -0
  122. package/dist/core/index.d.ts.map +1 -0
  123. package/dist/core/index.js +57 -0
  124. package/dist/core/index.js.map +1 -0
  125. package/dist/core/media/image-processor.d.ts +24 -0
  126. package/dist/core/media/image-processor.d.ts.map +1 -0
  127. package/dist/core/media/image-processor.js +69 -0
  128. package/dist/core/media/image-processor.js.map +1 -0
  129. package/dist/core/media/processors/cloudflare-images.d.ts +83 -0
  130. package/dist/core/media/processors/cloudflare-images.d.ts.map +1 -0
  131. package/dist/core/media/processors/cloudflare-images.js +241 -0
  132. package/dist/core/media/processors/cloudflare-images.js.map +1 -0
  133. package/dist/core/media/processors/cloudflare-transform-store.d.ts +127 -0
  134. package/dist/core/media/processors/cloudflare-transform-store.d.ts.map +1 -0
  135. package/dist/core/media/processors/cloudflare-transform-store.js +237 -0
  136. package/dist/core/media/processors/cloudflare-transform-store.js.map +1 -0
  137. package/dist/core/media/processors/cloudflare-transformations.d.ts +81 -0
  138. package/dist/core/media/processors/cloudflare-transformations.d.ts.map +1 -0
  139. package/dist/core/media/processors/cloudflare-transformations.js +144 -0
  140. package/dist/core/media/processors/cloudflare-transformations.js.map +1 -0
  141. package/dist/core/media/processors/index.d.ts +9 -0
  142. package/dist/core/media/processors/index.d.ts.map +1 -0
  143. package/dist/core/media/processors/index.js +13 -0
  144. package/dist/core/media/processors/index.js.map +1 -0
  145. package/dist/core/media/processors/noop.d.ts +22 -0
  146. package/dist/core/media/processors/noop.d.ts.map +1 -0
  147. package/dist/core/media/processors/noop.js +38 -0
  148. package/dist/core/media/processors/noop.js.map +1 -0
  149. package/dist/core/media/processors/sharp.d.ts +30 -0
  150. package/dist/core/media/processors/sharp.d.ts.map +1 -0
  151. package/dist/core/media/processors/sharp.js +126 -0
  152. package/dist/core/media/processors/sharp.js.map +1 -0
  153. package/dist/core/media/processors/types.d.ts +67 -0
  154. package/dist/core/media/processors/types.d.ts.map +1 -0
  155. package/dist/core/media/processors/types.js +42 -0
  156. package/dist/core/media/processors/types.js.map +1 -0
  157. package/dist/core/media/processors/workers-images.d.ts +112 -0
  158. package/dist/core/media/processors/workers-images.d.ts.map +1 -0
  159. package/dist/core/media/processors/workers-images.js +257 -0
  160. package/dist/core/media/processors/workers-images.js.map +1 -0
  161. package/dist/core/schema/registry.d.ts +41 -0
  162. package/dist/core/schema/registry.d.ts.map +1 -0
  163. package/dist/core/schema/registry.js +248 -0
  164. package/dist/core/schema/registry.js.map +1 -0
  165. package/dist/core/schema/singleton.d.ts +107 -0
  166. package/dist/core/schema/singleton.d.ts.map +1 -0
  167. package/dist/core/schema/singleton.js +180 -0
  168. package/dist/core/schema/singleton.js.map +1 -0
  169. package/dist/core/security/auth.d.ts +120 -0
  170. package/dist/core/security/auth.d.ts.map +1 -0
  171. package/dist/core/security/auth.js +274 -0
  172. package/dist/core/security/auth.js.map +1 -0
  173. package/dist/core/security/captcha/index.d.ts +21 -0
  174. package/dist/core/security/captcha/index.d.ts.map +1 -0
  175. package/dist/core/security/captcha/index.js +34 -0
  176. package/dist/core/security/captcha/index.js.map +1 -0
  177. package/dist/core/security/captcha/recaptcha.d.ts +41 -0
  178. package/dist/core/security/captcha/recaptcha.d.ts.map +1 -0
  179. package/dist/core/security/captcha/recaptcha.js +89 -0
  180. package/dist/core/security/captcha/recaptcha.js.map +1 -0
  181. package/dist/core/security/captcha/turnstile.d.ts +41 -0
  182. package/dist/core/security/captcha/turnstile.d.ts.map +1 -0
  183. package/dist/core/security/captcha/turnstile.js +90 -0
  184. package/dist/core/security/captcha/turnstile.js.map +1 -0
  185. package/dist/core/security/captcha/types.d.ts +66 -0
  186. package/dist/core/security/captcha/types.d.ts.map +1 -0
  187. package/dist/core/security/captcha/types.js +7 -0
  188. package/dist/core/security/captcha/types.js.map +1 -0
  189. package/dist/core/security/mfa/email-otp.d.ts +91 -0
  190. package/dist/core/security/mfa/email-otp.d.ts.map +1 -0
  191. package/dist/core/security/mfa/email-otp.js +264 -0
  192. package/dist/core/security/mfa/email-otp.js.map +1 -0
  193. package/dist/core/security/mfa/index.d.ts +8 -0
  194. package/dist/core/security/mfa/index.d.ts.map +1 -0
  195. package/dist/core/security/mfa/index.js +8 -0
  196. package/dist/core/security/mfa/index.js.map +1 -0
  197. package/dist/core/security/mfa/totp.d.ts +87 -0
  198. package/dist/core/security/mfa/totp.d.ts.map +1 -0
  199. package/dist/core/security/mfa/totp.js +293 -0
  200. package/dist/core/security/mfa/totp.js.map +1 -0
  201. package/dist/core/security/middleware.d.ts +102 -0
  202. package/dist/core/security/middleware.d.ts.map +1 -0
  203. package/dist/core/security/middleware.js +261 -0
  204. package/dist/core/security/middleware.js.map +1 -0
  205. package/dist/core/security/oauth/google.d.ts +76 -0
  206. package/dist/core/security/oauth/google.d.ts.map +1 -0
  207. package/dist/core/security/oauth/google.js +154 -0
  208. package/dist/core/security/oauth/google.js.map +1 -0
  209. package/dist/core/security/oauth/index.d.ts +8 -0
  210. package/dist/core/security/oauth/index.d.ts.map +1 -0
  211. package/dist/core/security/oauth/index.js +7 -0
  212. package/dist/core/security/oauth/index.js.map +1 -0
  213. package/dist/core/security/oauth2/authorization-server.d.ts +195 -0
  214. package/dist/core/security/oauth2/authorization-server.d.ts.map +1 -0
  215. package/dist/core/security/oauth2/authorization-server.js +569 -0
  216. package/dist/core/security/oauth2/authorization-server.js.map +1 -0
  217. package/dist/core/security/oauth2/index.d.ts +9 -0
  218. package/dist/core/security/oauth2/index.d.ts.map +1 -0
  219. package/dist/core/security/oauth2/index.js +9 -0
  220. package/dist/core/security/oauth2/index.js.map +1 -0
  221. package/dist/core/security/rate-limiter.d.ts +15 -0
  222. package/dist/core/security/rate-limiter.d.ts.map +1 -0
  223. package/dist/core/security/rate-limiter.js +48 -0
  224. package/dist/core/security/rate-limiter.js.map +1 -0
  225. package/dist/core/security/validation.d.ts +20 -0
  226. package/dist/core/security/validation.d.ts.map +1 -0
  227. package/dist/core/security/validation.js +273 -0
  228. package/dist/core/security/validation.js.map +1 -0
  229. package/dist/core/services/auth-service.d.ts +128 -0
  230. package/dist/core/services/auth-service.d.ts.map +1 -0
  231. package/dist/core/services/auth-service.js +530 -0
  232. package/dist/core/services/auth-service.js.map +1 -0
  233. package/dist/core/services/captcha-service.d.ts +44 -0
  234. package/dist/core/services/captcha-service.d.ts.map +1 -0
  235. package/dist/core/services/captcha-service.js +82 -0
  236. package/dist/core/services/captcha-service.js.map +1 -0
  237. package/dist/core/services/document-service.d.ts +59 -0
  238. package/dist/core/services/document-service.d.ts.map +1 -0
  239. package/dist/core/services/document-service.js +269 -0
  240. package/dist/core/services/document-service.js.map +1 -0
  241. package/dist/core/services/media-service.d.ts +40 -0
  242. package/dist/core/services/media-service.d.ts.map +1 -0
  243. package/dist/core/services/media-service.js +396 -0
  244. package/dist/core/services/media-service.js.map +1 -0
  245. package/dist/core/services/mfa-service.d.ts +123 -0
  246. package/dist/core/services/mfa-service.d.ts.map +1 -0
  247. package/dist/core/services/mfa-service.js +606 -0
  248. package/dist/core/services/mfa-service.js.map +1 -0
  249. package/dist/core/services/oauth-service.d.ts +58 -0
  250. package/dist/core/services/oauth-service.d.ts.map +1 -0
  251. package/dist/core/services/oauth-service.js +253 -0
  252. package/dist/core/services/oauth-service.js.map +1 -0
  253. package/dist/core/services/oauth2-server-service.d.ts +61 -0
  254. package/dist/core/services/oauth2-server-service.d.ts.map +1 -0
  255. package/dist/core/services/oauth2-server-service.js +259 -0
  256. package/dist/core/services/oauth2-server-service.js.map +1 -0
  257. package/dist/core/services/passkey-service.d.ts +59 -0
  258. package/dist/core/services/passkey-service.d.ts.map +1 -0
  259. package/dist/core/services/passkey-service.js +238 -0
  260. package/dist/core/services/passkey-service.js.map +1 -0
  261. package/dist/core/services/token-service.d.ts +31 -0
  262. package/dist/core/services/token-service.d.ts.map +1 -0
  263. package/dist/core/services/token-service.js +132 -0
  264. package/dist/core/services/token-service.js.map +1 -0
  265. package/dist/core/services/trusted-device-service.d.ts +39 -0
  266. package/dist/core/services/trusted-device-service.d.ts.map +1 -0
  267. package/dist/core/services/trusted-device-service.js +123 -0
  268. package/dist/core/services/trusted-device-service.js.map +1 -0
  269. package/dist/core/services/user-service.d.ts +38 -0
  270. package/dist/core/services/user-service.d.ts.map +1 -0
  271. package/dist/core/services/user-service.js +265 -0
  272. package/dist/core/services/user-service.js.map +1 -0
  273. package/dist/core/studio/integration.d.ts +54 -0
  274. package/dist/core/studio/integration.d.ts.map +1 -0
  275. package/dist/core/studio/integration.js +326 -0
  276. package/dist/core/studio/integration.js.map +1 -0
  277. package/dist/core/types/index.d.ts +282 -0
  278. package/dist/core/types/index.d.ts.map +1 -0
  279. package/dist/core/types/index.js +83 -0
  280. package/dist/core/types/index.js.map +1 -0
  281. package/dist/core/types/mail.d.ts +90 -0
  282. package/dist/core/types/mail.d.ts.map +1 -0
  283. package/dist/core/types/mail.js +7 -0
  284. package/dist/core/types/mail.js.map +1 -0
  285. package/dist/core/types/oauth2.d.ts +9 -0
  286. package/dist/core/types/oauth2.d.ts.map +1 -0
  287. package/dist/core/types/oauth2.js +7 -0
  288. package/dist/core/types/oauth2.js.map +1 -0
  289. package/dist/core/types/storage-adapters.d.ts +611 -0
  290. package/dist/core/types/storage-adapters.d.ts.map +1 -0
  291. package/dist/core/types/storage-adapters.js +14 -0
  292. package/dist/core/types/storage-adapters.js.map +1 -0
  293. package/dist/core/types/user.d.ts +10 -0
  294. package/dist/core/types/user.d.ts.map +1 -0
  295. package/dist/core/types/user.js +45 -0
  296. package/dist/core/types/user.js.map +1 -0
  297. package/dist/core/utils/id-generator.d.ts +16 -0
  298. package/dist/core/utils/id-generator.d.ts.map +1 -0
  299. package/dist/core/utils/id-generator.js +61 -0
  300. package/dist/core/utils/id-generator.js.map +1 -0
  301. package/dist/core/utils/logger.d.ts +100 -0
  302. package/dist/core/utils/logger.d.ts.map +1 -0
  303. package/dist/core/utils/logger.js +212 -0
  304. package/dist/core/utils/logger.js.map +1 -0
  305. package/dist/core/utils/reference-expander.d.ts +57 -0
  306. package/dist/core/utils/reference-expander.d.ts.map +1 -0
  307. package/dist/core/utils/reference-expander.js +192 -0
  308. package/dist/core/utils/reference-expander.js.map +1 -0
  309. package/dist/core/utils/universal-crypto.d.ts +46 -0
  310. package/dist/core/utils/universal-crypto.d.ts.map +1 -0
  311. package/dist/core/utils/universal-crypto.js +171 -0
  312. package/dist/core/utils/universal-crypto.js.map +1 -0
  313. package/dist/core/validation/validator.d.ts +11 -0
  314. package/dist/core/validation/validator.d.ts.map +1 -0
  315. package/dist/core/validation/validator.js +164 -0
  316. package/dist/core/validation/validator.js.map +1 -0
  317. package/dist/i18n/config.d.ts +4077 -0
  318. package/dist/i18n/config.d.ts.map +1 -0
  319. package/dist/i18n/config.js +116 -0
  320. package/dist/i18n/config.js.map +1 -0
  321. package/dist/i18n/hooks.d.ts +86 -0
  322. package/dist/i18n/hooks.d.ts.map +1 -0
  323. package/dist/i18n/hooks.js +122 -0
  324. package/dist/i18n/hooks.js.map +1 -0
  325. package/dist/i18n/index.d.ts +39 -0
  326. package/dist/i18n/index.d.ts.map +1 -0
  327. package/dist/i18n/index.js +40 -0
  328. package/dist/i18n/index.js.map +1 -0
  329. package/dist/i18n/locales/en/auth.json +108 -0
  330. package/dist/i18n/locales/en/common.json +100 -0
  331. package/dist/i18n/locales/en/errors.json +55 -0
  332. package/dist/i18n/locales/en/fields.json +456 -0
  333. package/dist/i18n/locales/en/studio.json +1329 -0
  334. package/dist/i18n/locales/fr/auth.json +108 -0
  335. package/dist/i18n/locales/fr/common.json +100 -0
  336. package/dist/i18n/locales/fr/errors.json +55 -0
  337. package/dist/i18n/locales/fr/fields.json +456 -0
  338. package/dist/i18n/locales/fr/studio.json +1274 -0
  339. package/dist/i18n/provider.d.ts +45 -0
  340. package/dist/i18n/provider.d.ts.map +1 -0
  341. package/dist/i18n/provider.js +49 -0
  342. package/dist/i18n/provider.js.map +1 -0
  343. package/dist/i18n/types.d.ts +8 -0
  344. package/dist/i18n/types.d.ts.map +1 -0
  345. package/dist/i18n/types.js +7 -0
  346. package/dist/i18n/types.js.map +1 -0
  347. package/dist/index.d.ts +15 -0
  348. package/dist/index.d.ts.map +1 -0
  349. package/dist/index.js +16 -0
  350. package/dist/index.js.map +1 -0
  351. package/dist/integrations/express/adapter.d.ts +33 -0
  352. package/dist/integrations/express/adapter.d.ts.map +1 -0
  353. package/dist/integrations/express/adapter.js +203 -0
  354. package/dist/integrations/express/adapter.js.map +1 -0
  355. package/dist/integrations/express/config.d.ts +599 -0
  356. package/dist/integrations/express/config.d.ts.map +1 -0
  357. package/dist/integrations/express/config.js +166 -0
  358. package/dist/integrations/express/config.js.map +1 -0
  359. package/dist/integrations/express/index.d.ts +10 -0
  360. package/dist/integrations/express/index.d.ts.map +1 -0
  361. package/dist/integrations/express/index.js +9 -0
  362. package/dist/integrations/express/index.js.map +1 -0
  363. package/dist/integrations/express/integration.d.ts +111 -0
  364. package/dist/integrations/express/integration.d.ts.map +1 -0
  365. package/dist/integrations/express/integration.js +730 -0
  366. package/dist/integrations/express/integration.js.map +1 -0
  367. package/dist/integrations/express/media-rewrite-middleware.d.ts +78 -0
  368. package/dist/integrations/express/media-rewrite-middleware.d.ts.map +1 -0
  369. package/dist/integrations/express/media-rewrite-middleware.js +211 -0
  370. package/dist/integrations/express/media-rewrite-middleware.js.map +1 -0
  371. package/dist/integrations/express/media-url-generator.d.ts +52 -0
  372. package/dist/integrations/express/media-url-generator.d.ts.map +1 -0
  373. package/dist/integrations/express/media-url-generator.js +107 -0
  374. package/dist/integrations/express/media-url-generator.js.map +1 -0
  375. package/dist/integrations/express/middleware.d.ts +25 -0
  376. package/dist/integrations/express/middleware.d.ts.map +1 -0
  377. package/dist/integrations/express/middleware.js +130 -0
  378. package/dist/integrations/express/middleware.js.map +1 -0
  379. package/dist/integrations/express/server.d.ts +99 -0
  380. package/dist/integrations/express/server.d.ts.map +1 -0
  381. package/dist/integrations/express/server.js +597 -0
  382. package/dist/integrations/express/server.js.map +1 -0
  383. package/dist/integrations/express/types.d.ts +106 -0
  384. package/dist/integrations/express/types.d.ts.map +1 -0
  385. package/dist/integrations/express/types.js +2 -0
  386. package/dist/integrations/express/types.js.map +1 -0
  387. package/dist/mail/adapters/console.d.ts +30 -0
  388. package/dist/mail/adapters/console.d.ts.map +1 -0
  389. package/dist/mail/adapters/console.js +169 -0
  390. package/dist/mail/adapters/console.js.map +1 -0
  391. package/dist/mail/adapters/resend.d.ts +18 -0
  392. package/dist/mail/adapters/resend.d.ts.map +1 -0
  393. package/dist/mail/adapters/resend.js +148 -0
  394. package/dist/mail/adapters/resend.js.map +1 -0
  395. package/dist/mail/adapters/smtp.d.ts +22 -0
  396. package/dist/mail/adapters/smtp.d.ts.map +1 -0
  397. package/dist/mail/adapters/smtp.js +180 -0
  398. package/dist/mail/adapters/smtp.js.map +1 -0
  399. package/dist/mail/index.d.ts +15 -0
  400. package/dist/mail/index.d.ts.map +1 -0
  401. package/dist/mail/index.js +13 -0
  402. package/dist/mail/index.js.map +1 -0
  403. package/dist/mail/mail-service.d.ts +180 -0
  404. package/dist/mail/mail-service.d.ts.map +1 -0
  405. package/dist/mail/mail-service.js +370 -0
  406. package/dist/mail/mail-service.js.map +1 -0
  407. package/dist/mail/notification-service.d.ts +82 -0
  408. package/dist/mail/notification-service.d.ts.map +1 -0
  409. package/dist/mail/notification-service.js +262 -0
  410. package/dist/mail/notification-service.js.map +1 -0
  411. package/dist/mail/templates/built-in-templates.d.ts +47 -0
  412. package/dist/mail/templates/built-in-templates.d.ts.map +1 -0
  413. package/dist/mail/templates/built-in-templates.js +416 -0
  414. package/dist/mail/templates/built-in-templates.js.map +1 -0
  415. package/dist/mail/templates/custom-template-renderer.d.ts +115 -0
  416. package/dist/mail/templates/custom-template-renderer.d.ts.map +1 -0
  417. package/dist/mail/templates/custom-template-renderer.js +225 -0
  418. package/dist/mail/templates/custom-template-renderer.js.map +1 -0
  419. package/dist/mail/types.d.ts +7 -0
  420. package/dist/mail/types.d.ts.map +1 -0
  421. package/dist/mail/types.js +7 -0
  422. package/dist/mail/types.js.map +1 -0
  423. package/dist/routes/auth/captcha.d.ts +33 -0
  424. package/dist/routes/auth/captcha.d.ts.map +1 -0
  425. package/dist/routes/auth/captcha.js +102 -0
  426. package/dist/routes/auth/captcha.js.map +1 -0
  427. package/dist/routes/auth/change-password.d.ts +17 -0
  428. package/dist/routes/auth/change-password.d.ts.map +1 -0
  429. package/dist/routes/auth/change-password.js +121 -0
  430. package/dist/routes/auth/change-password.js.map +1 -0
  431. package/dist/routes/auth/index.d.ts +13 -0
  432. package/dist/routes/auth/index.d.ts.map +1 -0
  433. package/dist/routes/auth/index.js +35 -0
  434. package/dist/routes/auth/index.js.map +1 -0
  435. package/dist/routes/auth/mfa.d.ts +121 -0
  436. package/dist/routes/auth/mfa.d.ts.map +1 -0
  437. package/dist/routes/auth/mfa.js +1143 -0
  438. package/dist/routes/auth/mfa.js.map +1 -0
  439. package/dist/routes/auth/oauth.d.ts +37 -0
  440. package/dist/routes/auth/oauth.d.ts.map +1 -0
  441. package/dist/routes/auth/oauth.js +420 -0
  442. package/dist/routes/auth/oauth.js.map +1 -0
  443. package/dist/routes/auth/oauth2-server.d.ts +70 -0
  444. package/dist/routes/auth/oauth2-server.d.ts.map +1 -0
  445. package/dist/routes/auth/oauth2-server.js +775 -0
  446. package/dist/routes/auth/oauth2-server.js.map +1 -0
  447. package/dist/routes/auth/passkey.d.ts +65 -0
  448. package/dist/routes/auth/passkey.d.ts.map +1 -0
  449. package/dist/routes/auth/passkey.js +910 -0
  450. package/dist/routes/auth/passkey.js.map +1 -0
  451. package/dist/routes/auth/password-reset.d.ts +23 -0
  452. package/dist/routes/auth/password-reset.d.ts.map +1 -0
  453. package/dist/routes/auth/password-reset.js +336 -0
  454. package/dist/routes/auth/password-reset.js.map +1 -0
  455. package/dist/routes/handlers/audit.d.ts +21 -0
  456. package/dist/routes/handlers/audit.d.ts.map +1 -0
  457. package/dist/routes/handlers/audit.js +124 -0
  458. package/dist/routes/handlers/audit.js.map +1 -0
  459. package/dist/routes/handlers/auth.d.ts +150 -0
  460. package/dist/routes/handlers/auth.d.ts.map +1 -0
  461. package/dist/routes/handlers/auth.js +512 -0
  462. package/dist/routes/handlers/auth.js.map +1 -0
  463. package/dist/routes/handlers/base.d.ts +34 -0
  464. package/dist/routes/handlers/base.d.ts.map +1 -0
  465. package/dist/routes/handlers/base.js +366 -0
  466. package/dist/routes/handlers/base.js.map +1 -0
  467. package/dist/routes/handlers/config.d.ts +31 -0
  468. package/dist/routes/handlers/config.d.ts.map +1 -0
  469. package/dist/routes/handlers/config.js +483 -0
  470. package/dist/routes/handlers/config.js.map +1 -0
  471. package/dist/routes/handlers/documents.d.ts +50 -0
  472. package/dist/routes/handlers/documents.d.ts.map +1 -0
  473. package/dist/routes/handlers/documents.js +708 -0
  474. package/dist/routes/handlers/documents.js.map +1 -0
  475. package/dist/routes/handlers/index.d.ts +12 -0
  476. package/dist/routes/handlers/index.d.ts.map +1 -0
  477. package/dist/routes/handlers/index.js +11 -0
  478. package/dist/routes/handlers/index.js.map +1 -0
  479. package/dist/routes/handlers/media.d.ts +24 -0
  480. package/dist/routes/handlers/media.d.ts.map +1 -0
  481. package/dist/routes/handlers/media.js +432 -0
  482. package/dist/routes/handlers/media.js.map +1 -0
  483. package/dist/routes/handlers/search.d.ts +10 -0
  484. package/dist/routes/handlers/search.d.ts.map +1 -0
  485. package/dist/routes/handlers/search.js +153 -0
  486. package/dist/routes/handlers/search.js.map +1 -0
  487. package/dist/routes/handlers/tokens.d.ts +14 -0
  488. package/dist/routes/handlers/tokens.d.ts.map +1 -0
  489. package/dist/routes/handlers/tokens.js +109 -0
  490. package/dist/routes/handlers/tokens.js.map +1 -0
  491. package/dist/routes/handlers/types.d.ts +13 -0
  492. package/dist/routes/handlers/types.d.ts.map +1 -0
  493. package/dist/routes/handlers/types.js +5 -0
  494. package/dist/routes/handlers/types.js.map +1 -0
  495. package/dist/routes/handlers/users.d.ts +16 -0
  496. package/dist/routes/handlers/users.d.ts.map +1 -0
  497. package/dist/routes/handlers/users.js +198 -0
  498. package/dist/routes/handlers/users.js.map +1 -0
  499. package/dist/routes/handlers/webhooks.d.ts +37 -0
  500. package/dist/routes/handlers/webhooks.d.ts.map +1 -0
  501. package/dist/routes/handlers/webhooks.js +343 -0
  502. package/dist/routes/handlers/webhooks.js.map +1 -0
  503. package/dist/routes/index.d.ts +5 -0
  504. package/dist/routes/index.d.ts.map +1 -0
  505. package/dist/routes/index.js +5 -0
  506. package/dist/routes/index.js.map +1 -0
  507. package/dist/routes/routes.d.ts +29 -0
  508. package/dist/routes/routes.d.ts.map +1 -0
  509. package/dist/routes/routes.js +531 -0
  510. package/dist/routes/routes.js.map +1 -0
  511. package/dist/routes/slug-processor.d.ts +32 -0
  512. package/dist/routes/slug-processor.d.ts.map +1 -0
  513. package/dist/routes/slug-processor.js +328 -0
  514. package/dist/routes/slug-processor.js.map +1 -0
  515. package/dist/routes/types.d.ts +31 -0
  516. package/dist/routes/types.d.ts.map +1 -0
  517. package/dist/routes/types.js +7 -0
  518. package/dist/routes/types.js.map +1 -0
  519. package/dist/routes/users/index.d.ts +7 -0
  520. package/dist/routes/users/index.d.ts.map +1 -0
  521. package/dist/routes/users/index.js +7 -0
  522. package/dist/routes/users/index.js.map +1 -0
  523. package/dist/structure/builder/StructureBuilder.d.ts +209 -0
  524. package/dist/structure/builder/StructureBuilder.d.ts.map +1 -0
  525. package/dist/structure/builder/StructureBuilder.js +425 -0
  526. package/dist/structure/builder/StructureBuilder.js.map +1 -0
  527. package/dist/structure/builder/index.d.ts +8 -0
  528. package/dist/structure/builder/index.d.ts.map +1 -0
  529. package/dist/structure/builder/index.js +6 -0
  530. package/dist/structure/builder/index.js.map +1 -0
  531. package/dist/structure/builder/navigation-tree-builder.d.ts +33 -0
  532. package/dist/structure/builder/navigation-tree-builder.d.ts.map +1 -0
  533. package/dist/structure/builder/navigation-tree-builder.js +284 -0
  534. package/dist/structure/builder/navigation-tree-builder.js.map +1 -0
  535. package/dist/structure/errors/index.d.ts +72 -0
  536. package/dist/structure/errors/index.d.ts.map +1 -0
  537. package/dist/structure/errors/index.js +136 -0
  538. package/dist/structure/errors/index.js.map +1 -0
  539. package/dist/structure/index.d.ts +14 -0
  540. package/dist/structure/index.d.ts.map +1 -0
  541. package/dist/structure/index.js +16 -0
  542. package/dist/structure/index.js.map +1 -0
  543. package/dist/structure/types/filters.d.ts +167 -0
  544. package/dist/structure/types/filters.d.ts.map +1 -0
  545. package/dist/structure/types/filters.js +38 -0
  546. package/dist/structure/types/filters.js.map +1 -0
  547. package/dist/structure/types/index.d.ts +11 -0
  548. package/dist/structure/types/index.d.ts.map +1 -0
  549. package/dist/structure/types/index.js +7 -0
  550. package/dist/structure/types/index.js.map +1 -0
  551. package/dist/structure/types/permissions.d.ts +159 -0
  552. package/dist/structure/types/permissions.d.ts.map +1 -0
  553. package/dist/structure/types/permissions.js +49 -0
  554. package/dist/structure/types/permissions.js.map +1 -0
  555. package/dist/structure/types/structure.d.ts +342 -0
  556. package/dist/structure/types/structure.d.ts.map +1 -0
  557. package/dist/structure/types/structure.js +6 -0
  558. package/dist/structure/types/structure.js.map +1 -0
  559. package/dist/structure/types/views.d.ts +278 -0
  560. package/dist/structure/types/views.d.ts.map +1 -0
  561. package/dist/structure/types/views.js +6 -0
  562. package/dist/structure/types/views.js.map +1 -0
  563. package/dist/structure/utils/hash.d.ts +61 -0
  564. package/dist/structure/utils/hash.d.ts.map +1 -0
  565. package/dist/structure/utils/hash.js +118 -0
  566. package/dist/structure/utils/hash.js.map +1 -0
  567. package/dist/structure/utils/index.d.ts +10 -0
  568. package/dist/structure/utils/index.d.ts.map +1 -0
  569. package/dist/structure/utils/index.js +7 -0
  570. package/dist/structure/utils/index.js.map +1 -0
  571. package/dist/structure/utils/permission-checker.d.ts +57 -0
  572. package/dist/structure/utils/permission-checker.d.ts.map +1 -0
  573. package/dist/structure/utils/permission-checker.js +286 -0
  574. package/dist/structure/utils/permission-checker.js.map +1 -0
  575. package/dist/structure/utils/query-builder.d.ts +82 -0
  576. package/dist/structure/utils/query-builder.d.ts.map +1 -0
  577. package/dist/structure/utils/query-builder.js +489 -0
  578. package/dist/structure/utils/query-builder.js.map +1 -0
  579. package/dist/structure/utils/structure-merger.d.ts +91 -0
  580. package/dist/structure/utils/structure-merger.d.ts.map +1 -0
  581. package/dist/structure/utils/structure-merger.js +445 -0
  582. package/dist/structure/utils/structure-merger.js.map +1 -0
  583. package/dist/structure/validation/schemas.d.ts +3107 -0
  584. package/dist/structure/validation/schemas.d.ts.map +1 -0
  585. package/dist/structure/validation/schemas.js +436 -0
  586. package/dist/structure/validation/schemas.js.map +1 -0
  587. package/dist/types/api-requests.d.ts +334 -0
  588. package/dist/types/api-requests.d.ts.map +1 -0
  589. package/dist/types/api-requests.js +8 -0
  590. package/dist/types/api-requests.js.map +1 -0
  591. package/dist/types/auth.d.ts +394 -0
  592. package/dist/types/auth.d.ts.map +1 -0
  593. package/dist/types/auth.js +8 -0
  594. package/dist/types/auth.js.map +1 -0
  595. package/dist/types/document.d.ts +49 -0
  596. package/dist/types/document.d.ts.map +1 -0
  597. package/dist/types/document.js +6 -0
  598. package/dist/types/document.js.map +1 -0
  599. package/dist/types/field-system.d.ts +197 -0
  600. package/dist/types/field-system.d.ts.map +1 -0
  601. package/dist/types/field-system.js +8 -0
  602. package/dist/types/field-system.js.map +1 -0
  603. package/dist/types/fields.d.ts +17 -0
  604. package/dist/types/fields.d.ts.map +1 -0
  605. package/dist/types/fields.js +21 -0
  606. package/dist/types/fields.js.map +1 -0
  607. package/dist/types/http.d.ts +162 -0
  608. package/dist/types/http.d.ts.map +1 -0
  609. package/dist/types/http.js +8 -0
  610. package/dist/types/http.js.map +1 -0
  611. package/dist/types/i18n.d.ts +56 -0
  612. package/dist/types/i18n.d.ts.map +1 -0
  613. package/dist/types/i18n.js +25 -0
  614. package/dist/types/i18n.js.map +1 -0
  615. package/dist/types/index.d.ts +22 -0
  616. package/dist/types/index.d.ts.map +1 -0
  617. package/dist/types/index.js +10 -0
  618. package/dist/types/index.js.map +1 -0
  619. package/dist/types/mail.d.ts +224 -0
  620. package/dist/types/mail.d.ts.map +1 -0
  621. package/dist/types/mail.js +8 -0
  622. package/dist/types/mail.js.map +1 -0
  623. package/dist/types/media.d.ts +56 -0
  624. package/dist/types/media.d.ts.map +1 -0
  625. package/dist/types/media.js +6 -0
  626. package/dist/types/media.js.map +1 -0
  627. package/dist/types/oauth2.d.ts +287 -0
  628. package/dist/types/oauth2.d.ts.map +1 -0
  629. package/dist/types/oauth2.js +43 -0
  630. package/dist/types/oauth2.js.map +1 -0
  631. package/dist/types/passkey.d.ts +217 -0
  632. package/dist/types/passkey.d.ts.map +1 -0
  633. package/dist/types/passkey.js +8 -0
  634. package/dist/types/passkey.js.map +1 -0
  635. package/dist/types/slug.d.ts +99 -0
  636. package/dist/types/slug.d.ts.map +1 -0
  637. package/dist/types/slug.js +8 -0
  638. package/dist/types/slug.js.map +1 -0
  639. package/package.json +183 -0
@@ -0,0 +1,530 @@
1
+ /**
2
+ * Authentication service: password verification, JWT issuance and the
3
+ * login flows (including MFA hand-off). Extracted from TrokkyCore.
4
+ */
5
+ export class AuthService {
6
+ deps;
7
+ constructor(deps) {
8
+ this.deps = deps;
9
+ }
10
+ // Authentication utilities
11
+ async verifyPassword(plainPassword, hashedPassword) {
12
+ return await this.deps.cryptoAdapter.verifyPassword(plainPassword, hashedPassword);
13
+ }
14
+ /**
15
+ * Hash a password using the configured crypto adapter
16
+ * Exposed publicly to ensure consistent hashing across all password operations
17
+ */
18
+ async hashPassword(password) {
19
+ return await this.deps.cryptoAdapter.hashPassword(password);
20
+ }
21
+ checkWeakPassword(password) {
22
+ // Common weak passwords
23
+ const commonPasswords = [
24
+ 'password', 'admin', 'changeme', 'changeme123', '123456',
25
+ 'qwerty', 'abc123', 'password123', 'admin123', 'letmein',
26
+ 'welcome', 'monkey', 'dragon', 'master', 'secret'
27
+ ];
28
+ // Check if password is too short
29
+ if (password.length < 8) {
30
+ return { isWeak: true, reason: 'Password is too short (minimum 8 characters)' };
31
+ }
32
+ // Check for common weak passwords
33
+ if (commonPasswords.includes(password.toLowerCase())) {
34
+ return { isWeak: true, reason: 'Password is a common weak password' };
35
+ }
36
+ // Check for simple patterns
37
+ if (/^(.)\1+$/.test(password)) {
38
+ return { isWeak: true, reason: 'Password contains only repeated characters' };
39
+ }
40
+ if (/^(012|123|234|345|456|567|678|789|890|abc|def|qwe|asd|zxc)/i.test(password)) {
41
+ return { isWeak: true, reason: 'Password contains sequential characters' };
42
+ }
43
+ // Warn if password is short (8-11 characters) even if not technically weak
44
+ if (password.length < 12) {
45
+ return { isWeak: true, reason: 'Password is shorter than recommended (12+ characters)' };
46
+ }
47
+ // Check password complexity
48
+ const hasLower = /[a-z]/.test(password);
49
+ const hasUpper = /[A-Z]/.test(password);
50
+ const hasNumber = /\d/.test(password);
51
+ const hasSpecial = /[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(password);
52
+ const complexityCount = [hasLower, hasUpper, hasNumber, hasSpecial].filter(Boolean).length;
53
+ if (complexityCount < 3) {
54
+ return { isWeak: true, reason: 'Password lacks complexity (needs lowercase, uppercase, numbers, and/or symbols)' };
55
+ }
56
+ return { isWeak: false };
57
+ }
58
+ // JWT Token Management
59
+ async generateAuthToken(user, expiresIn = '24h', rememberMe) {
60
+ const payload = {
61
+ userId: user.id,
62
+ username: user.username,
63
+ role: user.role,
64
+ permissions: user.permissions,
65
+ rememberMe: rememberMe // Store rememberMe flag in JWT payload
66
+ };
67
+ return await this.deps.cryptoAdapter.generateJWT(payload, this.deps.jwtSecret, { expiresIn });
68
+ }
69
+ async verifyAuthToken(token) {
70
+ const decoded = await this.deps.cryptoAdapter.verifyJWT(token, this.deps.jwtSecret);
71
+ // Handle both standard 'userId' claim and OAuth2 'sub' claim
72
+ const userId = decoded?.userId || decoded?.sub;
73
+ const username = decoded?.username;
74
+ if (!decoded || !userId || !username) {
75
+ return null;
76
+ }
77
+ // Fetch fresh user data from storage to get current permissions
78
+ try {
79
+ const currentUser = await this.deps.getUser(userId);
80
+ if (!currentUser || !currentUser.isActive) {
81
+ return null; // User no longer exists or is inactive
82
+ }
83
+ return {
84
+ userId,
85
+ username,
86
+ role: currentUser.role, // Use fresh role from storage
87
+ permissions: currentUser.permissions, // Use fresh permissions from storage
88
+ loginAt: decoded.iat ? new Date(decoded.iat * 1000).toISOString() : new Date().toISOString(),
89
+ expiresAt: decoded.exp ? new Date(decoded.exp * 1000).toISOString() : undefined
90
+ };
91
+ }
92
+ catch (error) {
93
+ // If we can't fetch user data, fall back to JWT payload for backwards compatibility
94
+ if (!decoded.role || !decoded.permissions) {
95
+ return null;
96
+ }
97
+ return {
98
+ userId,
99
+ username,
100
+ role: decoded.role,
101
+ permissions: decoded.permissions,
102
+ loginAt: decoded.iat ? new Date(decoded.iat * 1000).toISOString() : new Date().toISOString(),
103
+ expiresAt: decoded.exp ? new Date(decoded.exp * 1000).toISOString() : undefined
104
+ };
105
+ }
106
+ }
107
+ /**
108
+ * Unified token validation that handles both JWT and API tokens
109
+ * Returns a consistent UserSession interface for both token types
110
+ */
111
+ async verifyAnyToken(token) {
112
+ // Check if it's a JWT token (3 parts separated by dots)
113
+ const parts = token.split('.');
114
+ if (parts.length === 3) {
115
+ // JWT token - use existing verification
116
+ return await this.verifyAuthToken(token);
117
+ }
118
+ else if (token.length === 64 && /^[a-f0-9]{64}$/.test(token)) {
119
+ // API token - validate and get permissions
120
+ const result = await this.deps.validateAppToken(token);
121
+ if (result.valid && result.appToken) {
122
+ // Create a session-like object for API tokens
123
+ return {
124
+ userId: result.appToken.createdBy,
125
+ username: `api-token-${result.appToken.name}`,
126
+ role: 'api', // Special role for API tokens
127
+ permissions: result.appToken.permissions,
128
+ loginAt: new Date().toISOString(),
129
+ expiresAt: result.appToken.expiresAt
130
+ };
131
+ }
132
+ }
133
+ return null;
134
+ }
135
+ /**
136
+ * Authentication result types for MFA support
137
+ */
138
+ async authenticateUser(username, password, options = {}) {
139
+ try {
140
+ // Get user by username
141
+ const user = await this.deps.getUserByUsername(username);
142
+ if (!user || !user.isActive) {
143
+ return null;
144
+ }
145
+ // Verify password
146
+ const isPasswordValid = await this.verifyPassword(password, user.passwordHash);
147
+ if (!isPasswordValid) {
148
+ return null;
149
+ }
150
+ // Upgrade the stored hash if it uses an outdated format or work factor.
151
+ // Never blocks login: any failure below is logged and ignored.
152
+ const loginUpdate = { lastLoginAt: new Date().toISOString() };
153
+ let loginUpdatePersisted = false;
154
+ if (this.deps.cryptoAdapter.needsRehash(user.passwordHash)) {
155
+ try {
156
+ const upgradedHash = await this.hashPassword(password);
157
+ const updateUserIf = this.deps.updateUserIf;
158
+ if (updateUserIf) {
159
+ // Atomic compare-and-set: the write only applies while the stored
160
+ // hash is still the one we verified, so a password change/reset that
161
+ // commits in between cannot be overwritten.
162
+ const conditionalUpdate = { ...loginUpdate, passwordHash: upgradedHash };
163
+ const updated = await updateUserIf(user.id, conditionalUpdate, { passwordHash: user.passwordHash });
164
+ if (updated) {
165
+ loginUpdatePersisted = true;
166
+ // Mirror the audit event updateUser would have emitted for this write
167
+ this.deps.logAuditEvent({
168
+ type: 'user_updated',
169
+ targetUserId: user.id,
170
+ username: user.username,
171
+ action: `User updated`,
172
+ timestamp: new Date().toISOString(),
173
+ success: true,
174
+ details: {
175
+ updatedFields: Object.keys(conditionalUpdate),
176
+ previousRole: user.role,
177
+ newRole: user.role
178
+ }
179
+ });
180
+ this.deps.logger.debug('Password hash upgraded to current format', { userId: user.id });
181
+ }
182
+ else {
183
+ this.deps.logger.debug('Skipped password hash upgrade: hash changed during login', { userId: user.id });
184
+ }
185
+ }
186
+ else {
187
+ // Adapter has no conditional update: guard with a re-read, which
188
+ // narrows but does not close the race.
189
+ const current = await this.deps.getUser(user.id);
190
+ if (current && current.passwordHash === user.passwordHash) {
191
+ loginUpdate.passwordHash = upgradedHash;
192
+ }
193
+ else {
194
+ this.deps.logger.debug('Skipped password hash upgrade: hash changed during login', { userId: user.id });
195
+ }
196
+ }
197
+ }
198
+ catch (error) {
199
+ this.deps.logger.warn('Failed to upgrade password hash', { userId: user.id });
200
+ }
201
+ }
202
+ // Persist last login time (and upgraded hash, if any) in a single write.
203
+ // A storage failure here must not turn a correct password into a 401.
204
+ if (!loginUpdatePersisted) {
205
+ try {
206
+ await this.deps.updateUser(user.id, loginUpdate);
207
+ if (loginUpdate.passwordHash) {
208
+ this.deps.logger.debug('Password hash upgraded to current format', { userId: user.id });
209
+ }
210
+ }
211
+ catch (error) {
212
+ this.deps.logger.warn('Failed to persist login update', { userId: user.id });
213
+ }
214
+ }
215
+ // Check MFA requirements
216
+ const mfaStatus = await this.deps.checkMFARequired(user.id);
217
+ // If MFA is required
218
+ if (mfaStatus.required) {
219
+ // Check if device is trusted (can skip MFA)
220
+ if (options.deviceId && mfaStatus.userHasMFA) {
221
+ const isTrusted = await this.deps.isDeviceTrusted(user.id, options.deviceId);
222
+ if (isTrusted) {
223
+ // Device is trusted, issue full tokens
224
+ return this.issueFullTokens(user, options);
225
+ }
226
+ }
227
+ // User has MFA set up - require verification
228
+ if (mfaStatus.userHasMFA) {
229
+ // Generate MFA pending token (short-lived)
230
+ const mfaToken = await this.generateMFAPendingToken(user, mfaStatus.methods);
231
+ this.deps.logAuditEvent({
232
+ type: 'user_login',
233
+ userId: user.id,
234
+ username: user.username,
235
+ action: 'MFA verification required',
236
+ timestamp: new Date().toISOString(),
237
+ success: true,
238
+ details: {
239
+ mfaRequired: true,
240
+ methods: mfaStatus.methods
241
+ }
242
+ });
243
+ return {
244
+ type: 'mfa_required',
245
+ requiresMFA: true,
246
+ mfaToken,
247
+ methods: mfaStatus.methods,
248
+ expiresIn: 300 // 5 minutes
249
+ };
250
+ }
251
+ // Org or role requires MFA but user hasn't set it up
252
+ if (mfaStatus.reason === 'org_required' || mfaStatus.reason === 'role_required') {
253
+ const setupToken = await this.generateMFASetupToken(user, mfaStatus.methods);
254
+ const message = mfaStatus.reason === 'role_required'
255
+ ? `Your role (${user.role}) requires MFA. Please set up multi-factor authentication.`
256
+ : 'Your organization requires MFA. Please set up multi-factor authentication.';
257
+ this.deps.logAuditEvent({
258
+ type: 'user_login',
259
+ userId: user.id,
260
+ username: user.username,
261
+ action: 'MFA setup required',
262
+ timestamp: new Date().toISOString(),
263
+ success: true,
264
+ details: {
265
+ mfaSetupRequired: true,
266
+ allowedMethods: mfaStatus.methods,
267
+ reason: mfaStatus.reason
268
+ }
269
+ });
270
+ return {
271
+ type: 'mfa_setup_required',
272
+ requiresMFASetup: true,
273
+ setupToken,
274
+ allowedMethods: mfaStatus.methods,
275
+ message,
276
+ expiresIn: 900 // 15 minutes
277
+ };
278
+ }
279
+ }
280
+ // No MFA required - issue full tokens
281
+ return this.issueFullTokens(user, options);
282
+ }
283
+ catch (error) {
284
+ console.error('Authentication failed:', error instanceof Error ? error.message : 'Unknown error');
285
+ return null;
286
+ }
287
+ }
288
+ /**
289
+ * Issue full authentication tokens after successful login (including MFA if required)
290
+ */
291
+ async issueFullTokens(user, options = {}) {
292
+ const securityConfig = this.deps.config.security?.tokens;
293
+ const tokenExpiresIn = options.rememberMe
294
+ ? (securityConfig?.rememberMeTtl || '7d')
295
+ : (securityConfig?.accessTokenTtl || '2h');
296
+ const refreshTokenExpiresIn = options.rememberMe
297
+ ? '30d'
298
+ : (securityConfig?.refreshTokenTtl || '7d');
299
+ const token = await this.generateAuthToken(user, tokenExpiresIn, options.rememberMe);
300
+ const refreshToken = await this.generateAuthToken(user, refreshTokenExpiresIn, options.rememberMe);
301
+ // Log successful login
302
+ this.deps.logAuditEvent({
303
+ type: 'user_login',
304
+ userId: user.id,
305
+ username: user.username,
306
+ action: 'User authenticated successfully',
307
+ timestamp: new Date().toISOString(),
308
+ success: true,
309
+ details: {
310
+ role: user.role,
311
+ lastLoginAt: new Date().toISOString(),
312
+ rememberMe: options.rememberMe
313
+ }
314
+ });
315
+ // Get token expiration time
316
+ const session = await this.verifyAuthToken(token);
317
+ const expiresAt = session?.expiresAt || new Date(Date.now() + 2 * 60 * 60 * 1000).toISOString();
318
+ // Return user without password hash
319
+ const { passwordHash, ...safeUser } = user;
320
+ return {
321
+ type: 'success',
322
+ user: { ...safeUser, passwordHash: '' },
323
+ token,
324
+ refreshToken,
325
+ expiresAt
326
+ };
327
+ }
328
+ /**
329
+ * Generate MFA pending token (used when MFA verification is needed)
330
+ */
331
+ async generateMFAPendingToken(user, methods) {
332
+ const payload = {
333
+ type: 'mfa_pending',
334
+ userId: user.id,
335
+ username: user.username,
336
+ mfaMethods: methods
337
+ };
338
+ return this.deps.cryptoAdapter.generateJWT(payload, this.deps.jwtSecret, { expiresIn: '5m' });
339
+ }
340
+ /**
341
+ * Generate MFA setup token (used when org requires MFA but user hasn't set it up)
342
+ */
343
+ async generateMFASetupToken(user, allowedMethods) {
344
+ const payload = {
345
+ type: 'mfa_setup',
346
+ userId: user.id,
347
+ username: user.username,
348
+ allowedMethods
349
+ };
350
+ return this.deps.cryptoAdapter.generateJWT(payload, this.deps.jwtSecret, { expiresIn: '15m' });
351
+ }
352
+ /**
353
+ * Complete MFA verification and issue full tokens
354
+ * Call this after verifyMFACode returns true
355
+ */
356
+ async completeMFAAuthentication(mfaToken, options = {}) {
357
+ try {
358
+ // Verify MFA pending token
359
+ const payload = await this.deps.cryptoAdapter.verifyJWT(mfaToken, this.deps.jwtSecret);
360
+ if (!payload || payload.type !== 'mfa_pending') {
361
+ return null;
362
+ }
363
+ // Get user
364
+ const user = await this.deps.getUser(payload.userId);
365
+ if (!user || !user.isActive) {
366
+ return null;
367
+ }
368
+ // Trust device if requested
369
+ if (options.trustDevice && options.deviceId) {
370
+ await this.deps.trustDevice(user.id, options.deviceId, options.deviceName || 'Unknown Device');
371
+ }
372
+ // Issue full tokens
373
+ return this.issueFullTokens(user, options);
374
+ }
375
+ catch (error) {
376
+ this.deps.logger.error('MFA authentication completion failed', {
377
+ error: error instanceof Error ? error.message : String(error)
378
+ });
379
+ return null;
380
+ }
381
+ }
382
+ /**
383
+ * Verify MFA setup token and return user info
384
+ */
385
+ async verifyMFASetupToken(setupToken) {
386
+ try {
387
+ const payload = await this.deps.cryptoAdapter.verifyJWT(setupToken, this.deps.jwtSecret);
388
+ if (!payload || payload.type !== 'mfa_setup') {
389
+ return null;
390
+ }
391
+ return {
392
+ userId: payload.userId,
393
+ username: payload.username,
394
+ allowedMethods: payload.allowedMethods
395
+ };
396
+ }
397
+ catch {
398
+ return null;
399
+ }
400
+ }
401
+ /**
402
+ * Verify any MFA token (pending or setup) and return payload
403
+ */
404
+ async verifyMFAToken(token) {
405
+ try {
406
+ const payload = await this.deps.cryptoAdapter.verifyJWT(token, this.deps.jwtSecret);
407
+ if (!payload) {
408
+ return null;
409
+ }
410
+ // Validate it's an MFA token type
411
+ if (payload.type !== 'mfa_pending' && payload.type !== 'mfa_setup') {
412
+ return null;
413
+ }
414
+ return {
415
+ type: payload.type,
416
+ userId: payload.userId,
417
+ username: payload.username,
418
+ mfaMethods: payload.mfaMethods,
419
+ allowedMethods: payload.allowedMethods
420
+ };
421
+ }
422
+ catch {
423
+ return null;
424
+ }
425
+ }
426
+ /**
427
+ * Complete MFA setup and issue full authentication tokens
428
+ * Used when a user sets up MFA during the login flow (when org requires MFA)
429
+ */
430
+ async completeMFASetupAndLogin(setupToken, options = {}) {
431
+ try {
432
+ // Verify MFA setup token
433
+ const payload = await this.deps.cryptoAdapter.verifyJWT(setupToken, this.deps.jwtSecret);
434
+ if (!payload || payload.type !== 'mfa_setup') {
435
+ return null;
436
+ }
437
+ // Get user
438
+ const user = await this.deps.getUser(payload.userId);
439
+ if (!user || !user.isActive) {
440
+ return null;
441
+ }
442
+ // Verify user now has MFA enabled
443
+ if (!user.mfa?.enabled || !user.mfa.methods?.some(m => m.enabled && m.verified)) {
444
+ this.deps.logger.warn('MFA setup completion attempted but MFA not enabled', {
445
+ userId: user.id
446
+ });
447
+ return null;
448
+ }
449
+ this.deps.logger.info('MFA setup completed, issuing auth tokens', {
450
+ userId: user.id,
451
+ username: user.username
452
+ });
453
+ // Issue full tokens
454
+ return this.issueFullTokens(user, options);
455
+ }
456
+ catch (error) {
457
+ this.deps.logger.error('MFA setup completion failed', {
458
+ error: error instanceof Error ? error.message : String(error)
459
+ });
460
+ return null;
461
+ }
462
+ }
463
+ /**
464
+ * Verify a backup code for a user
465
+ * Returns result with remaining codes if valid
466
+ */
467
+ async verifyBackupCode(userId, code) {
468
+ const user = await this.deps.getUser(userId);
469
+ if (!user || !user.mfa?.backupCodes) {
470
+ return { valid: false, remainingCodes: [] };
471
+ }
472
+ const totpService = this.deps.getTOTPService();
473
+ const result = totpService.verifyBackupCode(user.mfa.backupCodes, code);
474
+ if (result.valid) {
475
+ // Update user with remaining codes
476
+ await this.deps.updateUser(userId, {
477
+ mfa: {
478
+ ...user.mfa,
479
+ backupCodes: result.remainingCodes
480
+ }
481
+ });
482
+ this.deps.logger.info('Backup code used', {
483
+ userId,
484
+ remainingCodes: result.remainingCodes.length
485
+ });
486
+ }
487
+ return result;
488
+ }
489
+ async refreshAuthToken(refreshToken) {
490
+ try {
491
+ // Verify the refresh token
492
+ const session = await this.verifyAuthToken(refreshToken);
493
+ if (!session) {
494
+ return null;
495
+ }
496
+ // Get the user
497
+ const user = await this.deps.getUser(session.userId);
498
+ if (!user || !user.isActive) {
499
+ return null;
500
+ }
501
+ // Extract rememberMe flag from the refresh token payload
502
+ const decoded = await this.deps.cryptoAdapter.verifyJWT(refreshToken, this.deps.jwtSecret);
503
+ const rememberMe = decoded?.rememberMe === true;
504
+ // Generate new tokens preserving the rememberMe state
505
+ const securityConfig = this.deps.config.security?.tokens;
506
+ const tokenExpiresIn = rememberMe
507
+ ? (securityConfig?.rememberMeTtl || '7d')
508
+ : (securityConfig?.accessTokenTtl || '2h');
509
+ const refreshTokenExpiresIn = rememberMe
510
+ ? '30d'
511
+ : (securityConfig?.refreshTokenTtl || '7d');
512
+ const newToken = await this.generateAuthToken(user, tokenExpiresIn, rememberMe);
513
+ const newRefreshToken = await this.generateAuthToken(user, refreshTokenExpiresIn, rememberMe);
514
+ // Get the new token's expiration time
515
+ const newSession = await this.verifyAuthToken(newToken);
516
+ const expiresAt = newSession?.expiresAt || new Date(Date.now() + 2 * 60 * 60 * 1000).toISOString();
517
+ return {
518
+ token: newToken,
519
+ refreshToken: newRefreshToken,
520
+ user,
521
+ expiresAt
522
+ };
523
+ }
524
+ catch (error) {
525
+ this.deps.logger.error('Failed to refresh auth token', { error: error instanceof Error ? error.message : String(error) });
526
+ return null;
527
+ }
528
+ }
529
+ }
530
+ //# sourceMappingURL=auth-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-service.js","sourceRoot":"","sources":["../../../src/core/services/auth-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import type { TrokkyLogger } from '../utils/logger.js';
2
+ import { type CaptchaProvider, type CaptchaProviderType, type CaptchaProtectedEndpoint, type CaptchaVerificationResult } from '../security/captcha/index.js';
3
+ import { TrokkyConfig } from '../types/index.js';
4
+ export interface CaptchaServiceDependencies {
5
+ config: TrokkyConfig;
6
+ logger: TrokkyLogger;
7
+ }
8
+ /**
9
+ * CAPTCHA provider configuration and token verification.
10
+ */
11
+ export declare class CaptchaService {
12
+ private readonly deps;
13
+ private captchaProvider;
14
+ constructor(deps: CaptchaServiceDependencies);
15
+ /**
16
+ * Get or create the CAPTCHA provider instance
17
+ */
18
+ getCaptchaProvider(): CaptchaProvider | null;
19
+ /**
20
+ * Check if CAPTCHA is configured
21
+ */
22
+ isCaptchaConfigured(): boolean;
23
+ /**
24
+ * Check if CAPTCHA is required for a specific endpoint
25
+ * @param endpoint - The endpoint to check ('login', 'passwordResetRequest', 'passwordResetVerify')
26
+ */
27
+ isCaptchaRequiredFor(endpoint: CaptchaProtectedEndpoint): boolean;
28
+ /**
29
+ * Get CAPTCHA configuration for frontend use
30
+ * Returns public config (site key, provider, options) - never the secret key
31
+ */
32
+ getCaptchaConfig(): {
33
+ provider: CaptchaProviderType;
34
+ siteKey: string;
35
+ options?: Record<string, unknown>;
36
+ } | null;
37
+ /**
38
+ * Verify a CAPTCHA token
39
+ * @param token - The CAPTCHA token from the frontend widget
40
+ * @param remoteIp - Optional client IP address for verification
41
+ */
42
+ verifyCaptcha(token: string, remoteIp?: string): Promise<CaptchaVerificationResult>;
43
+ }
44
+ //# sourceMappingURL=captcha-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captcha-service.d.ts","sourceRoot":"","sources":["../../../src/core/services/captcha-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC/B,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,YAAY,CAAA;CACrB;AAED;;GAEG;AACH,qBAAa,cAAc;IAGb,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,eAAe,CAA+B;gBAEzB,IAAI,EAAE,0BAA0B;IAE7D;;OAEG;IACI,kBAAkB,IAAI,eAAe,GAAG,IAAI;IAmBnD;;OAEG;IACI,mBAAmB,IAAI,OAAO;IAKrC;;;OAGG;IACI,oBAAoB,CAAC,QAAQ,EAAE,wBAAwB,GAAG,OAAO;IAQxE;;;OAGG;IACI,gBAAgB,IAAI;QAAE,QAAQ,EAAE,mBAAmB,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI;IAUvH;;;;OAIG;IACU,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC;CASjG"}