@webda/core 4.0.0-beta.2 → 4.0.0-beta.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 (756) hide show
  1. package/README.md +252 -0
  2. package/lib/application/application.d.ts +437 -0
  3. package/lib/application/application.d.ts.map +1 -0
  4. package/lib/application/application.js +792 -0
  5. package/lib/application/application.js.map +1 -0
  6. package/lib/application/hooks.d.ts +34 -0
  7. package/lib/application/hooks.d.ts.map +1 -0
  8. package/lib/application/hooks.js +57 -0
  9. package/lib/application/hooks.js.map +1 -0
  10. package/lib/application/iapplication.d.ts +43 -0
  11. package/lib/application/iapplication.d.ts.map +1 -0
  12. package/lib/application/iapplication.js +2 -0
  13. package/lib/application/iapplication.js.map +1 -0
  14. package/lib/application/iconfiguration.d.ts +176 -0
  15. package/lib/application/iconfiguration.d.ts.map +1 -0
  16. package/lib/application/iconfiguration.js +8 -0
  17. package/lib/application/iconfiguration.js.map +1 -0
  18. package/lib/application/runner.d.ts +8 -0
  19. package/lib/application/runner.d.ts.map +1 -0
  20. package/lib/application/runner.js +26 -0
  21. package/lib/application/runner.js.map +1 -0
  22. package/lib/{unpackedapplication.d.ts → application/unpackedapplication.d.ts} +43 -23
  23. package/lib/application/unpackedapplication.d.ts.map +1 -0
  24. package/lib/application/unpackedapplication.js +492 -0
  25. package/lib/application/unpackedapplication.js.map +1 -0
  26. package/lib/bin/cli-phase.d.ts +28 -0
  27. package/lib/bin/cli-phase.d.ts.map +1 -0
  28. package/lib/bin/cli-phase.js +44 -0
  29. package/lib/bin/cli-phase.js.map +1 -0
  30. package/lib/bin/cli.d.ts +161 -0
  31. package/lib/bin/cli.d.ts.map +1 -0
  32. package/lib/bin/cli.js +828 -0
  33. package/lib/bin/cli.js.map +1 -0
  34. package/lib/bin/launcher.d.ts +3 -0
  35. package/lib/bin/launcher.d.ts.map +1 -0
  36. package/lib/bin/launcher.js +50 -0
  37. package/lib/bin/launcher.js.map +1 -0
  38. package/lib/cache/cache.d.ts +33 -0
  39. package/lib/cache/cache.d.ts.map +1 -0
  40. package/lib/cache/cache.js +8 -0
  41. package/lib/cache/cache.js.map +1 -0
  42. package/lib/{services/configuration.d.ts → configurations/configuration.service.d.ts} +58 -58
  43. package/lib/configurations/configuration.service.d.ts.map +1 -0
  44. package/lib/configurations/configuration.service.js +248 -0
  45. package/lib/configurations/configuration.service.js.map +1 -0
  46. package/lib/configurations/fileconfiguration.service.d.ts +30 -0
  47. package/lib/configurations/fileconfiguration.service.d.ts.map +1 -0
  48. package/lib/configurations/fileconfiguration.service.js +65 -0
  49. package/lib/configurations/fileconfiguration.service.js.map +1 -0
  50. package/lib/configurations/kubernetesconfiguration.service.d.ts +43 -0
  51. package/lib/configurations/kubernetesconfiguration.service.d.ts.map +1 -0
  52. package/lib/configurations/kubernetesconfiguration.service.js +83 -0
  53. package/lib/configurations/kubernetesconfiguration.service.js.map +1 -0
  54. package/lib/contexts/execution.d.ts +33 -0
  55. package/lib/contexts/execution.d.ts.map +1 -0
  56. package/lib/contexts/execution.js +73 -0
  57. package/lib/contexts/execution.js.map +1 -0
  58. package/lib/contexts/globalcontext.d.ts +29 -0
  59. package/lib/contexts/globalcontext.d.ts.map +1 -0
  60. package/lib/contexts/globalcontext.js +38 -0
  61. package/lib/contexts/globalcontext.js.map +1 -0
  62. package/lib/{utils → contexts}/httpcontext.d.ts +44 -19
  63. package/lib/contexts/httpcontext.d.ts.map +1 -0
  64. package/lib/{utils → contexts}/httpcontext.js +95 -27
  65. package/lib/contexts/httpcontext.js.map +1 -0
  66. package/lib/contexts/icontext.d.ts +236 -0
  67. package/lib/contexts/icontext.d.ts.map +1 -0
  68. package/lib/contexts/icontext.js +230 -0
  69. package/lib/contexts/icontext.js.map +1 -0
  70. package/lib/contexts/operationcontext.d.ts +179 -0
  71. package/lib/contexts/operationcontext.d.ts.map +1 -0
  72. package/lib/contexts/operationcontext.js +358 -0
  73. package/lib/contexts/operationcontext.js.map +1 -0
  74. package/lib/contexts/simplecontext.d.ts +31 -0
  75. package/lib/contexts/simplecontext.d.ts.map +1 -0
  76. package/lib/contexts/simplecontext.js +45 -0
  77. package/lib/contexts/simplecontext.js.map +1 -0
  78. package/lib/contexts/webcontext.d.ts +218 -0
  79. package/lib/contexts/webcontext.d.ts.map +1 -0
  80. package/lib/contexts/webcontext.js +389 -0
  81. package/lib/contexts/webcontext.js.map +1 -0
  82. package/lib/core/authorizer.d.ts +23 -0
  83. package/lib/core/authorizer.d.ts.map +1 -0
  84. package/lib/core/authorizer.js +17 -0
  85. package/lib/core/authorizer.js.map +1 -0
  86. package/lib/core/core.d.ts +225 -0
  87. package/lib/core/core.d.ts.map +1 -0
  88. package/lib/core/core.js +576 -0
  89. package/lib/core/core.js.map +1 -0
  90. package/lib/core/hooks.d.ts +72 -0
  91. package/lib/core/hooks.d.ts.map +1 -0
  92. package/lib/core/hooks.js +73 -0
  93. package/lib/core/hooks.js.map +1 -0
  94. package/lib/core/icore.d.ts +249 -0
  95. package/lib/core/icore.d.ts.map +1 -0
  96. package/lib/core/icore.js +15 -0
  97. package/lib/core/icore.js.map +1 -0
  98. package/lib/core/instancestorage.d.ts +61 -0
  99. package/lib/core/instancestorage.d.ts.map +1 -0
  100. package/lib/core/instancestorage.js +75 -0
  101. package/lib/core/instancestorage.js.map +1 -0
  102. package/lib/core/operations.d.ts +181 -0
  103. package/lib/core/operations.d.ts.map +1 -0
  104. package/lib/core/operations.js +559 -0
  105. package/lib/core/operations.js.map +1 -0
  106. package/lib/errors/errors.d.ts +126 -0
  107. package/lib/errors/errors.d.ts.map +1 -0
  108. package/lib/errors/errors.js +165 -0
  109. package/lib/errors/errors.js.map +1 -0
  110. package/lib/events/asynceventemitter.d.ts +159 -0
  111. package/lib/events/asynceventemitter.d.ts.map +1 -0
  112. package/lib/events/asynceventemitter.js +152 -0
  113. package/lib/events/asynceventemitter.js.map +1 -0
  114. package/lib/events/events.d.ts +112 -0
  115. package/lib/events/events.d.ts.map +1 -0
  116. package/lib/events/events.js +45 -0
  117. package/lib/events/events.js.map +1 -0
  118. package/lib/index.d.ts +82 -53
  119. package/lib/index.d.ts.map +1 -1
  120. package/lib/index.js +81 -62
  121. package/lib/index.js.map +1 -1
  122. package/lib/loggers/console.service.d.ts +24 -0
  123. package/lib/loggers/console.service.d.ts.map +1 -0
  124. package/lib/loggers/console.service.js +30 -0
  125. package/lib/loggers/console.service.js.map +1 -0
  126. package/lib/loggers/file.service.d.ts +25 -0
  127. package/lib/loggers/file.service.d.ts.map +1 -0
  128. package/lib/loggers/file.service.js +33 -0
  129. package/lib/loggers/file.service.js.map +1 -0
  130. package/lib/loggers/hooks.d.ts +20 -0
  131. package/lib/loggers/hooks.d.ts.map +1 -0
  132. package/lib/loggers/hooks.js +40 -0
  133. package/lib/loggers/hooks.js.map +1 -0
  134. package/lib/loggers/ilogger.d.ts +76 -0
  135. package/lib/loggers/ilogger.d.ts.map +1 -0
  136. package/lib/loggers/ilogger.js +108 -0
  137. package/lib/loggers/ilogger.js.map +1 -0
  138. package/lib/loggers/logger.d.ts +13 -0
  139. package/lib/loggers/logger.d.ts.map +1 -0
  140. package/lib/loggers/logger.js +18 -0
  141. package/lib/loggers/logger.js.map +1 -0
  142. package/lib/loggers/memory.service.d.ts +18 -0
  143. package/lib/loggers/memory.service.d.ts.map +1 -0
  144. package/lib/loggers/memory.service.js +21 -0
  145. package/lib/loggers/memory.service.js.map +1 -0
  146. package/lib/loggers/params.d.ts +47 -0
  147. package/lib/loggers/params.d.ts.map +1 -0
  148. package/lib/loggers/params.js +56 -0
  149. package/lib/loggers/params.js.map +1 -0
  150. package/lib/metrics/metrics.d.ts +25 -0
  151. package/lib/metrics/metrics.d.ts.map +1 -0
  152. package/lib/metrics/metrics.js +51 -0
  153. package/lib/metrics/metrics.js.map +1 -0
  154. package/lib/models/aclmodel.d.ts +20 -76
  155. package/lib/models/aclmodel.d.ts.map +1 -1
  156. package/lib/models/aclmodel.js +27 -203
  157. package/lib/models/aclmodel.js.map +1 -1
  158. package/lib/models/coremodel.model.d.ts +5 -0
  159. package/lib/models/coremodel.model.d.ts.map +1 -0
  160. package/lib/models/coremodel.model.js +5 -0
  161. package/lib/models/coremodel.model.js.map +1 -0
  162. package/lib/models/decorator.d.ts +63 -0
  163. package/lib/models/decorator.d.ts.map +1 -0
  164. package/lib/models/decorator.js +63 -0
  165. package/lib/models/decorator.js.map +1 -0
  166. package/lib/models/deployment.d.ts +1 -1
  167. package/lib/models/deployment.d.ts.map +1 -1
  168. package/lib/models/ident.model.d.ts +89 -0
  169. package/lib/models/ident.model.d.ts.map +1 -0
  170. package/lib/models/ident.model.js +115 -0
  171. package/lib/models/ident.model.js.map +1 -0
  172. package/lib/models/ownermodel.model.d.ts +68 -0
  173. package/lib/models/ownermodel.model.d.ts.map +1 -0
  174. package/lib/models/ownermodel.model.js +112 -0
  175. package/lib/models/ownermodel.model.js.map +1 -0
  176. package/lib/models/registry.model.d.ts +76 -0
  177. package/lib/models/registry.model.d.ts.map +1 -0
  178. package/lib/models/registry.model.js +104 -0
  179. package/lib/models/registry.model.js.map +1 -0
  180. package/lib/models/rolemodel.model.d.ts +28 -0
  181. package/lib/models/rolemodel.model.d.ts.map +1 -0
  182. package/lib/models/{rolemodel.js → rolemodel.model.js} +23 -5
  183. package/lib/models/rolemodel.model.js.map +1 -0
  184. package/lib/models/simpleuser.model.d.ts +78 -0
  185. package/lib/models/simpleuser.model.d.ts.map +1 -0
  186. package/lib/models/simpleuser.model.js +123 -0
  187. package/lib/models/simpleuser.model.js.map +1 -0
  188. package/lib/models/types.d.ts +113 -0
  189. package/lib/models/types.d.ts.map +1 -0
  190. package/lib/models/types.js +2 -0
  191. package/lib/models/types.js.map +1 -0
  192. package/lib/models/user.model.d.ts +103 -0
  193. package/lib/models/user.model.d.ts.map +1 -0
  194. package/lib/models/user.model.js +125 -0
  195. package/lib/models/user.model.js.map +1 -0
  196. package/lib/queues/{memoryqueue.d.ts → memoryqueue.service.d.ts} +26 -13
  197. package/lib/queues/memoryqueue.service.d.ts.map +1 -0
  198. package/lib/queues/{memoryqueue.js → memoryqueue.service.js} +55 -31
  199. package/lib/queues/memoryqueue.service.js.map +1 -0
  200. package/lib/queues/pubsubservice.d.ts +8 -6
  201. package/lib/queues/pubsubservice.d.ts.map +1 -1
  202. package/lib/queues/pubsubservice.js +5 -4
  203. package/lib/queues/pubsubservice.js.map +1 -1
  204. package/lib/queues/queueservice.d.ts +9 -11
  205. package/lib/queues/queueservice.d.ts.map +1 -1
  206. package/lib/queues/queueservice.js +41 -13
  207. package/lib/queues/queueservice.js.map +1 -1
  208. package/lib/rest/hooks.d.ts +8 -0
  209. package/lib/rest/hooks.d.ts.map +1 -0
  210. package/lib/rest/hooks.js +10 -0
  211. package/lib/rest/hooks.js.map +1 -0
  212. package/lib/rest/irest.d.ts +212 -0
  213. package/lib/rest/irest.d.ts.map +1 -0
  214. package/lib/rest/irest.js +39 -0
  215. package/lib/rest/irest.js.map +1 -0
  216. package/lib/rest/originfilter.d.ts +38 -0
  217. package/lib/rest/originfilter.d.ts.map +1 -0
  218. package/lib/rest/originfilter.js +61 -0
  219. package/lib/rest/originfilter.js.map +1 -0
  220. package/lib/rest/restoperationstransport.service.d.ts +193 -0
  221. package/lib/rest/restoperationstransport.service.d.ts.map +1 -0
  222. package/lib/rest/restoperationstransport.service.js +780 -0
  223. package/lib/rest/restoperationstransport.service.js.map +1 -0
  224. package/lib/rest/router.service.d.ts +244 -0
  225. package/lib/rest/router.service.d.ts.map +1 -0
  226. package/lib/rest/router.service.js +843 -0
  227. package/lib/rest/router.service.js.map +1 -0
  228. package/lib/schemas/hooks.d.ts +48 -0
  229. package/lib/schemas/hooks.d.ts.map +1 -0
  230. package/lib/schemas/hooks.js +152 -0
  231. package/lib/schemas/hooks.js.map +1 -0
  232. package/lib/services/audit.model.d.ts +208 -0
  233. package/lib/services/audit.model.d.ts.map +1 -0
  234. package/lib/services/audit.model.js +431 -0
  235. package/lib/services/audit.model.js.map +1 -0
  236. package/lib/services/{authentication.d.ts → authentication.service.d.ts} +140 -59
  237. package/lib/services/authentication.service.d.ts.map +1 -0
  238. package/lib/services/authentication.service.js +932 -0
  239. package/lib/services/authentication.service.js.map +1 -0
  240. package/lib/services/binary.service.d.ts +808 -0
  241. package/lib/services/binary.service.d.ts.map +1 -0
  242. package/lib/services/binary.service.js +1365 -0
  243. package/lib/services/binary.service.js.map +1 -0
  244. package/lib/services/cloudbinary.d.ts +17 -12
  245. package/lib/services/cloudbinary.d.ts.map +1 -1
  246. package/lib/services/cloudbinary.js +23 -17
  247. package/lib/services/cloudbinary.js.map +1 -1
  248. package/lib/services/command.d.ts +118 -0
  249. package/lib/services/command.d.ts.map +1 -0
  250. package/lib/services/command.js +97 -0
  251. package/lib/services/command.js.map +1 -0
  252. package/lib/services/cron.service.d.ts +142 -0
  253. package/lib/services/cron.service.d.ts.map +1 -0
  254. package/lib/services/cron.service.js +291 -0
  255. package/lib/services/cron.service.js.map +1 -0
  256. package/lib/services/{cryptoservice.d.ts → cryptoservice.service.d.ts} +75 -141
  257. package/lib/services/cryptoservice.service.d.ts.map +1 -0
  258. package/lib/services/cryptoservice.service.js +527 -0
  259. package/lib/services/cryptoservice.service.js.map +1 -0
  260. package/lib/services/debugmailer.service.d.ts +49 -0
  261. package/lib/services/debugmailer.service.d.ts.map +1 -0
  262. package/lib/services/{debugmailer.js → debugmailer.service.js} +25 -10
  263. package/lib/services/debugmailer.service.js.map +1 -0
  264. package/lib/services/domainservice.service.d.ts +203 -0
  265. package/lib/services/domainservice.service.d.ts.map +1 -0
  266. package/lib/services/domainservice.service.js +600 -0
  267. package/lib/services/domainservice.service.js.map +1 -0
  268. package/lib/services/httpserver.service.d.ts +248 -0
  269. package/lib/services/httpserver.service.d.ts.map +1 -0
  270. package/lib/services/httpserver.service.js +673 -0
  271. package/lib/services/httpserver.service.js.map +1 -0
  272. package/lib/services/iauthentication.d.ts +9 -0
  273. package/lib/services/iauthentication.d.ts.map +1 -0
  274. package/lib/services/iauthentication.js +2 -0
  275. package/lib/services/iauthentication.js.map +1 -0
  276. package/lib/services/icryptoservice.d.ts +127 -0
  277. package/lib/services/icryptoservice.d.ts.map +1 -0
  278. package/lib/services/icryptoservice.js +68 -0
  279. package/lib/services/icryptoservice.js.map +1 -0
  280. package/lib/services/imailer.d.ts +17 -0
  281. package/lib/services/imailer.d.ts.map +1 -0
  282. package/lib/services/imailer.js +2 -0
  283. package/lib/services/imailer.js.map +1 -0
  284. package/lib/services/iservice.d.ts +104 -0
  285. package/lib/services/iservice.d.ts.map +1 -0
  286. package/lib/services/iservice.js +63 -0
  287. package/lib/services/iservice.js.map +1 -0
  288. package/lib/services/mailer.service.d.ts +220 -0
  289. package/lib/services/mailer.service.d.ts.map +1 -0
  290. package/lib/services/mailer.service.js +251 -0
  291. package/lib/services/mailer.service.js.map +1 -0
  292. package/lib/services/{notificationservice.d.ts → notificationservice.service.d.ts} +10 -11
  293. package/lib/services/notificationservice.service.d.ts.map +1 -0
  294. package/lib/services/{notificationservice.js → notificationservice.service.js} +24 -12
  295. package/lib/services/notificationservice.service.js.map +1 -0
  296. package/lib/services/oauth.d.ts +52 -28
  297. package/lib/services/oauth.d.ts.map +1 -1
  298. package/lib/services/oauth.js +365 -254
  299. package/lib/services/oauth.js.map +1 -1
  300. package/lib/services/operationstransport.d.ts +65 -0
  301. package/lib/services/operationstransport.d.ts.map +1 -0
  302. package/lib/services/operationstransport.js +103 -0
  303. package/lib/services/operationstransport.js.map +1 -0
  304. package/lib/services/{prometheus.d.ts → prometheus.service.d.ts} +13 -12
  305. package/lib/services/prometheus.service.d.ts.map +1 -0
  306. package/lib/services/prometheus.service.js +203 -0
  307. package/lib/services/prometheus.service.js.map +1 -0
  308. package/lib/services/{resource.d.ts → resource.service.d.ts} +34 -15
  309. package/lib/services/resource.service.d.ts.map +1 -0
  310. package/lib/services/resource.service.js +301 -0
  311. package/lib/services/resource.service.js.map +1 -0
  312. package/lib/services/service.d.ts +87 -188
  313. package/lib/services/service.d.ts.map +1 -1
  314. package/lib/services/service.js +407 -422
  315. package/lib/services/service.js.map +1 -1
  316. package/lib/services/servicecommands.d.ts +99 -0
  317. package/lib/services/servicecommands.d.ts.map +1 -0
  318. package/lib/services/servicecommands.js +165 -0
  319. package/lib/services/servicecommands.js.map +1 -0
  320. package/lib/services/serviceparameters.d.ts +33 -0
  321. package/lib/services/serviceparameters.d.ts.map +1 -0
  322. package/lib/services/serviceparameters.js +79 -0
  323. package/lib/services/serviceparameters.js.map +1 -0
  324. package/lib/{utils → session}/cookie.d.ts +32 -19
  325. package/lib/session/cookie.d.ts.map +1 -0
  326. package/lib/{utils → session}/cookie.js +76 -23
  327. package/lib/session/cookie.js.map +1 -0
  328. package/lib/session/manager.model.d.ts +71 -0
  329. package/lib/session/manager.model.d.ts.map +1 -0
  330. package/lib/session/manager.model.js +155 -0
  331. package/lib/session/manager.model.js.map +1 -0
  332. package/lib/session/session.d.ts +57 -0
  333. package/lib/session/session.d.ts.map +1 -0
  334. package/lib/session/session.js +126 -0
  335. package/lib/session/session.js.map +1 -0
  336. package/lib/stores/istore.d.ts +99 -0
  337. package/lib/stores/istore.d.ts.map +1 -0
  338. package/lib/stores/istore.js +26 -0
  339. package/lib/stores/istore.js.map +1 -0
  340. package/lib/stores/memory.service.d.ts +114 -0
  341. package/lib/stores/memory.service.d.ts.map +1 -0
  342. package/lib/stores/memory.service.js +343 -0
  343. package/lib/stores/memory.service.js.map +1 -0
  344. package/lib/stores/store.d.ts +126 -626
  345. package/lib/stores/store.d.ts.map +1 -1
  346. package/lib/stores/store.js +257 -1117
  347. package/lib/stores/store.js.map +1 -1
  348. package/lib/templates/templates.d.ts +39 -0
  349. package/lib/templates/templates.d.ts.map +1 -0
  350. package/lib/templates/templates.js +92 -0
  351. package/lib/templates/templates.js.map +1 -0
  352. package/lib/test/application.d.ts +174 -0
  353. package/lib/test/application.d.ts.map +1 -0
  354. package/lib/test/application.js +288 -0
  355. package/lib/test/application.js.map +1 -0
  356. package/lib/test/asyncstorage.d.ts +16 -0
  357. package/lib/test/asyncstorage.d.ts.map +1 -0
  358. package/lib/test/asyncstorage.js +32 -0
  359. package/lib/test/asyncstorage.js.map +1 -0
  360. package/lib/test/core.d.ts +63 -0
  361. package/lib/test/core.d.ts.map +1 -0
  362. package/lib/test/core.js +190 -0
  363. package/lib/test/core.js.map +1 -0
  364. package/lib/test/index.d.ts +7 -0
  365. package/lib/test/index.d.ts.map +1 -0
  366. package/lib/test/index.js +8 -0
  367. package/lib/test/index.js.map +1 -0
  368. package/lib/test/internal.d.ts +34 -0
  369. package/lib/test/internal.d.ts.map +1 -0
  370. package/lib/test/internal.js +156 -0
  371. package/lib/test/internal.js.map +1 -0
  372. package/lib/test/objects.d.ts +318 -0
  373. package/lib/test/objects.d.ts.map +1 -0
  374. package/lib/test/objects.js +443 -0
  375. package/lib/test/objects.js.map +1 -0
  376. package/lib/utils/abstractdeployer.d.ts +4 -2
  377. package/lib/utils/abstractdeployer.d.ts.map +1 -1
  378. package/lib/utils/abstractdeployer.js +3 -0
  379. package/lib/utils/abstractdeployer.js.map +1 -1
  380. package/package.json +85 -60
  381. package/test/cachedapp/webda.config.json +1 -5
  382. package/test/config-cached.json +1 -5
  383. package/test/config.json +0 -9
  384. package/test/my-cnf.json +9 -0
  385. package/webda.module.json +3463 -2482
  386. package/lib/application.d.ts +0 -888
  387. package/lib/application.d.ts.map +0 -1
  388. package/lib/application.js +0 -768
  389. package/lib/application.js.map +0 -1
  390. package/lib/application.spec.d.ts +0 -2
  391. package/lib/application.spec.d.ts.map +0 -1
  392. package/lib/application.spec.js +0 -248
  393. package/lib/application.spec.js.map +0 -1
  394. package/lib/core.d.ts +0 -743
  395. package/lib/core.d.ts.map +0 -1
  396. package/lib/core.js +0 -1334
  397. package/lib/core.js.map +0 -1
  398. package/lib/core.spec.d.ts +0 -2
  399. package/lib/core.spec.d.ts.map +0 -1
  400. package/lib/core.spec.js +0 -790
  401. package/lib/core.spec.js.map +0 -1
  402. package/lib/errors.d.ts +0 -64
  403. package/lib/errors.d.ts.map +0 -1
  404. package/lib/errors.js +0 -97
  405. package/lib/errors.js.map +0 -1
  406. package/lib/errors.spec.d.ts +0 -2
  407. package/lib/errors.spec.d.ts.map +0 -1
  408. package/lib/errors.spec.js +0 -33
  409. package/lib/errors.spec.js.map +0 -1
  410. package/lib/models/aclmodel.spec.d.ts +0 -2
  411. package/lib/models/aclmodel.spec.d.ts.map +0 -1
  412. package/lib/models/aclmodel.spec.js +0 -187
  413. package/lib/models/aclmodel.spec.js.map +0 -1
  414. package/lib/models/coremodel.d.ts +0 -896
  415. package/lib/models/coremodel.d.ts.map +0 -1
  416. package/lib/models/coremodel.js +0 -1214
  417. package/lib/models/coremodel.js.map +0 -1
  418. package/lib/models/coremodel.spec.d.ts +0 -2
  419. package/lib/models/coremodel.spec.d.ts.map +0 -1
  420. package/lib/models/coremodel.spec.js +0 -464
  421. package/lib/models/coremodel.spec.js.map +0 -1
  422. package/lib/models/ident.d.ts +0 -68
  423. package/lib/models/ident.d.ts.map +0 -1
  424. package/lib/models/ident.js +0 -26
  425. package/lib/models/ident.js.map +0 -1
  426. package/lib/models/ident.spec.d.ts +0 -2
  427. package/lib/models/ident.spec.d.ts.map +0 -1
  428. package/lib/models/ident.spec.js +0 -24
  429. package/lib/models/ident.spec.js.map +0 -1
  430. package/lib/models/ownermodel.d.ts +0 -51
  431. package/lib/models/ownermodel.d.ts.map +0 -1
  432. package/lib/models/ownermodel.js +0 -65
  433. package/lib/models/ownermodel.js.map +0 -1
  434. package/lib/models/ownermodel.spec.d.ts +0 -2
  435. package/lib/models/ownermodel.spec.d.ts.map +0 -1
  436. package/lib/models/ownermodel.spec.js +0 -215
  437. package/lib/models/ownermodel.spec.js.map +0 -1
  438. package/lib/models/relations.d.ts +0 -182
  439. package/lib/models/relations.d.ts.map +0 -1
  440. package/lib/models/relations.js +0 -157
  441. package/lib/models/relations.js.map +0 -1
  442. package/lib/models/relations.spec.d.ts +0 -14
  443. package/lib/models/relations.spec.d.ts.map +0 -1
  444. package/lib/models/relations.spec.js +0 -217
  445. package/lib/models/relations.spec.js.map +0 -1
  446. package/lib/models/rolemodel.d.ts +0 -11
  447. package/lib/models/rolemodel.d.ts.map +0 -1
  448. package/lib/models/rolemodel.js.map +0 -1
  449. package/lib/models/rolemodel.spec.d.ts +0 -2
  450. package/lib/models/rolemodel.spec.d.ts.map +0 -1
  451. package/lib/models/rolemodel.spec.js +0 -90
  452. package/lib/models/rolemodel.spec.js.map +0 -1
  453. package/lib/models/simpleuser.d.ts +0 -47
  454. package/lib/models/simpleuser.d.ts.map +0 -1
  455. package/lib/models/simpleuser.js +0 -84
  456. package/lib/models/simpleuser.js.map +0 -1
  457. package/lib/models/test.d.ts +0 -11
  458. package/lib/models/test.d.ts.map +0 -1
  459. package/lib/models/test.js +0 -7
  460. package/lib/models/test.js.map +0 -1
  461. package/lib/models/user.d.ts +0 -67
  462. package/lib/models/user.d.ts.map +0 -1
  463. package/lib/models/user.js +0 -86
  464. package/lib/models/user.js.map +0 -1
  465. package/lib/models/user.spec.d.ts +0 -2
  466. package/lib/models/user.spec.d.ts.map +0 -1
  467. package/lib/models/user.spec.js +0 -89
  468. package/lib/models/user.spec.js.map +0 -1
  469. package/lib/queues/filequeue.d.ts +0 -59
  470. package/lib/queues/filequeue.d.ts.map +0 -1
  471. package/lib/queues/filequeue.js +0 -131
  472. package/lib/queues/filequeue.js.map +0 -1
  473. package/lib/queues/filequeue.spec.d.ts +0 -2
  474. package/lib/queues/filequeue.spec.d.ts.map +0 -1
  475. package/lib/queues/filequeue.spec.js +0 -84
  476. package/lib/queues/filequeue.spec.js.map +0 -1
  477. package/lib/queues/memoryqueue.d.ts.map +0 -1
  478. package/lib/queues/memoryqueue.js.map +0 -1
  479. package/lib/queues/memoryqueue.spec.d.ts +0 -2
  480. package/lib/queues/memoryqueue.spec.d.ts.map +0 -1
  481. package/lib/queues/memoryqueue.spec.js +0 -203
  482. package/lib/queues/memoryqueue.spec.js.map +0 -1
  483. package/lib/queues/queue.spec.d.ts +0 -6
  484. package/lib/queues/queue.spec.d.ts.map +0 -1
  485. package/lib/queues/queue.spec.js +0 -55
  486. package/lib/queues/queue.spec.js.map +0 -1
  487. package/lib/rest/restdomainservice.d.ts +0 -63
  488. package/lib/rest/restdomainservice.d.ts.map +0 -1
  489. package/lib/rest/restdomainservice.js +0 -687
  490. package/lib/rest/restdomainservice.js.map +0 -1
  491. package/lib/rest/restdomainservice.spec.d.ts +0 -2
  492. package/lib/rest/restdomainservice.spec.d.ts.map +0 -1
  493. package/lib/rest/restdomainservice.spec.js +0 -124
  494. package/lib/rest/restdomainservice.spec.js.map +0 -1
  495. package/lib/rest/router.d.ts +0 -174
  496. package/lib/rest/router.d.ts.map +0 -1
  497. package/lib/rest/router.js +0 -429
  498. package/lib/rest/router.js.map +0 -1
  499. package/lib/rest/router.spec.d.ts +0 -2
  500. package/lib/rest/router.spec.d.ts.map +0 -1
  501. package/lib/rest/router.spec.js +0 -255
  502. package/lib/rest/router.spec.js.map +0 -1
  503. package/lib/services/asyncevents.d.ts +0 -152
  504. package/lib/services/asyncevents.d.ts.map +0 -1
  505. package/lib/services/asyncevents.js +0 -217
  506. package/lib/services/asyncevents.js.map +0 -1
  507. package/lib/services/asyncevents.spec.d.ts +0 -2
  508. package/lib/services/asyncevents.spec.d.ts.map +0 -1
  509. package/lib/services/asyncevents.spec.js +0 -118
  510. package/lib/services/asyncevents.spec.js.map +0 -1
  511. package/lib/services/authentication.d.ts.map +0 -1
  512. package/lib/services/authentication.js +0 -773
  513. package/lib/services/authentication.js.map +0 -1
  514. package/lib/services/authentication.spec.d.ts +0 -2
  515. package/lib/services/authentication.spec.d.ts.map +0 -1
  516. package/lib/services/authentication.spec.js +0 -458
  517. package/lib/services/authentication.spec.js.map +0 -1
  518. package/lib/services/binary.d.ts +0 -477
  519. package/lib/services/binary.d.ts.map +0 -1
  520. package/lib/services/binary.js +0 -617
  521. package/lib/services/binary.js.map +0 -1
  522. package/lib/services/binary.spec.d.ts +0 -41
  523. package/lib/services/binary.spec.d.ts.map +0 -1
  524. package/lib/services/binary.spec.js +0 -151
  525. package/lib/services/binary.spec.js.map +0 -1
  526. package/lib/services/cloudbinary.spec.d.ts +0 -6
  527. package/lib/services/cloudbinary.spec.d.ts.map +0 -1
  528. package/lib/services/cloudbinary.spec.js +0 -66
  529. package/lib/services/cloudbinary.spec.js.map +0 -1
  530. package/lib/services/configuration.d.ts.map +0 -1
  531. package/lib/services/configuration.js +0 -193
  532. package/lib/services/configuration.js.map +0 -1
  533. package/lib/services/configuration.spec.d.ts +0 -2
  534. package/lib/services/configuration.spec.d.ts.map +0 -1
  535. package/lib/services/configuration.spec.js +0 -130
  536. package/lib/services/configuration.spec.js.map +0 -1
  537. package/lib/services/cron.d.ts +0 -74
  538. package/lib/services/cron.d.ts.map +0 -1
  539. package/lib/services/cron.js +0 -141
  540. package/lib/services/cron.js.map +0 -1
  541. package/lib/services/cron.spec.d.ts +0 -2
  542. package/lib/services/cron.spec.d.ts.map +0 -1
  543. package/lib/services/cron.spec.js +0 -76
  544. package/lib/services/cron.spec.js.map +0 -1
  545. package/lib/services/cryptoservice.d.ts.map +0 -1
  546. package/lib/services/cryptoservice.js +0 -433
  547. package/lib/services/cryptoservice.js.map +0 -1
  548. package/lib/services/cryptoservice.spec.d.ts +0 -2
  549. package/lib/services/cryptoservice.spec.d.ts.map +0 -1
  550. package/lib/services/cryptoservice.spec.js +0 -177
  551. package/lib/services/cryptoservice.spec.js.map +0 -1
  552. package/lib/services/debugmailer.d.ts +0 -36
  553. package/lib/services/debugmailer.d.ts.map +0 -1
  554. package/lib/services/debugmailer.js.map +0 -1
  555. package/lib/services/debugmailer.spec.d.ts +0 -2
  556. package/lib/services/debugmailer.spec.d.ts.map +0 -1
  557. package/lib/services/debugmailer.spec.js +0 -32
  558. package/lib/services/debugmailer.spec.js.map +0 -1
  559. package/lib/services/domainservice.d.ts +0 -272
  560. package/lib/services/domainservice.d.ts.map +0 -1
  561. package/lib/services/domainservice.js +0 -651
  562. package/lib/services/domainservice.js.map +0 -1
  563. package/lib/services/domainservice.spec.d.ts +0 -2
  564. package/lib/services/domainservice.spec.d.ts.map +0 -1
  565. package/lib/services/domainservice.spec.js +0 -592
  566. package/lib/services/domainservice.spec.js.map +0 -1
  567. package/lib/services/filebinary.d.ts +0 -136
  568. package/lib/services/filebinary.d.ts.map +0 -1
  569. package/lib/services/filebinary.js +0 -373
  570. package/lib/services/filebinary.js.map +0 -1
  571. package/lib/services/filebinary.spec.d.ts +0 -25
  572. package/lib/services/filebinary.spec.d.ts.map +0 -1
  573. package/lib/services/filebinary.spec.js +0 -428
  574. package/lib/services/filebinary.spec.js.map +0 -1
  575. package/lib/services/fileconfiguration.d.ts +0 -23
  576. package/lib/services/fileconfiguration.d.ts.map +0 -1
  577. package/lib/services/fileconfiguration.js +0 -48
  578. package/lib/services/fileconfiguration.js.map +0 -1
  579. package/lib/services/fileconfiguration.spec.d.ts +0 -2
  580. package/lib/services/fileconfiguration.spec.d.ts.map +0 -1
  581. package/lib/services/fileconfiguration.spec.js +0 -215
  582. package/lib/services/fileconfiguration.spec.js.map +0 -1
  583. package/lib/services/invitationservice.d.ts +0 -223
  584. package/lib/services/invitationservice.d.ts.map +0 -1
  585. package/lib/services/invitationservice.js +0 -529
  586. package/lib/services/invitationservice.js.map +0 -1
  587. package/lib/services/invitationservice.spec.d.ts +0 -2
  588. package/lib/services/invitationservice.spec.d.ts.map +0 -1
  589. package/lib/services/invitationservice.spec.js +0 -567
  590. package/lib/services/invitationservice.spec.js.map +0 -1
  591. package/lib/services/kubernetesconfiguration.d.ts +0 -27
  592. package/lib/services/kubernetesconfiguration.d.ts.map +0 -1
  593. package/lib/services/kubernetesconfiguration.js +0 -52
  594. package/lib/services/kubernetesconfiguration.js.map +0 -1
  595. package/lib/services/kubernetesconfiguration.spec.d.ts +0 -2
  596. package/lib/services/kubernetesconfiguration.spec.d.ts.map +0 -1
  597. package/lib/services/kubernetesconfiguration.spec.js +0 -206
  598. package/lib/services/kubernetesconfiguration.spec.js.map +0 -1
  599. package/lib/services/mailer.d.ts +0 -166
  600. package/lib/services/mailer.d.ts.map +0 -1
  601. package/lib/services/mailer.js +0 -176
  602. package/lib/services/mailer.js.map +0 -1
  603. package/lib/services/mailer.spec.d.ts +0 -2
  604. package/lib/services/mailer.spec.d.ts.map +0 -1
  605. package/lib/services/mailer.spec.js +0 -158
  606. package/lib/services/mailer.spec.js.map +0 -1
  607. package/lib/services/notificationservice.d.ts.map +0 -1
  608. package/lib/services/notificationservice.js.map +0 -1
  609. package/lib/services/notificationservice.spec.d.ts +0 -2
  610. package/lib/services/notificationservice.spec.d.ts.map +0 -1
  611. package/lib/services/notificationservice.spec.js +0 -83
  612. package/lib/services/notificationservice.spec.js.map +0 -1
  613. package/lib/services/oauth.spec.d.ts +0 -2
  614. package/lib/services/oauth.spec.d.ts.map +0 -1
  615. package/lib/services/oauth.spec.js +0 -208
  616. package/lib/services/oauth.spec.js.map +0 -1
  617. package/lib/services/prometheus.d.ts.map +0 -1
  618. package/lib/services/prometheus.js +0 -160
  619. package/lib/services/prometheus.js.map +0 -1
  620. package/lib/services/prometheus.spec.d.ts +0 -2
  621. package/lib/services/prometheus.spec.d.ts.map +0 -1
  622. package/lib/services/prometheus.spec.js +0 -76
  623. package/lib/services/prometheus.spec.js.map +0 -1
  624. package/lib/services/resource.d.ts.map +0 -1
  625. package/lib/services/resource.js +0 -170
  626. package/lib/services/resource.js.map +0 -1
  627. package/lib/services/resource.spec.d.ts +0 -2
  628. package/lib/services/resource.spec.d.ts.map +0 -1
  629. package/lib/services/resource.spec.js +0 -140
  630. package/lib/services/resource.spec.js.map +0 -1
  631. package/lib/services/service.spec.d.ts +0 -2
  632. package/lib/services/service.spec.d.ts.map +0 -1
  633. package/lib/services/service.spec.js +0 -286
  634. package/lib/services/service.spec.js.map +0 -1
  635. package/lib/stores/aggregator.d.ts +0 -48
  636. package/lib/stores/aggregator.d.ts.map +0 -1
  637. package/lib/stores/aggregator.js +0 -80
  638. package/lib/stores/aggregator.js.map +0 -1
  639. package/lib/stores/file.d.ts +0 -108
  640. package/lib/stores/file.d.ts.map +0 -1
  641. package/lib/stores/file.js +0 -188
  642. package/lib/stores/file.js.map +0 -1
  643. package/lib/stores/file.spec.d.ts +0 -13
  644. package/lib/stores/file.spec.d.ts.map +0 -1
  645. package/lib/stores/file.spec.js +0 -138
  646. package/lib/stores/file.spec.js.map +0 -1
  647. package/lib/stores/mapper.d.ts +0 -150
  648. package/lib/stores/mapper.d.ts.map +0 -1
  649. package/lib/stores/mapper.js +0 -293
  650. package/lib/stores/mapper.js.map +0 -1
  651. package/lib/stores/mapper.spec.d.ts +0 -2
  652. package/lib/stores/mapper.spec.d.ts.map +0 -1
  653. package/lib/stores/mapper.spec.js +0 -167
  654. package/lib/stores/mapper.spec.js.map +0 -1
  655. package/lib/stores/memory.d.ts +0 -152
  656. package/lib/stores/memory.d.ts.map +0 -1
  657. package/lib/stores/memory.js +0 -371
  658. package/lib/stores/memory.js.map +0 -1
  659. package/lib/stores/memory.spec.d.ts +0 -14
  660. package/lib/stores/memory.spec.d.ts.map +0 -1
  661. package/lib/stores/memory.spec.js +0 -263
  662. package/lib/stores/memory.spec.js.map +0 -1
  663. package/lib/stores/modelmapper.d.ts +0 -62
  664. package/lib/stores/modelmapper.d.ts.map +0 -1
  665. package/lib/stores/modelmapper.js +0 -197
  666. package/lib/stores/modelmapper.js.map +0 -1
  667. package/lib/stores/store.spec.d.ts +0 -57
  668. package/lib/stores/store.spec.d.ts.map +0 -1
  669. package/lib/stores/store.spec.js +0 -737
  670. package/lib/stores/store.spec.js.map +0 -1
  671. package/lib/test.d.ts +0 -265
  672. package/lib/test.d.ts.map +0 -1
  673. package/lib/test.js +0 -622
  674. package/lib/test.js.map +0 -1
  675. package/lib/unpackedapplication.d.ts.map +0 -1
  676. package/lib/unpackedapplication.js +0 -350
  677. package/lib/unpackedapplication.js.map +0 -1
  678. package/lib/utils/abstractdeployer.spec.d.ts +0 -2
  679. package/lib/utils/abstractdeployer.spec.d.ts.map +0 -1
  680. package/lib/utils/abstractdeployer.spec.js +0 -21
  681. package/lib/utils/abstractdeployer.spec.js.map +0 -1
  682. package/lib/utils/case.d.ts +0 -8
  683. package/lib/utils/case.d.ts.map +0 -1
  684. package/lib/utils/case.js +0 -43
  685. package/lib/utils/case.js.map +0 -1
  686. package/lib/utils/case.spec.d.ts +0 -2
  687. package/lib/utils/case.spec.d.ts.map +0 -1
  688. package/lib/utils/case.spec.js +0 -50
  689. package/lib/utils/case.spec.js.map +0 -1
  690. package/lib/utils/context.d.ts +0 -482
  691. package/lib/utils/context.d.ts.map +0 -1
  692. package/lib/utils/context.js +0 -739
  693. package/lib/utils/context.js.map +0 -1
  694. package/lib/utils/context.spec.d.ts +0 -10
  695. package/lib/utils/context.spec.d.ts.map +0 -1
  696. package/lib/utils/context.spec.js +0 -383
  697. package/lib/utils/context.spec.js.map +0 -1
  698. package/lib/utils/cookie.d.ts.map +0 -1
  699. package/lib/utils/cookie.js.map +0 -1
  700. package/lib/utils/cookie.spec.d.ts +0 -2
  701. package/lib/utils/cookie.spec.d.ts.map +0 -1
  702. package/lib/utils/cookie.spec.js +0 -88
  703. package/lib/utils/cookie.spec.js.map +0 -1
  704. package/lib/utils/esm.d.ts +0 -14
  705. package/lib/utils/esm.d.ts.map +0 -1
  706. package/lib/utils/esm.js +0 -19
  707. package/lib/utils/esm.js.map +0 -1
  708. package/lib/utils/httpcontext.d.ts.map +0 -1
  709. package/lib/utils/httpcontext.js.map +0 -1
  710. package/lib/utils/httpcontext.spec.d.ts +0 -5
  711. package/lib/utils/httpcontext.spec.d.ts.map +0 -1
  712. package/lib/utils/httpcontext.spec.js +0 -77
  713. package/lib/utils/httpcontext.spec.js.map +0 -1
  714. package/lib/utils/logger.d.ts +0 -92
  715. package/lib/utils/logger.d.ts.map +0 -1
  716. package/lib/utils/logger.js +0 -121
  717. package/lib/utils/logger.js.map +0 -1
  718. package/lib/utils/logger.spec.d.ts +0 -2
  719. package/lib/utils/logger.spec.d.ts.map +0 -1
  720. package/lib/utils/logger.spec.js +0 -48
  721. package/lib/utils/logger.spec.js.map +0 -1
  722. package/lib/utils/serializers.d.ts +0 -162
  723. package/lib/utils/serializers.d.ts.map +0 -1
  724. package/lib/utils/serializers.js +0 -420
  725. package/lib/utils/serializers.js.map +0 -1
  726. package/lib/utils/serializers.spec.d.ts +0 -2
  727. package/lib/utils/serializers.spec.d.ts.map +0 -1
  728. package/lib/utils/serializers.spec.js +0 -311
  729. package/lib/utils/serializers.spec.js.map +0 -1
  730. package/lib/utils/session.d.ts +0 -123
  731. package/lib/utils/session.d.ts.map +0 -1
  732. package/lib/utils/session.js +0 -156
  733. package/lib/utils/session.js.map +0 -1
  734. package/lib/utils/session.spec.d.ts +0 -2
  735. package/lib/utils/session.spec.d.ts.map +0 -1
  736. package/lib/utils/session.spec.js +0 -81
  737. package/lib/utils/session.spec.js.map +0 -1
  738. package/lib/utils/throttler.d.ts +0 -99
  739. package/lib/utils/throttler.d.ts.map +0 -1
  740. package/lib/utils/throttler.js +0 -160
  741. package/lib/utils/throttler.js.map +0 -1
  742. package/lib/utils/throttler.spec.d.ts +0 -2
  743. package/lib/utils/throttler.spec.d.ts.map +0 -1
  744. package/lib/utils/throttler.spec.js +0 -53
  745. package/lib/utils/throttler.spec.js.map +0 -1
  746. package/lib/utils/waiter.d.ts +0 -94
  747. package/lib/utils/waiter.d.ts.map +0 -1
  748. package/lib/utils/waiter.js +0 -148
  749. package/lib/utils/waiter.js.map +0 -1
  750. package/lib/utils/waiter.spec.d.ts +0 -2
  751. package/lib/utils/waiter.spec.d.ts.map +0 -1
  752. package/lib/utils/waiter.spec.js +0 -98
  753. package/lib/utils/waiter.spec.js.map +0 -1
  754. package/test/jsonutils/mdocs.yaml +0 -56
  755. package/test/jsonutils/test.json +0 -3
  756. package/test/jsonutils/test.yml +0 -5
@@ -0,0 +1,932 @@
1
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
2
+ var useValue = arguments.length > 2;
3
+ for (var i = 0; i < initializers.length; i++) {
4
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
5
+ }
6
+ return useValue ? value : void 0;
7
+ };
8
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
9
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
10
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
11
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
12
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
13
+ var _, done = false;
14
+ for (var i = decorators.length - 1; i >= 0; i--) {
15
+ var context = {};
16
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
17
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
18
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
19
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
20
+ if (kind === "accessor") {
21
+ if (result === void 0) continue;
22
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
23
+ if (_ = accept(result.get)) descriptor.get = _;
24
+ if (_ = accept(result.set)) descriptor.set = _;
25
+ if (_ = accept(result.init)) initializers.unshift(_);
26
+ }
27
+ else if (_ = accept(result)) {
28
+ if (kind === "field") initializers.unshift(_);
29
+ else descriptor[key] = _;
30
+ }
31
+ }
32
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
33
+ done = true;
34
+ };
35
+ import bcrypt from "bcryptjs";
36
+ import { Counter } from "../metrics/metrics.js";
37
+ import * as WebdaError from "../errors/errors.js";
38
+ import { Inject, Service } from "../services/service.js";
39
+ import { Route } from "../rest/irest.js";
40
+ import { runAsSystem } from "../contexts/execution.js";
41
+ import { ServiceParameters } from "./serviceparameters.js";
42
+ import { useModelRepository, useDynamicService } from "../core/hooks.js";
43
+ /** Parameters for the Authentication service including identity, email, and password settings */
44
+ export class AuthenticationParameters extends ServiceParameters {
45
+ /**
46
+ * Idents store for authentication identifiers
47
+ *
48
+ * @default "Webda/Ident"
49
+ */
50
+ identModel;
51
+ /**
52
+ * User store for authentication users
53
+ *
54
+ * @default "Webda/User"
55
+ */
56
+ userModel;
57
+ /**
58
+ * Enable the email authentication
59
+ */
60
+ email;
61
+ password;
62
+ /**
63
+ * Number of salt iteration for bcrypt.hashSync
64
+ */
65
+ salt;
66
+ /**
67
+ * Redirect to this page when email validation failed
68
+ */
69
+ failureRedirect;
70
+ /**
71
+ * Redirect to this page when email validation succeed
72
+ */
73
+ successRedirect;
74
+ /**
75
+ * Redirect to this page once email is validate to finish the registration process
76
+ */
77
+ registerRedirect;
78
+ /**
79
+ * Load parameters with defaults for authentication URLs, models, and password policy
80
+ * @param params - the service parameters
81
+ * @returns this for chaining
82
+ */
83
+ load(params = {}) {
84
+ super.load(params);
85
+ this.identModel ??= "Webda/Ident";
86
+ this.userModel ??= "Webda/User";
87
+ this.url ??= "/auth";
88
+ this.password ??= {
89
+ regexp: ".{8,}"
90
+ };
91
+ if (this.email) {
92
+ this.email.delay ??= 3600000 * 4;
93
+ this.email.failedLoginBeforeDelay ??= 3;
94
+ }
95
+ return this;
96
+ }
97
+ }
98
+ /**
99
+ * This class is known as the Authentication module
100
+ * It handles OAuth for several providers for now (Facebook, Google, Amazon, GitHub and Twitter)
101
+ * It also handles email authentication with prevalidation or postvalidation of the email
102
+ *
103
+ * It requires two Store to work one `idents` and one `users`
104
+ *
105
+ * The parameters are
106
+ * ```
107
+ * providerName: {
108
+ * clientID: '...',
109
+ * clientSecret: '...',
110
+ * scope: ''
111
+ * },
112
+ * email: {
113
+ * postValidation: true|false // If postValidation=true, account created without email verification
114
+ * }
115
+ * url: 'url' // By default /auth
116
+ * ```
117
+ *
118
+ * Core authentication service handling login, registration, password recovery, and email validation
119
+ *
120
+ * @category CoreServices
121
+ * @WebdaModda
122
+ */
123
+ let Authentication = (() => {
124
+ let _classSuper = Service;
125
+ let _instanceExtraInitializers = [];
126
+ let _cryptoService_decorators;
127
+ let _cryptoService_initializers = [];
128
+ let _cryptoService_extraInitializers = [];
129
+ let __sendEmailValidation_decorators;
130
+ let __getMe_decorators;
131
+ let __listAuthentications_decorators;
132
+ let __handleEmailCallback_decorators;
133
+ return class Authentication extends _classSuper {
134
+ static {
135
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
136
+ _cryptoService_decorators = [Inject("CryptoService")];
137
+ __sendEmailValidation_decorators = [Route("./email/{email}/validate", ["GET"], {
138
+ get: {
139
+ description: "The email validation process will be start",
140
+ summary: "Restart email validation",
141
+ operationId: "startEmailRecovery",
142
+ responses: {
143
+ "204": {
144
+ description: ""
145
+ },
146
+ "409": {
147
+ description: "Email already verified for another user"
148
+ },
149
+ "412": {
150
+ description: "Email already verified for current user"
151
+ },
152
+ "429": {
153
+ description: "Validation has been initiated in the last 4 hours"
154
+ }
155
+ }
156
+ }
157
+ })];
158
+ __getMe_decorators = [Route("./me", ["GET"], {
159
+ get: {
160
+ description: "Retrieve the current user from the session",
161
+ summary: "Get current user",
162
+ operationId: "getCurrentUser"
163
+ }
164
+ })];
165
+ __listAuthentications_decorators = [Route(".", ["GET", "DELETE"], {
166
+ get: {
167
+ description: "Retrieve the list of available authentication",
168
+ summary: "Get available auths",
169
+ operationId: `getAuthenticationMethods`,
170
+ responses: {
171
+ "200": {
172
+ description: "List of authentication"
173
+ }
174
+ }
175
+ },
176
+ delete: {
177
+ description: "Logout current user",
178
+ summary: "Logout",
179
+ operationId: `logout`,
180
+ responses: {
181
+ "200": {}
182
+ }
183
+ }
184
+ })];
185
+ __handleEmailCallback_decorators = [Route("./email/callback{?email,token,user?}", ["GET"], {
186
+ hidden: true
187
+ })];
188
+ __esDecorate(this, null, __sendEmailValidation_decorators, { kind: "method", name: "_sendEmailValidation", static: false, private: false, access: { has: obj => "_sendEmailValidation" in obj, get: obj => obj._sendEmailValidation }, metadata: _metadata }, null, _instanceExtraInitializers);
189
+ __esDecorate(this, null, __getMe_decorators, { kind: "method", name: "_getMe", static: false, private: false, access: { has: obj => "_getMe" in obj, get: obj => obj._getMe }, metadata: _metadata }, null, _instanceExtraInitializers);
190
+ __esDecorate(this, null, __listAuthentications_decorators, { kind: "method", name: "_listAuthentications", static: false, private: false, access: { has: obj => "_listAuthentications" in obj, get: obj => obj._listAuthentications }, metadata: _metadata }, null, _instanceExtraInitializers);
191
+ __esDecorate(this, null, __handleEmailCallback_decorators, { kind: "method", name: "_handleEmailCallback", static: false, private: false, access: { has: obj => "_handleEmailCallback" in obj, get: obj => obj._handleEmailCallback }, metadata: _metadata }, null, _instanceExtraInitializers);
192
+ __esDecorate(null, null, _cryptoService_decorators, { kind: "field", name: "cryptoService", static: false, private: false, access: { has: obj => "cryptoService" in obj, get: obj => obj.cryptoService, set: (obj, value) => { obj.cryptoService = value; } }, metadata: _metadata }, _cryptoService_initializers, _cryptoService_extraInitializers);
193
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
194
+ }
195
+ /**
196
+ * Ident model to use
197
+ */
198
+ identModel = __runInitializers(this, _instanceExtraInitializers);
199
+ /**
200
+ * User model to use
201
+ */
202
+ userModel;
203
+ /**
204
+ * Used for hmac
205
+ */
206
+ cryptoService = __runInitializers(this, _cryptoService_initializers, void 0);
207
+ /**
208
+ * Password verification system
209
+ */
210
+ _passwordVerifier = __runInitializers(this, _cryptoService_extraInitializers);
211
+ /**
212
+ *
213
+ */
214
+ providers = new Set();
215
+ /**
216
+ * Get user model
217
+ * @returns the result
218
+ */
219
+ getUserModel() {
220
+ return this.userModel;
221
+ }
222
+ /**
223
+ * Get ident model
224
+ * @returns the result
225
+ */
226
+ getIdentModel() {
227
+ return this.identModel;
228
+ }
229
+ /**
230
+ * @ignore
231
+ * Setup the default routes
232
+ */
233
+ computeParameters() {
234
+ super.computeParameters();
235
+ this.identModel = useModelRepository(this.parameters.identModel);
236
+ this.userModel = useModelRepository(this.parameters.userModel);
237
+ if (this.parameters.password.verifier) {
238
+ this._passwordVerifier = useDynamicService(this.parameters.password.verifier);
239
+ }
240
+ if (this.parameters.email && this.getMailMan() === undefined) {
241
+ throw Error("email authentication requires a Mailer service");
242
+ }
243
+ // Add email provider
244
+ if (this.parameters.email) {
245
+ this.addProvider("email");
246
+ this.addRoute("./email/{email}/recover", ["GET"], this._passwordRecoveryEmail, {
247
+ get: {
248
+ description: "The password reset process will be start",
249
+ summary: "Start password recovery",
250
+ operationId: "startEmailRecovery",
251
+ responses: {
252
+ "204": {
253
+ description: ""
254
+ },
255
+ "404": {
256
+ description: "Email does not exist"
257
+ },
258
+ "429": {
259
+ description: "Recovery has been initiated in the last 4 hours"
260
+ }
261
+ }
262
+ }
263
+ });
264
+ this.addRoute("./email/passwordRecovery", ["POST"], this._passwordRecovery, {
265
+ post: {
266
+ schemas: {
267
+ input: {
268
+ type: "object",
269
+ properties: {
270
+ token: {
271
+ type: "string"
272
+ },
273
+ expire: {
274
+ type: "number"
275
+ },
276
+ password: {
277
+ type: "string"
278
+ },
279
+ login: {
280
+ type: "string"
281
+ }
282
+ }
283
+ }
284
+ },
285
+ description: "Reinit the password if we have the right token, expire",
286
+ summary: "Reinit password",
287
+ operationId: "reinitPassword",
288
+ responses: {
289
+ "204": {
290
+ description: ""
291
+ },
292
+ "403": {
293
+ description: "Wrong Token"
294
+ }
295
+ }
296
+ }
297
+ });
298
+ this.addRoute("./email", ["POST"], this._handleEmail, {
299
+ post: {
300
+ description: "Authenticate with an email and password",
301
+ summary: "Authenticate with email",
302
+ operationId: `authWithEmail`
303
+ }
304
+ });
305
+ }
306
+ }
307
+ /**
308
+ * @override
309
+ */
310
+ initMetrics() {
311
+ super.initMetrics();
312
+ this.metrics.login = this.getMetric(Counter, {
313
+ name: "auth_login",
314
+ help: "Counter number of login per provider",
315
+ labelNames: ["provider"]
316
+ });
317
+ this.metrics.logout = this.getMetric(Counter, {
318
+ name: "auth_logout",
319
+ help: "Counter number of logout"
320
+ });
321
+ this.metrics.registration = this.getMetric(Counter, {
322
+ name: "auth_registration",
323
+ help: "Counter number of registration per provider",
324
+ labelNames: ["provider"]
325
+ });
326
+ if (this.parameters.email) {
327
+ this.metrics.loginFailed = this.getMetric(Counter, {
328
+ name: "auth_login_failed",
329
+ help: "Counter number of login failed with password"
330
+ });
331
+ this.metrics.recovery = this.getMetric(Counter, {
332
+ name: "auth_login_recovery",
333
+ help: "Counter number of password lost process initiated"
334
+ });
335
+ this.metrics.recovered = this.getMetric(Counter, {
336
+ name: "auth_login_recovered",
337
+ help: "Counter number of password lost process successful"
338
+ });
339
+ }
340
+ }
341
+ /**
342
+ * Add a provider to the oauth scheme
343
+ * @param name - the name to use
344
+ */
345
+ addProvider(name) {
346
+ this.providers.add(name);
347
+ }
348
+ /**
349
+ * Ensure email is enabled for all emails routes
350
+ * @override
351
+ */
352
+ getUrl(url, methods) {
353
+ if (url.startsWith("./emails") && !this.parameters.email) {
354
+ return undefined;
355
+ }
356
+ return super.getUrl(url, methods);
357
+ }
358
+ /**
359
+ * Send or resend an email to validate the email address
360
+ *
361
+ * @param ctx - the operation context
362
+ * @throws 409 if ident is linked to someone else
363
+ * @throws 412 if the email is already validated
364
+ * @throws 429 if a validation email has been sent recently
365
+ */
366
+ async _sendEmailValidation(ctx) {
367
+ const identKey = ctx.parameters.email + "_email";
368
+ const ident = await this.identModel.ref(identKey).get();
369
+ ident._lastUsed?.getDate();
370
+ if (!ident) {
371
+ await this.identModel.ref(`${ctx.parameters.email}_email`).create({
372
+ _lastValidationEmail: Date.now(),
373
+ _type: "email"
374
+ });
375
+ }
376
+ else {
377
+ // If the ident is linked to someone else - might want to remove it
378
+ if (ident.getUser().getPrimaryKey().toString() !== ctx.getCurrentUserId()) {
379
+ throw new WebdaError.Conflict("Ident is linked to someone else");
380
+ }
381
+ // If the email is already validated
382
+ if (ident._validation) {
383
+ throw new WebdaError.PreconditionFailed("Email already validated");
384
+ }
385
+ //
386
+ if (ident._lastValidationEmail >= Date.now() - this.parameters.email.delay) {
387
+ throw new WebdaError.TooManyRequests("Email sent recently");
388
+ }
389
+ await this.identModel.ref(ident.getUUID()).setAttribute("_lastValidationEmail", Date.now());
390
+ //ident.ref(ident.getUUID()).setAttribute("_lastValidationEmail", Date.now());
391
+ //await this.identModel.ref(ident.getUUID()).setAttribute("lastValidationEmail", Date.now());
392
+ }
393
+ await this.sendValidationEmail(ctx, ctx.parameters.email);
394
+ }
395
+ /**
396
+ * Return current user
397
+ * @param ctx - the operation context
398
+ */
399
+ async _getMe(ctx) {
400
+ const user = await ctx.getCurrentUser();
401
+ if (user === undefined) {
402
+ throw new WebdaError.NotFound("No user found");
403
+ }
404
+ await this.emit("Authentication.GetMe", {
405
+ context: ctx,
406
+ user
407
+ });
408
+ ctx.write(user);
409
+ }
410
+ /**
411
+ * Handle both list of available authentication
412
+ * and logout with method 'DELETE'
413
+ *
414
+ * @param ctx - the operation context
415
+ * @returns the result
416
+ */
417
+ async _listAuthentications(ctx) {
418
+ if (ctx.getHttpContext().getMethod() === "DELETE") {
419
+ await this.logout(ctx);
420
+ this.metrics.logout.inc();
421
+ ctx.write("GoodBye");
422
+ return;
423
+ }
424
+ ctx.write(Array.from(this.providers));
425
+ }
426
+ /**
427
+ * Handle login via an identity provider, creating or linking the ident to a user
428
+ * @param ctx - the operation context
429
+ * @param provider - the provider name
430
+ * @param identId - the identity identifier
431
+ * @param profile - the user profile
432
+ * @param tokens - the authentication tokens
433
+ */
434
+ async onIdentLogin(ctx, provider, identId, profile, tokens = undefined) {
435
+ // Auto postifx with provider name
436
+ const postfix = `_${provider}`;
437
+ if (!identId.endsWith(postfix)) {
438
+ identId += postfix;
439
+ }
440
+ let ident = await this.identModel.ref(identId).get();
441
+ // Ident is known
442
+ if (ident) {
443
+ await this.login(ctx, ident.getUser().toString(), ident, provider);
444
+ await runAsSystem(() => ident.patch({
445
+ _lastUsed: new Date().toString(),
446
+ __tokens: tokens
447
+ }));
448
+ // Redirect to?
449
+ return;
450
+ }
451
+ let user;
452
+ if (profile.email) {
453
+ ident = await this.identModel.ref(`${profile.email}_email`).get();
454
+ }
455
+ await runAsSystem(async () => {
456
+ // If already login
457
+ if (ctx.getCurrentUserId()) {
458
+ user = await ctx.getCurrentUser();
459
+ }
460
+ else {
461
+ // If an email in profile try to find the ident
462
+ if (ident) {
463
+ user = await this.userModel.ref(ident.getUser().toString()).get();
464
+ }
465
+ if (!user) {
466
+ // If no user, register a new user automatically
467
+ user = await this.registerUser(ctx, profile, identId);
468
+ await user.save();
469
+ }
470
+ }
471
+ if (profile.email && !ident) {
472
+ // Save additional email
473
+ await this.identModel.create({
474
+ uuid: `${profile.email}_email`,
475
+ provider: "email",
476
+ _user: user.getUuid()
477
+ });
478
+ }
479
+ // Work directly on ident argument
480
+ ident = await this.identModel.create({
481
+ uuid: identId,
482
+ __profile: profile,
483
+ __tokens: tokens,
484
+ provider,
485
+ _lastUsed: new Date(),
486
+ _user: user.uuid,
487
+ _type: provider
488
+ });
489
+ await this.login(ctx, user, ident, provider);
490
+ });
491
+ }
492
+ /**
493
+ * Create a new User with the link ident
494
+ * @param ident
495
+ *
496
+ async createUserWithIdent(provider: string, identId: string, profile: any = {}) {
497
+ if (await this.identModel.ref(`${identId}_${provider}`).exists()) {
498
+ throw new Error("Ident is already known");
499
+ }
500
+ const ctx = await this._webda.newWebContext(new HttpContext("fake", "GET", "/"));
501
+ // Pretend we logged in with the ident
502
+ await this.onIdentLogin(ctx, provider, identId, profile);
503
+ }
504
+ */
505
+ /**
506
+ * Create and register a new user, emitting a registration event
507
+ * @param ctx - the operation context
508
+ * @param data - the data to process
509
+ * @param identId - the identity identifier
510
+ * @param user - the user object
511
+ * @returns the result
512
+ */
513
+ async registerUser(ctx, data, identId, user) {
514
+ user ??= await this.userModel.create({
515
+ email: data.email,
516
+ locale: ctx.getLocale()
517
+ }, false);
518
+ user.email = data.email;
519
+ user.locale = ctx.getLocale();
520
+ this.metrics.registration.inc();
521
+ await this.emit("Authentication.Register", {
522
+ user: user,
523
+ data: data,
524
+ context: ctx,
525
+ identId
526
+ });
527
+ return user;
528
+ }
529
+ /**
530
+ * Generate password recovery info (token and expiry) for a user
531
+ * @param uuid - the unique identifier
532
+ * @param interval - the interval
533
+ * @returns the result
534
+ */
535
+ async getPasswordRecoveryInfos(uuid, interval = this.parameters.email.delay) {
536
+ const expire = Date.now() + interval;
537
+ let user;
538
+ if (typeof uuid === "string") {
539
+ user = await this.userModel.fromUID(uuid).get();
540
+ }
541
+ else {
542
+ user = uuid;
543
+ }
544
+ if (!user) {
545
+ return undefined;
546
+ }
547
+ return {
548
+ expire: expire,
549
+ // Might want to add more alea not coming from the db to avoid exploitation of stolen db
550
+ token: await this.cryptoService.hmac(user.uuid + expire + user.getPassword()),
551
+ login: user.uuid
552
+ };
553
+ }
554
+ /**
555
+ * Manage password recovery
556
+ * @param ctx - the operation context
557
+ */
558
+ async _passwordRecoveryEmail(ctx) {
559
+ const email = ctx.parameter("email");
560
+ const ident = await this.identModel.ref(email + "_email").get();
561
+ if (!ident) {
562
+ throw new WebdaError.NotFound("Email not found");
563
+ }
564
+ const user = await this.userModel.ref(ident.getUser().toString()).get();
565
+ // Dont allow to do too many request
566
+ if (!user.lastPasswordRecoveryBefore(Date.now() - this.parameters.email.delay)) {
567
+ throw new WebdaError.TooManyRequests("Password recovery already requested recently");
568
+ }
569
+ await user.patch({
570
+ _lastPasswordRecovery: Date.now()
571
+ });
572
+ this.metrics.recovery.inc();
573
+ await this.sendRecoveryEmail(ctx, user, email);
574
+ }
575
+ /**
576
+ * Verify that a password meets the configured policy or custom verifier
577
+ * @param password - the password
578
+ * @param user - the user object
579
+ */
580
+ async _verifyPassword(password, user) {
581
+ if (this._passwordVerifier) {
582
+ if (!(await this._passwordVerifier.validate(password, user))) {
583
+ throw new WebdaError.BadRequest("Password does not match the policy");
584
+ }
585
+ return;
586
+ }
587
+ const regexp = new RegExp(this.parameters.password.regexp);
588
+ if (regexp.exec(password) === null) {
589
+ throw new WebdaError.BadRequest("Password does not match the policy");
590
+ }
591
+ }
592
+ /**
593
+ * Handle password recovery: verify token and update the user's password
594
+ * @param ctx - the operation context
595
+ */
596
+ async _passwordRecovery(ctx) {
597
+ const body = await ctx.getRequestBody();
598
+ const user = await this.userModel.ref(body.login.toLowerCase()).get();
599
+ if (!user) {
600
+ throw new WebdaError.Forbidden("User not found");
601
+ }
602
+ if (!(await this.cryptoService.hmacVerify(body.login.toLowerCase() + body.expire + user.getPassword(), body.token))) {
603
+ throw new WebdaError.Forbidden("Invalid token");
604
+ }
605
+ if (body.expire < Date.now()) {
606
+ throw new WebdaError.Gone("Expired token");
607
+ }
608
+ await this._verifyPassword(body.password, user);
609
+ const password = this.hashPassword(body.password);
610
+ await user.patch({
611
+ __password: password
612
+ });
613
+ this.metrics.recovered.inc();
614
+ await this.emit("Authentication.PasswordUpdate", {
615
+ user,
616
+ password,
617
+ context: ctx
618
+ });
619
+ }
620
+ /**
621
+ * Callback to validate an email address
622
+ * @param ctx - the operation context
623
+ * @returns the result
624
+ */
625
+ async _handleEmailCallback(ctx) {
626
+ if (!(await this.cryptoService.hmacVerify(`${ctx.parameter("email")}_${ctx.parameter("user")}`, ctx.parameter("token")))) {
627
+ ctx.writeHead(302, {
628
+ Location: this.parameters.failureRedirect + "?reason=badToken"
629
+ });
630
+ return;
631
+ }
632
+ if (ctx.parameter("user") !== ctx.getCurrentUserId() &&
633
+ ctx.getCurrentUserId() !== "" &&
634
+ ctx.getCurrentUserId() !== undefined) {
635
+ ctx.writeHead(302, {
636
+ Location: this.parameters.failureRedirect + "?reason=badUser"
637
+ });
638
+ return;
639
+ }
640
+ if (!ctx.parameter("user")) {
641
+ ctx.writeHead(302, {
642
+ Location: `${this.parameters.registerRedirect}?token=${ctx.parameter("token")}&email=${ctx.parameter("email")}`
643
+ });
644
+ return;
645
+ }
646
+ await runAsSystem(async () => {
647
+ const uuid = ctx.parameter("email") + "_email";
648
+ let ident = await this.identModel.ref(uuid).get();
649
+ // Would mean the ident got delete in the mean time... hyper low likely hood
650
+ if (ident === undefined) {
651
+ ident = await this.identModel.create({
652
+ uuid
653
+ }, false);
654
+ }
655
+ ident._type = "email";
656
+ ident._validation = new Date();
657
+ ident.setUser(ctx.parameter("user"));
658
+ await ident.save();
659
+ ctx.writeHead(302, {
660
+ Location: this.parameters.successRedirect + "?validation=email",
661
+ "X-Webda-Authentication": "success"
662
+ });
663
+ });
664
+ }
665
+ /**
666
+ * Send an email to recover the user password
667
+ *
668
+ * @param ctx - the operation context
669
+ * @param user - the user object
670
+ * @param email - the email address
671
+ * @returns the result
672
+ */
673
+ async sendRecoveryEmail(ctx, user, email) {
674
+ const infos = await this.getPasswordRecoveryInfos(user);
675
+ const mailer = this.getMailMan();
676
+ const locale = user.locale || ctx.getLocale();
677
+ const mailOptions = {
678
+ to: email,
679
+ locale: locale,
680
+ template: "EMAIL_RECOVERY",
681
+ replacements: {
682
+ ...this.parameters.email,
683
+ infos,
684
+ to: email,
685
+ context: ctx
686
+ }
687
+ };
688
+ return mailer.send(mailOptions);
689
+ }
690
+ /**
691
+ * Send an email to validate the user email by sending a unique link to
692
+ * his email
693
+ *
694
+ * @param ctx - the operation context
695
+ * @param email - the email address
696
+ * @returns the result
697
+ */
698
+ async sendValidationEmail(ctx, email) {
699
+ const mailer = this.getMailMan();
700
+ const replacements = {
701
+ ...this.parameters.email,
702
+ context: ctx,
703
+ url: ctx
704
+ .getHttpContext()
705
+ .getAbsoluteUrl(`${this.parameters.url}/email/callback?email=${email}&token=${await this.generateEmailValidationToken(ctx.getCurrentUserId(), email)}`)
706
+ };
707
+ const userId = ctx.getCurrentUserId();
708
+ if (userId && userId.length > 0) {
709
+ replacements.url += "&user=" + userId;
710
+ }
711
+ const mailOptions = {
712
+ to: email,
713
+ locale: ctx.getLocale(),
714
+ template: "EMAIL_REGISTER",
715
+ replacements: replacements
716
+ };
717
+ return mailer.send(mailOptions);
718
+ }
719
+ /**
720
+ * Check the password match the stored hash
721
+ * @param hash generate prior by hashPassword
722
+ * @param password as entered by the user
723
+ * @param pass - the password
724
+ * @returns true if the condition is met
725
+ */
726
+ checkPassword(hash = "", pass = "") {
727
+ return bcrypt.compareSync(pass, hash);
728
+ }
729
+ /**
730
+ * Hash the password according to good practices
731
+ *
732
+ * @param pass to hash
733
+ * @returns the result string
734
+ */
735
+ hashPassword(pass) {
736
+ return bcrypt.hashSync(pass, this.parameters.salt || 10);
737
+ }
738
+ /**
739
+ * Logout user
740
+ * @param ctx - the operation context
741
+ */
742
+ async logout(ctx) {
743
+ await this.emit("Authentication.Logout", {
744
+ context: ctx
745
+ });
746
+ await ctx.newSession();
747
+ }
748
+ /**
749
+ * Login a user
750
+ *
751
+ * @param ctx - the operation context
752
+ * @param user - the user object
753
+ * @param ident - the identity object
754
+ * @param provider - the provider name
755
+ * @returns the result
756
+ */
757
+ async login(ctx, user, ident, provider) {
758
+ const event = {
759
+ context: ctx,
760
+ userId: "",
761
+ identId: ident.uuid,
762
+ ident
763
+ };
764
+ if (typeof user == "object") {
765
+ event.userId = user.getPrimaryKey().toString();
766
+ event.user = user;
767
+ }
768
+ else {
769
+ event.userId = user;
770
+ }
771
+ event.context = ctx;
772
+ ctx.getSession().login(event.userId, event.identId);
773
+ this.metrics.login.inc({ provider });
774
+ return this.emit("Authentication.Login", event);
775
+ }
776
+ /**
777
+ * Get the mailer service
778
+ * @returns the result
779
+ */
780
+ getMailMan() {
781
+ return useDynamicService(this.parameters.email.mailer ? this.parameters.email.mailer : "Mailer");
782
+ }
783
+ /**
784
+ * Handle a user login request
785
+ *
786
+ * @param ctx - the operation context
787
+ * @param ident - the identity object
788
+ */
789
+ async handleLogin(ctx, ident) {
790
+ const updates = {};
791
+ const user = await this.userModel.ref(ident.getUser().toString()).get();
792
+ // Check password
793
+ if (this.checkPassword(user.getPassword(), (await ctx.getRequestBody()).password)) {
794
+ if (ident._failedLogin > 0) {
795
+ ident._failedLogin = 0;
796
+ }
797
+ updates._lastUsed = new Date();
798
+ updates._failedLogin = 0;
799
+ await this.identModel.ref(ident.uuid).patch(updates);
800
+ await this.login(ctx, ident.getUser().toString(), ident, "email");
801
+ ctx.write(user);
802
+ }
803
+ else {
804
+ this.metrics.loginFailed.inc();
805
+ await this.emit("Authentication.LoginFailed", {
806
+ user,
807
+ context: ctx
808
+ });
809
+ ident._failedLogin ??= 0;
810
+ updates._failedLogin = ident._failedLogin + 1;
811
+ updates._lastFailedLogin = new Date();
812
+ // Swalow exeception issue to double check !
813
+ await this.identModel.ref(ident.uuid).patch(updates);
814
+ // Allows to auto redirect user to a oauth if needed
815
+ // It can intercept the error and redirect to the oauth if
816
+ // email match
817
+ if (!ctx.isEnded()) {
818
+ throw new WebdaError.Forbidden("Invalid password");
819
+ }
820
+ }
821
+ }
822
+ /**
823
+ * Handle the POST /auth/email
824
+ *
825
+ * @param ctx - the operation context
826
+ * @returns the result
827
+ */
828
+ async _handleEmail(ctx) {
829
+ // If called while logged in reject
830
+ if (ctx.getCurrentUserId() !== undefined) {
831
+ throw new WebdaError.Gone("Already logged in");
832
+ }
833
+ const body = await ctx.getRequestBody();
834
+ const mailConfig = this.parameters.email;
835
+ const uuid = body.login.toLowerCase() + "_email";
836
+ let ident = await this.identModel.ref(uuid).get();
837
+ if (ident !== undefined && ident.getUser() !== undefined) {
838
+ // Register on an known user
839
+ if (!body.register) {
840
+ await this.handleLogin(ctx, ident);
841
+ return;
842
+ }
843
+ // If register on a validate email
844
+ if (ident._validation !== undefined) {
845
+ throw new WebdaError.Conflict("Email already registered");
846
+ }
847
+ }
848
+ // TODO Handle add of email on authenticated user
849
+ const email = body.login.toLowerCase();
850
+ // Read the form
851
+ if (body.register) {
852
+ let validation = undefined;
853
+ // Need to check email before creation
854
+ if (!mailConfig.postValidation) {
855
+ if (body.token && (await this.cryptoService.hmacVerify(`${email}_${ctx.getCurrentUserId()}`, body.token))) {
856
+ validation = new Date();
857
+ }
858
+ else {
859
+ ctx.write({});
860
+ // token is undefined send an email
861
+ return this.sendValidationEmail(ctx, email);
862
+ }
863
+ }
864
+ if (!body.password) {
865
+ throw new WebdaError.BadRequest("Password is required");
866
+ }
867
+ // Store with a _
868
+ const __password = this.hashPassword(body.password);
869
+ await this._verifyPassword(body.password);
870
+ // Remove useless attributes
871
+ delete body.password;
872
+ delete body.register;
873
+ delete body.token;
874
+ const user = await runAsSystem(async () => this.registerUser(ctx, {}, uuid, await this.userModel.create({
875
+ ...body,
876
+ __password
877
+ }, false)));
878
+ await this.emit("Authentication.PasswordCreate", {
879
+ user,
880
+ password: __password,
881
+ context: ctx
882
+ });
883
+ await user.save();
884
+ const newIdent = await runAsSystem(async () => await this.identModel.create({
885
+ uuid: uuid,
886
+ _type: "email",
887
+ email: email
888
+ }));
889
+ newIdent.setUser(user.getPrimaryKey().toString());
890
+ if (validation) {
891
+ newIdent._validation = validation;
892
+ }
893
+ else if (!mailConfig.skipEmailValidation) {
894
+ newIdent._lastValidationEmail = Date.now();
895
+ }
896
+ ident = await newIdent.save();
897
+ await this.login(ctx, user, ident, "email");
898
+ ctx.write(user);
899
+ if (!validation && !mailConfig.skipEmailValidation) {
900
+ await this.sendValidationEmail(ctx, email);
901
+ }
902
+ return;
903
+ }
904
+ throw new WebdaError.NotFound("");
905
+ }
906
+ /**
907
+ * Generate an HMAC-based token for email address validation
908
+ * @param user - the user object
909
+ * @param email - the email address
910
+ * @returns the result string
911
+ */
912
+ async generateEmailValidationToken(user, email) {
913
+ return this.cryptoService.hmac(email + "_" + user);
914
+ }
915
+ /**
916
+ * Create a new User with the link ident
917
+ * @param ident - the identity object
918
+ * @param provider - the provider name
919
+ * @param identId - the identity identifier
920
+ * @param profile - the user profile
921
+ */
922
+ async createUserWithIdent(provider, identId, profile = {}) {
923
+ if (await this.identModel.ref(`${identId}_${provider}`).exists()) {
924
+ throw new Error("Ident is already known");
925
+ }
926
+ // Pretend we logged in with the ident
927
+ await this.onIdentLogin(undefined, provider, identId, profile);
928
+ }
929
+ };
930
+ })();
931
+ export { Authentication };
932
+ //# sourceMappingURL=authentication.service.js.map