@webda/core 4.0.0-beta.1 → 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 (675) 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/application/unpackedapplication.d.ts +104 -0
  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 -49
  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 +45 -19
  63. package/lib/contexts/httpcontext.d.ts.map +1 -0
  64. package/lib/{utils → contexts}/httpcontext.js +102 -34
  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 +84 -51
  119. package/lib/index.d.ts.map +1 -0
  120. package/lib/index.js +82 -59
  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 +21 -77
  155. package/lib/models/aclmodel.d.ts.map +1 -0
  156. package/lib/models/aclmodel.js +27 -204
  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 +2 -1
  167. package/lib/models/deployment.d.ts.map +1 -0
  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.model.js +53 -0
  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.service.d.ts +72 -0
  197. package/lib/queues/memoryqueue.service.d.ts.map +1 -0
  198. package/lib/queues/memoryqueue.service.js +136 -0
  199. package/lib/queues/memoryqueue.service.js.map +1 -0
  200. package/lib/queues/pubsubservice.d.ts +9 -6
  201. package/lib/queues/pubsubservice.d.ts.map +1 -0
  202. package/lib/queues/pubsubservice.js +5 -4
  203. package/lib/queues/pubsubservice.js.map +1 -1
  204. package/lib/queues/queueservice.d.ts +10 -11
  205. package/lib/queues/queueservice.d.ts.map +1 -0
  206. package/lib/queues/queueservice.js +48 -20
  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 -58
  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 +19 -13
  245. package/lib/services/cloudbinary.d.ts.map +1 -0
  246. package/lib/services/cloudbinary.js +24 -18
  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} +77 -142
  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.service.js +66 -0
  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 -10
  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 +58 -31
  297. package/lib/services/oauth.d.ts.map +1 -0
  298. package/lib/services/oauth.js +365 -251
  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 -11
  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.service.d.ts +121 -0
  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 +88 -189
  313. package/lib/services/service.d.ts.map +1 -0
  314. package/lib/services/service.js +407 -432
  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 -18
  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 +127 -768
  345. package/lib/stores/store.d.ts.map +1 -0
  346. package/lib/stores/store.js +258 -1718
  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 +5 -2
  377. package/lib/utils/abstractdeployer.d.ts.map +1 -0
  378. package/lib/utils/abstractdeployer.js +3 -0
  379. package/lib/utils/abstractdeployer.js.map +1 -1
  380. package/package.json +85 -56
  381. package/test/cachedapp/webda.config.json +1 -5
  382. package/test/config-cached.json +1 -5
  383. package/test/config.json +6 -99
  384. package/test/data/.env +1 -0
  385. package/test/my-cnf.json +9 -0
  386. package/webda.module.json +3462 -2231
  387. package/lib/application.d.ts +0 -876
  388. package/lib/application.js +0 -741
  389. package/lib/application.js.map +0 -1
  390. package/lib/application.spec.d.ts +0 -1
  391. package/lib/application.spec.js +0 -234
  392. package/lib/application.spec.js.map +0 -1
  393. package/lib/core.d.ts +0 -740
  394. package/lib/core.js +0 -1310
  395. package/lib/core.js.map +0 -1
  396. package/lib/core.spec.d.ts +0 -1
  397. package/lib/core.spec.js +0 -761
  398. package/lib/core.spec.js.map +0 -1
  399. package/lib/errors.d.ts +0 -65
  400. package/lib/errors.js +0 -113
  401. package/lib/errors.js.map +0 -1
  402. package/lib/errors.spec.d.ts +0 -1
  403. package/lib/errors.spec.js +0 -33
  404. package/lib/errors.spec.js.map +0 -1
  405. package/lib/models/aclmodel.spec.d.ts +0 -1
  406. package/lib/models/aclmodel.spec.js +0 -187
  407. package/lib/models/aclmodel.spec.js.map +0 -1
  408. package/lib/models/coremodel.d.ts +0 -887
  409. package/lib/models/coremodel.js +0 -1208
  410. package/lib/models/coremodel.js.map +0 -1
  411. package/lib/models/coremodel.spec.d.ts +0 -1
  412. package/lib/models/coremodel.spec.js +0 -462
  413. package/lib/models/coremodel.spec.js.map +0 -1
  414. package/lib/models/ident.d.ts +0 -53
  415. package/lib/models/ident.js +0 -40
  416. package/lib/models/ident.js.map +0 -1
  417. package/lib/models/ident.spec.d.ts +0 -1
  418. package/lib/models/ident.spec.js +0 -43
  419. package/lib/models/ident.spec.js.map +0 -1
  420. package/lib/models/ownermodel.d.ts +0 -50
  421. package/lib/models/ownermodel.js +0 -65
  422. package/lib/models/ownermodel.js.map +0 -1
  423. package/lib/models/ownermodel.spec.d.ts +0 -1
  424. package/lib/models/ownermodel.spec.js +0 -191
  425. package/lib/models/ownermodel.spec.js.map +0 -1
  426. package/lib/models/relations.d.ts +0 -181
  427. package/lib/models/relations.js +0 -157
  428. package/lib/models/relations.js.map +0 -1
  429. package/lib/models/relations.spec.d.ts +0 -12
  430. package/lib/models/relations.spec.js +0 -224
  431. package/lib/models/relations.spec.js.map +0 -1
  432. package/lib/models/rolemodel.d.ts +0 -10
  433. package/lib/models/rolemodel.js +0 -35
  434. package/lib/models/rolemodel.js.map +0 -1
  435. package/lib/models/rolemodel.spec.d.ts +0 -1
  436. package/lib/models/rolemodel.spec.js +0 -86
  437. package/lib/models/rolemodel.spec.js.map +0 -1
  438. package/lib/models/user.d.ts +0 -100
  439. package/lib/models/user.js +0 -157
  440. package/lib/models/user.js.map +0 -1
  441. package/lib/models/user.spec.d.ts +0 -1
  442. package/lib/models/user.spec.js +0 -88
  443. package/lib/models/user.spec.js.map +0 -1
  444. package/lib/queues/filequeue.d.ts +0 -58
  445. package/lib/queues/filequeue.js +0 -131
  446. package/lib/queues/filequeue.js.map +0 -1
  447. package/lib/queues/filequeue.spec.d.ts +0 -1
  448. package/lib/queues/filequeue.spec.js +0 -78
  449. package/lib/queues/filequeue.spec.js.map +0 -1
  450. package/lib/queues/memoryqueue.d.ts +0 -45
  451. package/lib/queues/memoryqueue.js +0 -81
  452. package/lib/queues/memoryqueue.js.map +0 -1
  453. package/lib/queues/memoryqueue.spec.d.ts +0 -1
  454. package/lib/queues/memoryqueue.spec.js +0 -192
  455. package/lib/queues/memoryqueue.spec.js.map +0 -1
  456. package/lib/queues/queue.spec.d.ts +0 -5
  457. package/lib/queues/queue.spec.js +0 -55
  458. package/lib/queues/queue.spec.js.map +0 -1
  459. package/lib/router.d.ts +0 -172
  460. package/lib/router.js +0 -419
  461. package/lib/router.js.map +0 -1
  462. package/lib/router.spec.d.ts +0 -1
  463. package/lib/router.spec.js +0 -229
  464. package/lib/router.spec.js.map +0 -1
  465. package/lib/services/asyncevents.d.ts +0 -151
  466. package/lib/services/asyncevents.js +0 -217
  467. package/lib/services/asyncevents.js.map +0 -1
  468. package/lib/services/asyncevents.spec.d.ts +0 -1
  469. package/lib/services/asyncevents.spec.js +0 -118
  470. package/lib/services/asyncevents.spec.js.map +0 -1
  471. package/lib/services/authentication.js +0 -772
  472. package/lib/services/authentication.js.map +0 -1
  473. package/lib/services/authentication.spec.d.ts +0 -1
  474. package/lib/services/authentication.spec.js +0 -458
  475. package/lib/services/authentication.spec.js.map +0 -1
  476. package/lib/services/binary.d.ts +0 -549
  477. package/lib/services/binary.js +0 -986
  478. package/lib/services/binary.js.map +0 -1
  479. package/lib/services/binary.spec.d.ts +0 -44
  480. package/lib/services/binary.spec.js +0 -438
  481. package/lib/services/binary.spec.js.map +0 -1
  482. package/lib/services/cloudbinary.spec.d.ts +0 -13
  483. package/lib/services/cloudbinary.spec.js +0 -192
  484. package/lib/services/cloudbinary.spec.js.map +0 -1
  485. package/lib/services/configuration.js +0 -178
  486. package/lib/services/configuration.js.map +0 -1
  487. package/lib/services/configuration.spec.d.ts +0 -1
  488. package/lib/services/configuration.spec.js +0 -87
  489. package/lib/services/configuration.spec.js.map +0 -1
  490. package/lib/services/cron.d.ts +0 -73
  491. package/lib/services/cron.js +0 -141
  492. package/lib/services/cron.js.map +0 -1
  493. package/lib/services/cron.spec.d.ts +0 -1
  494. package/lib/services/cron.spec.js +0 -76
  495. package/lib/services/cron.spec.js.map +0 -1
  496. package/lib/services/cryptoservice.js +0 -434
  497. package/lib/services/cryptoservice.js.map +0 -1
  498. package/lib/services/cryptoservice.spec.d.ts +0 -1
  499. package/lib/services/cryptoservice.spec.js +0 -177
  500. package/lib/services/cryptoservice.spec.js.map +0 -1
  501. package/lib/services/debugmailer.d.ts +0 -36
  502. package/lib/services/debugmailer.js +0 -52
  503. package/lib/services/debugmailer.js.map +0 -1
  504. package/lib/services/debugmailer.spec.d.ts +0 -1
  505. package/lib/services/debugmailer.spec.js +0 -29
  506. package/lib/services/debugmailer.spec.js.map +0 -1
  507. package/lib/services/domainservice.d.ts +0 -152
  508. package/lib/services/domainservice.js +0 -881
  509. package/lib/services/domainservice.js.map +0 -1
  510. package/lib/services/domainservice.spec.d.ts +0 -1
  511. package/lib/services/domainservice.spec.js +0 -401
  512. package/lib/services/domainservice.spec.js.map +0 -1
  513. package/lib/services/filebinary.d.ts +0 -133
  514. package/lib/services/filebinary.js +0 -371
  515. package/lib/services/filebinary.js.map +0 -1
  516. package/lib/services/filebinary.spec.d.ts +0 -21
  517. package/lib/services/filebinary.spec.js +0 -415
  518. package/lib/services/filebinary.spec.js.map +0 -1
  519. package/lib/services/fileconfiguration.d.ts +0 -22
  520. package/lib/services/fileconfiguration.js +0 -48
  521. package/lib/services/fileconfiguration.js.map +0 -1
  522. package/lib/services/fileconfiguration.spec.d.ts +0 -1
  523. package/lib/services/fileconfiguration.spec.js +0 -177
  524. package/lib/services/fileconfiguration.spec.js.map +0 -1
  525. package/lib/services/invitationservice.d.ts +0 -222
  526. package/lib/services/invitationservice.js +0 -526
  527. package/lib/services/invitationservice.js.map +0 -1
  528. package/lib/services/invitationservice.spec.d.ts +0 -1
  529. package/lib/services/invitationservice.spec.js +0 -516
  530. package/lib/services/invitationservice.spec.js.map +0 -1
  531. package/lib/services/kubernetesconfiguration.d.ts +0 -26
  532. package/lib/services/kubernetesconfiguration.js +0 -54
  533. package/lib/services/kubernetesconfiguration.js.map +0 -1
  534. package/lib/services/kubernetesconfiguration.spec.d.ts +0 -1
  535. package/lib/services/kubernetesconfiguration.spec.js +0 -147
  536. package/lib/services/kubernetesconfiguration.spec.js.map +0 -1
  537. package/lib/services/mailer.d.ts +0 -165
  538. package/lib/services/mailer.js +0 -176
  539. package/lib/services/mailer.js.map +0 -1
  540. package/lib/services/mailer.spec.d.ts +0 -1
  541. package/lib/services/mailer.spec.js +0 -144
  542. package/lib/services/mailer.spec.js.map +0 -1
  543. package/lib/services/notificationservice.js.map +0 -1
  544. package/lib/services/notificationservice.spec.d.ts +0 -1
  545. package/lib/services/notificationservice.spec.js +0 -78
  546. package/lib/services/notificationservice.spec.js.map +0 -1
  547. package/lib/services/oauth.spec.d.ts +0 -1
  548. package/lib/services/oauth.spec.js +0 -184
  549. package/lib/services/oauth.spec.js.map +0 -1
  550. package/lib/services/prometheus.js +0 -160
  551. package/lib/services/prometheus.js.map +0 -1
  552. package/lib/services/prometheus.spec.d.ts +0 -1
  553. package/lib/services/prometheus.spec.js +0 -57
  554. package/lib/services/prometheus.spec.js.map +0 -1
  555. package/lib/services/resource.d.ts +0 -87
  556. package/lib/services/resource.js +0 -156
  557. package/lib/services/resource.js.map +0 -1
  558. package/lib/services/resource.spec.d.ts +0 -1
  559. package/lib/services/resource.spec.js +0 -122
  560. package/lib/services/resource.spec.js.map +0 -1
  561. package/lib/services/service.spec.d.ts +0 -1
  562. package/lib/services/service.spec.js +0 -268
  563. package/lib/services/service.spec.js.map +0 -1
  564. package/lib/stores/aggregator.d.ts +0 -41
  565. package/lib/stores/aggregator.js +0 -80
  566. package/lib/stores/aggregator.js.map +0 -1
  567. package/lib/stores/aliasstore.d.ts +0 -108
  568. package/lib/stores/aliasstore.js +0 -168
  569. package/lib/stores/aliasstore.js.map +0 -1
  570. package/lib/stores/aliasstore.spec.d.ts +0 -11
  571. package/lib/stores/aliasstore.spec.js +0 -89
  572. package/lib/stores/aliasstore.spec.js.map +0 -1
  573. package/lib/stores/file.d.ts +0 -107
  574. package/lib/stores/file.js +0 -188
  575. package/lib/stores/file.js.map +0 -1
  576. package/lib/stores/file.spec.d.ts +0 -19
  577. package/lib/stores/file.spec.js +0 -232
  578. package/lib/stores/file.spec.js.map +0 -1
  579. package/lib/stores/mapper.d.ts +0 -149
  580. package/lib/stores/mapper.js +0 -293
  581. package/lib/stores/mapper.js.map +0 -1
  582. package/lib/stores/mapper.spec.d.ts +0 -1
  583. package/lib/stores/mapper.spec.js +0 -160
  584. package/lib/stores/mapper.spec.js.map +0 -1
  585. package/lib/stores/memory.d.ts +0 -151
  586. package/lib/stores/memory.js +0 -371
  587. package/lib/stores/memory.js.map +0 -1
  588. package/lib/stores/memory.spec.d.ts +0 -20
  589. package/lib/stores/memory.spec.js +0 -328
  590. package/lib/stores/memory.spec.js.map +0 -1
  591. package/lib/stores/modelmapper.d.ts +0 -61
  592. package/lib/stores/modelmapper.js +0 -199
  593. package/lib/stores/modelmapper.js.map +0 -1
  594. package/lib/stores/store.spec.d.ts +0 -65
  595. package/lib/stores/store.spec.js +0 -906
  596. package/lib/stores/store.spec.js.map +0 -1
  597. package/lib/test.d.ts +0 -162
  598. package/lib/test.js +0 -399
  599. package/lib/test.js.map +0 -1
  600. package/lib/unpackedapplication.d.ts +0 -76
  601. package/lib/unpackedapplication.js +0 -299
  602. package/lib/unpackedapplication.js.map +0 -1
  603. package/lib/utils/abstractdeployer.spec.d.ts +0 -1
  604. package/lib/utils/abstractdeployer.spec.js +0 -21
  605. package/lib/utils/abstractdeployer.spec.js.map +0 -1
  606. package/lib/utils/case.d.ts +0 -7
  607. package/lib/utils/case.js +0 -43
  608. package/lib/utils/case.js.map +0 -1
  609. package/lib/utils/case.spec.d.ts +0 -1
  610. package/lib/utils/case.spec.js +0 -50
  611. package/lib/utils/case.spec.js.map +0 -1
  612. package/lib/utils/context.d.ts +0 -462
  613. package/lib/utils/context.js +0 -732
  614. package/lib/utils/context.js.map +0 -1
  615. package/lib/utils/context.spec.d.ts +0 -9
  616. package/lib/utils/context.spec.js +0 -372
  617. package/lib/utils/context.spec.js.map +0 -1
  618. package/lib/utils/cookie.js.map +0 -1
  619. package/lib/utils/cookie.spec.d.ts +0 -1
  620. package/lib/utils/cookie.spec.js +0 -78
  621. package/lib/utils/cookie.spec.js.map +0 -1
  622. package/lib/utils/esm.d.ts +0 -13
  623. package/lib/utils/esm.js +0 -19
  624. package/lib/utils/esm.js.map +0 -1
  625. package/lib/utils/httpcontext.js.map +0 -1
  626. package/lib/utils/httpcontext.spec.d.ts +0 -4
  627. package/lib/utils/httpcontext.spec.js +0 -77
  628. package/lib/utils/httpcontext.spec.js.map +0 -1
  629. package/lib/utils/logger.d.ts +0 -91
  630. package/lib/utils/logger.js +0 -121
  631. package/lib/utils/logger.js.map +0 -1
  632. package/lib/utils/logger.spec.d.ts +0 -1
  633. package/lib/utils/logger.spec.js +0 -48
  634. package/lib/utils/logger.spec.js.map +0 -1
  635. package/lib/utils/serializers.d.ts +0 -161
  636. package/lib/utils/serializers.js +0 -420
  637. package/lib/utils/serializers.js.map +0 -1
  638. package/lib/utils/serializers.spec.d.ts +0 -1
  639. package/lib/utils/serializers.spec.js +0 -313
  640. package/lib/utils/serializers.spec.js.map +0 -1
  641. package/lib/utils/session.d.ts +0 -126
  642. package/lib/utils/session.js +0 -166
  643. package/lib/utils/session.js.map +0 -1
  644. package/lib/utils/session.spec.d.ts +0 -1
  645. package/lib/utils/session.spec.js +0 -71
  646. package/lib/utils/session.spec.js.map +0 -1
  647. package/lib/utils/throttler.d.ts +0 -102
  648. package/lib/utils/throttler.js +0 -168
  649. package/lib/utils/throttler.js.map +0 -1
  650. package/lib/utils/throttler.spec.d.ts +0 -1
  651. package/lib/utils/throttler.spec.js +0 -55
  652. package/lib/utils/throttler.spec.js.map +0 -1
  653. package/lib/utils/waiter.d.ts +0 -93
  654. package/lib/utils/waiter.js +0 -148
  655. package/lib/utils/waiter.js.map +0 -1
  656. package/lib/utils/waiter.spec.d.ts +0 -1
  657. package/lib/utils/waiter.spec.js +0 -98
  658. package/lib/utils/waiter.spec.js.map +0 -1
  659. package/test/config-file-missing-file-no-default.json +0 -44
  660. package/test/config-file-missing-file.json +0 -55
  661. package/test/config-file-no-reload.json +0 -69
  662. package/test/config-file-reload.json +0 -68
  663. package/test/config-invitation.json +0 -63
  664. package/test/config-kube-reload.json +0 -68
  665. package/test/config-reload.json +0 -66
  666. package/test/config.old.json +0 -152
  667. package/test/jsonutils/mdocs.yaml +0 -56
  668. package/test/jsonutils/test.json +0 -3
  669. package/test/jsonutils/test.yml +0 -5
  670. package/test/moddas/annotatedservice.js +0 -23
  671. package/test/moddas/debugmailer.js +0 -13
  672. package/test/moddas/fakeservice.js +0 -4
  673. package/test/moddas/voidstore.js +0 -66
  674. package/test/models/ident.js +0 -36
  675. package/test/models/task.js +0 -42
@@ -0,0 +1,673 @@
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 { Service } from "./service.js";
36
+ import { Command } from "./command.js";
37
+ import { WebContext } from "../contexts/webcontext.js";
38
+ import { OperationContext } from "../contexts/operationcontext.js";
39
+ import { ServiceParameters } from "../services/serviceparameters.js";
40
+ import { emitCoreEvent } from "../events/events.js";
41
+ import { createServer } from "node:http";
42
+ import { createServer as createHttpsServer } from "node:https";
43
+ import { createSecureServer, createServer as createHttp2Server } from "node:http2";
44
+ import { HttpContext } from "../contexts/httpcontext.js";
45
+ import { createChecker } from "is-in-subnet";
46
+ import { useLog } from "@webda/workout";
47
+ import { CancelablePromise } from "@webda/utils";
48
+ import { useRouter } from "../rest/hooks.js";
49
+ import { runWithContext } from "../contexts/execution.js";
50
+ import { readFileSync, existsSync, mkdirSync } from "node:fs";
51
+ import { execFileSync } from "node:child_process";
52
+ import { AsyncResource } from "node:async_hooks";
53
+ import { join } from "node:path";
54
+ import { serialize as cookieSerialize } from "cookie";
55
+ /**
56
+ * How long a connection to a TLS port may stay silent before it is dropped,
57
+ * while it is not yet known whether it speaks TLS or plain HTTP
58
+ */
59
+ const TLS_GATE_TIMEOUT = 30000;
60
+ /** Parameters for the HTTP server including request limits, timeouts, TLS, and proxy settings */
61
+ export class HttpServerParameters extends ServiceParameters {
62
+ /**
63
+ * Will not try to parse request bigger than this
64
+ *
65
+ * This parameter can be overriden by a direct call to
66
+ * getHttpContext().getRawBody(xxx)
67
+ *
68
+ * @default 10Mb
69
+ */
70
+ requestLimit;
71
+ /**
72
+ * Will not take more than this to read a request (unit: milliseconds)
73
+ *
74
+ * This parameter can be overriden by a direct call to
75
+ * getHttpContext().getRawBody(undefined, xxx)
76
+ *
77
+ * @default 60000
78
+ */
79
+ requestTimeout;
80
+ /**
81
+ * Trust this reverse proxies
82
+ */
83
+ trustedProxies;
84
+ /**
85
+ * Allowed origin for referer that match
86
+ * any of this regexp
87
+ *
88
+ * {@link OriginFilter}
89
+ */
90
+ csrfOrigins;
91
+ /**
92
+ * Default headers to send to the client
93
+ *
94
+ * Having a Cache-Control: private will prevent caching for API
95
+ * If you overwrite this parameter, you will need to add it back
96
+ */
97
+ defaultHeaders;
98
+ /**
99
+ * Port to listen on
100
+ *
101
+ * @default 18080
102
+ */
103
+ port;
104
+ /**
105
+ * Run this instance as an HTTP/2 cleartext (h2c) server rather than
106
+ * HTTP/1.1. The resulting port accepts only prior-knowledge HTTP/2
107
+ * clients (e.g. `grpcurl -plaintext`). To serve both REST (HTTP/1.1)
108
+ * and gRPC without TLS, configure a second HttpServer service with
109
+ * `h2c: true` on a separate port.
110
+ * @default false
111
+ */
112
+ h2c;
113
+ /**
114
+ * TLS key file path — enables HTTPS or HTTP/2
115
+ */
116
+ key;
117
+ /**
118
+ * TLS certificate file path
119
+ */
120
+ cert;
121
+ /**
122
+ * Enable HTTP/2 (default: true when key+cert provided)
123
+ * Set to false for HTTPS without HTTP/2
124
+ */
125
+ http2;
126
+ /**
127
+ * Auto-generate a self-signed certificate on startup when `key`/`cert`
128
+ * aren't configured. Dev convenience: gives the main port HTTP/2 via
129
+ * ALPN (plus HTTP/1.1 fallback) with zero setup. Keys are written under
130
+ * `.webda/dev-tls/`.
131
+ *
132
+ * @default false
133
+ */
134
+ autoTls;
135
+ /**
136
+ * Load parameters with defaults for request limits, timeouts, and proxy configuration
137
+ * @param params - the service parameters
138
+ * @returns this for chaining
139
+ */
140
+ load(params) {
141
+ super.load(params);
142
+ this.requestLimit ??= 10 * 1024 * 1024;
143
+ this.requestTimeout ??= 60000;
144
+ this.trustedProxies ??= [];
145
+ if (typeof params.trustedProxies === "string") {
146
+ this.trustedProxies = params.trustedProxies.split(",").map(n => n.trim());
147
+ }
148
+ return this;
149
+ }
150
+ }
151
+ /** HTTP/1.1-only headers that must be filtered for HTTP/2 */
152
+ const HTTP1_ONLY_HEADERS = ["keep-alive", "connection", "transfer-encoding"];
153
+ /**
154
+ * HTTP server service supporting HTTP/1.1, HTTPS, and HTTP/2
155
+ *
156
+ * @WebdaModda
157
+ */
158
+ let HttpServer = (() => {
159
+ let _classSuper = Service;
160
+ let _instanceExtraInitializers = [];
161
+ let _serve_decorators;
162
+ return class HttpServer extends _classSuper {
163
+ static {
164
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
165
+ _serve_decorators = [Command("serve", { description: "Start the HTTP server", requires: ["router", "rest-domain"] })];
166
+ __esDecorate(this, null, _serve_decorators, { kind: "method", name: "serve", static: false, private: false, access: { has: obj => "serve" in obj, get: obj => obj.serve }, metadata: _metadata }, null, _instanceExtraInitializers);
167
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
168
+ }
169
+ /** Registered context providers */
170
+ contextProviders = (__runInitializers(this, _instanceExtraInitializers), [
171
+ {
172
+ getContext: (info) => {
173
+ if (info.http) {
174
+ return new WebContext(info.http, info.stream);
175
+ }
176
+ return new OperationContext(info.stream);
177
+ }
178
+ }
179
+ ]);
180
+ server;
181
+ /**
182
+ * Resolvers of the pending serve() promises, settled when the service stops
183
+ */
184
+ serving = new Set();
185
+ /** In TLS mode, the server answering plain HTTP with a redirect */
186
+ redirectServer;
187
+ subnetChecker;
188
+ /** Whether this server uses HTTP/2 */
189
+ isHttp2 = false;
190
+ /**
191
+ * Extra request handlers — matched first, before the default web request
192
+ * pipeline. Used to plug in alternate wire protocols (gRPC) that share the
193
+ * same port. Each interceptor returns true when it handles the request.
194
+ */
195
+ interceptors = [];
196
+ /**
197
+ * Register an additional low-level request handler. Interceptors are
198
+ * checked in registration order; the first one that returns true short-
199
+ * circuits the default pipeline. Typical use: gRPC dispatcher that matches
200
+ * `content-type: application/grpc`.
201
+ * @param handler - returns true when it has taken ownership of the request
202
+ */
203
+ registerRequestInterceptor(handler) {
204
+ this.interceptors.push(handler);
205
+ }
206
+ /**
207
+ * Flush response headers from WebContext to the underlying response stream.
208
+ * Handles both HTTP/1.1 (writeHead) and HTTP/2 (setHeader + statusCode) patterns.
209
+ *
210
+ * @param ctx - the web context with stored headers
211
+ */
212
+ flushHeaders(ctx) {
213
+ const res = ctx._stream;
214
+ if (res.headersSent)
215
+ return;
216
+ const headers = ctx.getResponseHeaders();
217
+ const cookies = ctx.getResponseCookies?.() || {};
218
+ if (this.isHttp2) {
219
+ // HTTP/2: use setHeader individually, filter HTTP/1.1-only headers
220
+ for (const [name, value] of Object.entries(headers)) {
221
+ if (HTTP1_ONLY_HEADERS.includes(name.toLowerCase()))
222
+ continue;
223
+ res.setHeader(name, value);
224
+ }
225
+ for (const i in cookies) {
226
+ res.setHeader("Set-Cookie", cookieSerialize(cookies[i].name, cookies[i].value, cookies[i].options));
227
+ }
228
+ res.statusCode = ctx.getResponseCode();
229
+ }
230
+ else {
231
+ // HTTP/1.1: use writeHead
232
+ for (const i in cookies) {
233
+ headers["Set-Cookie"] = cookieSerialize(cookies[i].name, cookies[i].value, cookies[i].options);
234
+ }
235
+ res.writeHead(ctx.getResponseCode(), headers);
236
+ }
237
+ }
238
+ /**
239
+ * Flush the response body and close the response.
240
+ *
241
+ * @param ctx - the web context with buffered output
242
+ */
243
+ flush(ctx) {
244
+ const res = ctx._stream;
245
+ if (res.writableEnded)
246
+ return;
247
+ this.flushHeaders(ctx);
248
+ res.end(ctx.getOutput() || "");
249
+ }
250
+ /**
251
+ * Handle an incoming HTTP request: create context, route, flush response.
252
+ *
253
+ * @param req - the incoming message
254
+ * @param res - the server response
255
+ */
256
+ async handleRequest(req, res) {
257
+ // Alternate protocols (e.g. gRPC) get first crack at the request — they
258
+ // return true to claim it, otherwise we fall through to the normal web
259
+ // pipeline.
260
+ for (const interceptor of this.interceptors) {
261
+ try {
262
+ if (interceptor(req, res))
263
+ return;
264
+ }
265
+ catch (err) {
266
+ useLog("ERROR", "Request interceptor failed", err);
267
+ }
268
+ }
269
+ try {
270
+ const ctx = await this.getContextFromRequest(req, res);
271
+ if (!ctx) {
272
+ res.writeHead(500);
273
+ res.end();
274
+ return;
275
+ }
276
+ const webCtx = ctx;
277
+ await runWithContext(webCtx, async () => {
278
+ try {
279
+ emitCoreEvent("Webda.Request", { context: webCtx });
280
+ }
281
+ catch { /* listener error */ }
282
+ try {
283
+ await useRouter().execute(webCtx);
284
+ }
285
+ catch (err) {
286
+ webCtx.statusCode = err?.getResponseCode?.() || 500;
287
+ const method = webCtx.getHttpContext().getMethod();
288
+ const url = webCtx.getHttpContext().getUrl();
289
+ // Log 5xx at ERROR and 4xx at DEBUG so validation failures are still
290
+ // visible during development but don't drown the normal log stream.
291
+ if (webCtx.statusCode >= 500) {
292
+ useLog("ERROR", `${method} ${url} → ${webCtx.statusCode}`, err);
293
+ }
294
+ else if (webCtx.statusCode >= 400) {
295
+ useLog("WARN", `${method} ${url} → ${webCtx.statusCode}: ${err?.message ?? err}`);
296
+ }
297
+ // Stash the error on the context so listeners (e.g. debug capture)
298
+ // can include it in the request log entry.
299
+ webCtx.setExtension("error", err);
300
+ // Write a body so the client actually sees the failure. For 4xx we
301
+ // include the message + structured details (e.g. AJV errors[] from
302
+ // input-schema validation). For 5xx we hide internal details.
303
+ if (!webCtx.hasFlushedHeaders?.() && (webCtx.getOutput?.() ?? "") === "") {
304
+ if (webCtx.statusCode >= 500) {
305
+ webCtx.write({
306
+ error: {
307
+ code: err?.code ?? "INTERNAL_SERVER_ERROR",
308
+ message: "Internal server error"
309
+ }
310
+ });
311
+ }
312
+ else {
313
+ const body = {
314
+ code: err?.code ?? "BAD_REQUEST",
315
+ message: err?.message ?? String(err)
316
+ };
317
+ if (err?.details !== undefined)
318
+ body.details = err.details;
319
+ webCtx.write({ error: body });
320
+ }
321
+ }
322
+ }
323
+ // Always emit the Result event — both success and error paths converge
324
+ // here so that subscribers see every request reach a terminal state.
325
+ try {
326
+ emitCoreEvent("Webda.Result", { context: webCtx });
327
+ }
328
+ catch { /* listener error */ }
329
+ });
330
+ // Flush response — skip if pipeline/streaming already handled it
331
+ if (!res.writableEnded && !res.headersSent) {
332
+ this.flush(webCtx);
333
+ }
334
+ else if (!res.writableEnded) {
335
+ // Headers sent (by flushHeaders in pipeline path) but body not ended
336
+ res.end(webCtx.getOutput() || "");
337
+ }
338
+ }
339
+ catch (err) {
340
+ useLog("ERROR", "Unhandled error in HTTP request handler", err);
341
+ if (!res.writableEnded) {
342
+ if (!res.headersSent)
343
+ res.writeHead(500);
344
+ res.end();
345
+ }
346
+ }
347
+ }
348
+ /**
349
+ * Serve HTTP until the service stops
350
+ *
351
+ * The returned promise stays pending while the server runs: it resolves when the
352
+ * service stops, and cancelling it closes the server.
353
+ * Use {@link start} to only wait for the server to listen.
354
+ *
355
+ * @param bind - the bind address
356
+ * @param port - the port number
357
+ * @returns a promise settled once the server is stopped
358
+ */
359
+ serve(bind, port) {
360
+ return new CancelablePromise((resolve, reject) => {
361
+ this.start(bind, port).then(() => {
362
+ this.serving.add(resolve);
363
+ }, reject);
364
+ }, async () => {
365
+ await this.closeServer();
366
+ });
367
+ }
368
+ /**
369
+ * Start the HTTP server
370
+ * @param bind - the bind address
371
+ * @param port - the port number
372
+ * @returns a promise resolved once the server listens
373
+ */
374
+ async start(bind, port) {
375
+ this.parameters.with(params => {
376
+ // `??`, not `||`: port 0 asks the OS for a free port
377
+ const listenPort = port ?? params.port ?? 18080;
378
+ useLog("INFO", `Starting HTTP server on ${bind ?? "0.0.0.0"}:${listenPort}`);
379
+ // Node.js pipeline() emits ERR_STREAM_PREMATURE_CLOSE as uncaughtException
380
+ // when piping to ServerResponse. Suppress this specific error.
381
+ if (!process.listeners("uncaughtExceptionMonitor").find((l) => l._webda)) {
382
+ const monitor = function _webdaMonitor() { };
383
+ monitor._webda = true;
384
+ process.on("uncaughtExceptionMonitor", monitor);
385
+ }
386
+ if (!process.listeners("uncaughtException").find((l) => l._webda)) {
387
+ const handler = function _webdaHandler(err) {
388
+ if (err?.code === "ERR_STREAM_PREMATURE_CLOSE")
389
+ return;
390
+ useLog("ERROR", "Uncaught exception", err);
391
+ process.exit(1);
392
+ };
393
+ handler._webda = true;
394
+ process.on("uncaughtException", handler);
395
+ }
396
+ if (this.server) {
397
+ this.server.close();
398
+ }
399
+ // Auto-generate a dev self-signed cert when autoTls is on and nothing is
400
+ // already configured — gives the port HTTP/2 via ALPN for free.
401
+ if (params.autoTls && !(params.key && params.cert)) {
402
+ const { key, cert } = this.ensureDevTlsCert();
403
+ params.key = key;
404
+ params.cert = cert;
405
+ }
406
+ // Create server based on configuration. The same HttpServer class runs
407
+ // in three modes — one instance per mode, one port per instance. Mix
408
+ // modes by configuring multiple HttpServer services (e.g. a TLS one
409
+ // for REST/GraphQL and a second h2c one for gRPC without TLS).
410
+ if (params.key && params.cert) {
411
+ // TLS — HTTP/2 via ALPN with HTTP/1.1 fallback (or plain HTTPS).
412
+ const tlsOptions = {
413
+ key: readFileSync(params.key),
414
+ cert: readFileSync(params.cert),
415
+ allowHTTP1: true
416
+ };
417
+ let tlsServer;
418
+ if (params.http2 !== false) {
419
+ this.isHttp2 = true;
420
+ tlsServer = createSecureServer(tlsOptions, (req, res) => {
421
+ if (req.headers[":authority"]) {
422
+ const [host] = req.headers[":authority"].split(":");
423
+ req.headers.host = host;
424
+ }
425
+ this.handleRequest(req, res);
426
+ });
427
+ }
428
+ else {
429
+ tlsServer = createHttpsServer(tlsOptions, (req, res) => this.handleRequest(req, res));
430
+ }
431
+ this.redirectPlainHttp(tlsServer);
432
+ this.server = tlsServer;
433
+ }
434
+ else if (params.h2c) {
435
+ // Prior-knowledge HTTP/2 cleartext — for gRPC clients without TLS.
436
+ this.isHttp2 = true;
437
+ this.server = createHttp2Server((req, res) => this.handleRequest(req, res));
438
+ }
439
+ else {
440
+ // Plain HTTP/1.1
441
+ this.server = createServer((req, res) => this.handleRequest(req, res));
442
+ }
443
+ // Ensure routes are mapped before accepting requests
444
+ useRouter().remapRoutes();
445
+ this.server.listen(listenPort, bind);
446
+ if (params.key && params.cert) {
447
+ useLog("INFO", `Serving https://${bind ?? "localhost"}:${listenPort} (http:// redirects to https)`);
448
+ }
449
+ // Emit on both channels: core event for decoupled listeners (gRPC
450
+ // interceptor, graphql ws handler) and the service-level event for
451
+ // anyone still listening via `this.on(...)`.
452
+ this.emit("Webda.Init.Http", this.server);
453
+ emitCoreEvent("Webda.Init.Http", this.server);
454
+ });
455
+ // Set up trusted proxy checker
456
+ this.parameters.with(params => {
457
+ this.subnetChecker = createChecker(params.trustedProxies.map(n => (n.indexOf("/") < 0 ? `${n.trim()}/32` : n.trim())));
458
+ });
459
+ const server = this.server;
460
+ if (!server.listening) {
461
+ await new Promise((resolve, reject) => {
462
+ const onError = (err) => {
463
+ server.off("listening", onListening);
464
+ reject(err);
465
+ };
466
+ const onListening = () => {
467
+ server.off("error", onError);
468
+ resolve();
469
+ };
470
+ server.once("listening", onListening);
471
+ server.once("error", onError);
472
+ });
473
+ }
474
+ }
475
+ /**
476
+ * Close the HTTP server, dropping its open connections
477
+ * @returns a promise resolved once the server is closed
478
+ */
479
+ async closeServer() {
480
+ // Its connections never reach `server`: close them too (clients keep them alive)
481
+ this.redirectServer?.closeAllConnections();
482
+ const server = this.server;
483
+ if (!server?.listening) {
484
+ return;
485
+ }
486
+ await new Promise(resolve => {
487
+ server.close(() => resolve());
488
+ // Keep-alive connections would hold close() until they time out
489
+ server.closeAllConnections?.();
490
+ // HTTP/2 sessions have no closeAllConnections: do not wait for them forever
491
+ setTimeout(resolve, 1000).unref();
492
+ });
493
+ }
494
+ /**
495
+ * Address the server is listening on, or null before it listens
496
+ * @returns the bound address
497
+ */
498
+ address() {
499
+ return this.server?.address() ?? null;
500
+ }
501
+ /**
502
+ * Accept plain HTTP on a TLS port. TLS handshakes go to the TLS server as
503
+ * before; anything else gets a 308 redirect to the same URL over https,
504
+ * where a browser typing `localhost:<port>` would otherwise get an empty
505
+ * response.
506
+ *
507
+ * Node's TLS server wraps each accepted socket in its single `connection`
508
+ * listener; that listener is wrapped so the server keeps owning the port
509
+ * (`listening`, `address()` and the `Webda.Init.Http` hooks are unchanged).
510
+ * @param tlsServer - the TLS server handling the application
511
+ */
512
+ redirectPlainHttp(tlsServer) {
513
+ const listeners = tlsServer.listeners("connection");
514
+ if (listeners.length !== 1) {
515
+ useLog("WARN", "Cannot redirect plain HTTP to https on this Node.js version");
516
+ return;
517
+ }
518
+ const handshake = listeners[0];
519
+ const redirect = (this.redirectServer = createServer((req, res) => {
520
+ res.writeHead(308, { Location: `https://${req.headers.host ?? "localhost"}${req.url ?? "/"}` });
521
+ res.end();
522
+ }));
523
+ tlsServer.removeListener("connection", handshake);
524
+ tlsServer.on("connection", (socket) => {
525
+ // Until the first bytes arrive, nobody else owns the socket
526
+ const drop = () => socket.destroy();
527
+ socket.on("error", drop);
528
+ socket.setTimeout(TLS_GATE_TIMEOUT, drop);
529
+ // Hand the socket over in this callback's async context, as the TLS
530
+ // server would have: request handling needs Webda's instance storage
531
+ socket.once("data", AsyncResource.bind((chunk) => {
532
+ socket.off("error", drop);
533
+ socket.setTimeout(0);
534
+ socket.pause();
535
+ socket.unshift(chunk);
536
+ // 0x16 opens a TLS handshake record
537
+ if (chunk[0] === 0x16) {
538
+ handshake.call(tlsServer, socket);
539
+ }
540
+ else {
541
+ redirect.emit("connection", socket);
542
+ }
543
+ process.nextTick(() => socket.resume());
544
+ }));
545
+ });
546
+ }
547
+ /** @override */
548
+ async stop() {
549
+ await super.stop();
550
+ await this.closeServer();
551
+ // Settle the pending serve() promises
552
+ for (const resolve of this.serving) {
553
+ resolve();
554
+ }
555
+ this.serving.clear();
556
+ }
557
+ /**
558
+ * Ensure a self-signed TLS key+cert exists under `.webda/dev-tls/` and
559
+ * return their paths. Used by {@link HttpServerParameters.autoTls} to bring
560
+ * up HTTPS/HTTP2 on the dev server with zero setup. Dev-only — real
561
+ * deploys should supply a proper cert via `key`/`cert` params.
562
+ *
563
+ * @returns absolute paths to the generated key and cert files
564
+ */
565
+ ensureDevTlsCert() {
566
+ const dir = join(process.cwd(), ".webda", "dev-tls");
567
+ const key = join(dir, "key.pem");
568
+ const cert = join(dir, "cert.pem");
569
+ if (existsSync(key) && existsSync(cert)) {
570
+ return { key, cert };
571
+ }
572
+ mkdirSync(dir, { recursive: true });
573
+ // SAN on localhost/127.0.0.1 so browsers and grpcurl skip hostname
574
+ // complaints when -k / -insecure is used.
575
+ try {
576
+ execFileSync("openssl", [
577
+ "req", "-x509", "-newkey", "rsa:2048",
578
+ "-keyout", key,
579
+ "-out", cert,
580
+ "-days", "365",
581
+ "-nodes",
582
+ "-subj", "/CN=localhost",
583
+ "-addext", "subjectAltName=DNS:localhost,IP:127.0.0.1,IP:0.0.0.0"
584
+ ], { stdio: "pipe" });
585
+ }
586
+ catch (err) {
587
+ throw new Error(`autoTls: failed to generate self-signed cert via openssl — ${err}`);
588
+ }
589
+ this.log("INFO", `generated self-signed dev cert at ${dir}`);
590
+ return { key, cert };
591
+ }
592
+ /**
593
+ * Create a WebContext from an HTTP request
594
+ * @param req - the incoming message
595
+ * @param res - the server response
596
+ * @returns the context, or undefined if request should be rejected
597
+ */
598
+ async getContextFromRequest(req, res) {
599
+ let vhost = req.headers.host?.match(/:/g)
600
+ ? req.headers.host.slice(0, req.headers.host.indexOf(":"))
601
+ : req.headers.host || "localhost";
602
+ if ((req.headers["x-forwarded-for"] ||
603
+ req.headers["x-forwarded-host"] ||
604
+ req.headers["x-forwarded-proto"] ||
605
+ req.headers["x-forwarded-port"]) &&
606
+ !this.isProxyTrusted(req.socket?.remoteAddress)) {
607
+ this.log("WARN", `X-Forwarded-* headers set from an unknown source: ${req.socket?.remoteAddress}`);
608
+ res?.writeHead(400);
609
+ return;
610
+ }
611
+ if (req.headers["x-forwarded-host"] !== undefined) {
612
+ vhost = req.headers["x-forwarded-host"];
613
+ }
614
+ let protocol = this.isHttp2 ? "https" : "http";
615
+ if (req.headers["x-forwarded-proto"] !== undefined) {
616
+ protocol = req.headers["x-forwarded-proto"];
617
+ }
618
+ let port;
619
+ if (req.socket && req.socket.address()) {
620
+ port = req.socket.address().port;
621
+ }
622
+ if (req.headers["x-forwarded-port"] !== undefined) {
623
+ port = parseInt(req.headers["x-forwarded-port"]);
624
+ }
625
+ else if (req.headers["x-forwarded-proto"] !== undefined) {
626
+ port = protocol === "http" ? 80 : 443;
627
+ }
628
+ // Filter HTTP/2 pseudo-headers from the headers object
629
+ const headers = this.isHttp2
630
+ ? Object.fromEntries(Object.entries(req.headers).filter(([k]) => !k.startsWith(":")))
631
+ : req.headers;
632
+ const httpContext = new HttpContext(vhost, req.method, req.url, protocol, port, headers);
633
+ httpContext.setClientIp(httpContext.getUniqueHeader("x-forwarded-for", req.socket?.remoteAddress));
634
+ if (["PUT", "PATCH", "POST", "DELETE"].includes(req.method)) {
635
+ httpContext.setBody(req);
636
+ }
637
+ return this.newContext({ http: httpContext, stream: res });
638
+ }
639
+ /**
640
+ * Check if a proxy is a trusted proxy
641
+ * @param ip - the IP address
642
+ * @returns true if the proxy is trusted
643
+ */
644
+ isProxyTrusted(ip) {
645
+ return this.subnetChecker?.(ip) ?? false;
646
+ }
647
+ /**
648
+ * Create a context from provider info
649
+ * @param info - the context provider info
650
+ * @param noInit - skip initialization
651
+ * @returns the created context
652
+ */
653
+ async newContext(info, noInit = false) {
654
+ let context;
655
+ this.contextProviders.find(provider => (context = provider.getContext(info)) !== undefined);
656
+ if (!noInit) {
657
+ await context.init();
658
+ }
659
+ await emitCoreEvent("Webda.NewContext", { context, info });
660
+ return context;
661
+ }
662
+ /**
663
+ * Register a new context provider (prepended, higher priority)
664
+ * @param provider - the context provider
665
+ */
666
+ registerContextProvider(provider) {
667
+ this.contextProviders ??= [];
668
+ this.contextProviders.unshift(provider);
669
+ }
670
+ };
671
+ })();
672
+ export { HttpServer };
673
+ //# sourceMappingURL=httpserver.service.js.map