@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,843 @@
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 uriTemplates from "uri-templates";
36
+ import { useApplication, useModelId } from "../application/hooks.js";
37
+ import { Command } from "../services/command.js";
38
+ import { useLog, useOutput } from "../loggers/hooks.js";
39
+ import { useParameters } from "../application/hooks.js";
40
+ import { useDynamicService } from "../core/hooks.js";
41
+ import { deepmerge } from "deepmerge-ts";
42
+ import { Service } from "../services/service.js";
43
+ import { ServiceParameters } from "../services/serviceparameters.js";
44
+ import { getMetadata } from "@webda/decorators";
45
+ import { templateVariables } from "../templates/templates.js";
46
+ import { emitCoreEvent, useCoreEvents } from "../events/events.js";
47
+ import { useInstanceStorage } from "../core/instancestorage.js";
48
+ import { FileUtils } from "@webda/utils";
49
+ /** Parameters for the Router service */
50
+ export class RouterParameters extends ServiceParameters {
51
+ /**
52
+ * Display a WARNING if a route is overriden
53
+ */
54
+ overrideWarning;
55
+ }
56
+ /**
57
+ * Manage Route resolution
58
+ * @category CoreFeatures
59
+ *
60
+ * @WebdaModda
61
+ */
62
+ let Router = (() => {
63
+ let _classSuper = Service;
64
+ let _instanceExtraInitializers = [];
65
+ let _openapi_decorators;
66
+ return class Router extends _classSuper {
67
+ static {
68
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
69
+ _openapi_decorators = [Command("openapi", { description: "Export the OpenAPI definition", requires: ["router", "rest-domain"] })];
70
+ __esDecorate(this, null, _openapi_decorators, { kind: "method", name: "openapi", static: false, private: false, access: { has: obj => "openapi" in obj, get: obj => obj.openapi }, metadata: _metadata }, null, _instanceExtraInitializers);
71
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
72
+ }
73
+ /**
74
+ * Routes
75
+ */
76
+ routes = (__runInitializers(this, _instanceExtraInitializers), new Map());
77
+ /**
78
+ *
79
+ */
80
+ pathMap;
81
+ models = new Map();
82
+ /**
83
+ * Request filters to apply
84
+ */
85
+ _requestFilters = [];
86
+ /**
87
+ * Request filters to apply for CORS
88
+ */
89
+ _requestCORSFilters = [];
90
+ /**
91
+ * Registration of a model
92
+ * @param model - the model to use
93
+ * @param url - the URL
94
+ */
95
+ registerModelUrl(model, url) {
96
+ this.models.set(model, url);
97
+ }
98
+ /**
99
+ * Resolve dependencies and wire up core lifecycle listeners.
100
+ *
101
+ * The Router pulls its inputs from events rather than being driven by
102
+ * `Core.init()` directly:
103
+ * - `Webda.Init.Services` — scan every resolved service for
104
+ * `@Route` metadata and filter capabilities.
105
+ * - `Webda.Init` — finalize the URI template index after all routes
106
+ * (dynamic or decorator-based) have been registered.
107
+ *
108
+ * @returns the result
109
+ */
110
+ resolve() {
111
+ // Register as the instance router
112
+ useInstanceStorage().router = this;
113
+ // Discover routes + filters once every service is resolved and initialized
114
+ useCoreEvents("Webda.Init.Services", services => {
115
+ const list = Object.values(services);
116
+ this.discoverFilters(list);
117
+ this.discoverRoutes(list);
118
+ });
119
+ // Remap route
120
+ useCoreEvents("Webda.Init", () => {
121
+ this.remapRoutes();
122
+ });
123
+ return super.resolve();
124
+ }
125
+ /**
126
+ * Return the route for model
127
+ * @param model - the model to use
128
+ * @returns the result
129
+ */
130
+ getModelUrl(model) {
131
+ if (typeof model !== "string") {
132
+ model = useModelId(model);
133
+ }
134
+ return this.models.get(model);
135
+ }
136
+ /**
137
+ * Include prefix to the url if not present
138
+ * @param url - the URL
139
+ * @returns the result string
140
+ */
141
+ getFinalUrl(url) {
142
+ // We have to replace all @ by %40 as it is allowed in url rfc (https://www.rfc-editor.org/rfc/rfc3986#page-22)
143
+ // But disallowed in https://www.rfc-editor.org/rfc/rfc6570#section-3.2.1
144
+ // Similar for / in query string
145
+ url = url.replace(/@/g, "%40");
146
+ if (url.includes("?")) {
147
+ url = url.substring(0, url.indexOf("?")) + "?" + url.substring(url.indexOf("?") + 1).replace(/\//g, "%2F");
148
+ }
149
+ const prefix = useParameters().routePrefix || "";
150
+ if (prefix && url.startsWith(prefix)) {
151
+ return url;
152
+ }
153
+ // Absolute url
154
+ if (url.startsWith("//")) {
155
+ return url.substring(1);
156
+ }
157
+ return `${prefix}${url}`;
158
+ }
159
+ /**
160
+ * Return routes
161
+ * @returns the result
162
+ */
163
+ getRoutes() {
164
+ return this.routes;
165
+ }
166
+ /**
167
+ * Add a route dynamicaly
168
+ *
169
+ * @param {String} url of the route can contains dynamic part like {uuid}
170
+ * @param {Object} info the type of executor
171
+ */
172
+ addRouteToRouter(url, info) {
173
+ const finalUrl = this.getFinalUrl(url);
174
+ useLog("TRACE", `Add route ${info.methods.join(",")} ${finalUrl}`);
175
+ info.openapi ??= {};
176
+ if (this.routes[finalUrl]) {
177
+ // If route is already added do not do anything
178
+ if (this.routes[finalUrl].includes(info)) {
179
+ return;
180
+ }
181
+ // Check and add warning if same method is used
182
+ if (this.parameters.overrideWarning) {
183
+ const methods = this.routes[finalUrl].map((r) => r.methods).flat();
184
+ info.methods.forEach(m => {
185
+ if (methods.indexOf(m) >= 0) {
186
+ if (!info.override) {
187
+ useLog("WARN", `${m} ${finalUrl} overlap with another defined route`);
188
+ }
189
+ }
190
+ });
191
+ }
192
+ // Last added need to be overriding
193
+ this.routes[finalUrl].unshift(info);
194
+ }
195
+ else {
196
+ this.routes[finalUrl] = [info];
197
+ }
198
+ if (this.getState() === "running") {
199
+ this.remapRoutes();
200
+ }
201
+ }
202
+ /**
203
+ * Remove a route dynamicly
204
+ *
205
+ * @param {String} url to remove
206
+ * @param info - the information object
207
+ */
208
+ removeRoute(url, info = undefined) {
209
+ const finalUrl = this.getFinalUrl(url);
210
+ if (!info) {
211
+ delete this.routes[finalUrl];
212
+ }
213
+ else if (this.routes[finalUrl] && this.routes[finalUrl].includes(info)) {
214
+ this.routes[finalUrl].splice(this.routes[finalUrl].indexOf(info), 1);
215
+ }
216
+ this.remapRoutes();
217
+ }
218
+ /**
219
+ * Reinit all routes
220
+ *
221
+ * It will readd the URITemplates if needed
222
+ * Sort all routes again
223
+ */
224
+ remapRoutes() {
225
+ // Might need to ensure each routes is prefixed
226
+ const prefix = useParameters().routePrefix || "";
227
+ if (prefix) {
228
+ Object.keys(this.routes)
229
+ .filter(k => !k.startsWith(prefix))
230
+ .forEach(k => {
231
+ this.routes[this.getFinalUrl(k)] = this.routes[k];
232
+ delete this.routes[k];
233
+ });
234
+ }
235
+ this.initURITemplates(this.routes);
236
+ // Order path desc
237
+ this.pathMap = [];
238
+ for (const i in this.routes) {
239
+ // Might need to trail the query string
240
+ this.routes[i].forEach((config) => {
241
+ this.pathMap.push({
242
+ url: i,
243
+ config
244
+ });
245
+ });
246
+ }
247
+ this.pathMap.sort(this.comparePath);
248
+ }
249
+ /**
250
+ * Compare two route paths for sorting, prioritizing literal segments over parameters
251
+ * @param a - the first route
252
+ * @param b - the second route
253
+ * @returns the result number
254
+ */
255
+ comparePath(a, b) {
256
+ // Normal node works with localeCompare but not Lambda...
257
+ // Local compare { to a return: 26 on Lambda
258
+ const bs = b.url.replace(/\{[^{}]+}/, "{}").split("/");
259
+ const as = a.url.replace(/\{[^{}]+}/, "{}").split("/");
260
+ for (const i in as) {
261
+ if (bs[i] === undefined)
262
+ return -1;
263
+ if (as[i] === bs[i])
264
+ continue;
265
+ if (as[i][0] === "{" && bs[i][0] !== "{")
266
+ return 1;
267
+ if (as[i][0] !== "{" && bs[i][0] === "{")
268
+ return -1;
269
+ return bs[i] < as[i] ? -1 : 1;
270
+ }
271
+ return 1;
272
+ }
273
+ /**
274
+ * @hidden
275
+ * @param config - the configuration
276
+ */
277
+ initURITemplates(config) {
278
+ // Prepare tbe URI parser
279
+ for (const map in config) {
280
+ if (map.indexOf("{") !== -1) {
281
+ config[map].forEach((e) => {
282
+ const idx = map.indexOf("{?");
283
+ let queryOptional = true;
284
+ if (idx >= 0) {
285
+ const query = map.substring(idx + 2, map.length - 1);
286
+ e._queryParams = [];
287
+ query.split(",").forEach(q => {
288
+ if (q.endsWith("*")) {
289
+ e._queryCatchAll = q.substring(0, q.length - 1);
290
+ return;
291
+ }
292
+ else if (q.endsWith("+")) {
293
+ e._queryCatchAll = q.substring(0, q.length - 1);
294
+ queryOptional = false;
295
+ return;
296
+ }
297
+ else if (q.endsWith("?")) {
298
+ e._queryParams.push({ name: q.substring(0, q.length - 1), required: false });
299
+ }
300
+ else {
301
+ queryOptional = false;
302
+ e._queryParams.push({ name: q, required: true });
303
+ }
304
+ });
305
+ // We do not use uri-templates for query parsing
306
+ //map = map.substring(0, idx) + "?{+URITemplateQuery}";
307
+ const templates = [uriTemplates(map.substring(0, idx) + "?{+URITemplateQuery}")];
308
+ const pathTemplate = uriTemplates(map.substring(0, idx));
309
+ if (queryOptional) {
310
+ templates.push(pathTemplate);
311
+ }
312
+ e._uriTemplateParse = {
313
+ fromUri: (url) => {
314
+ return templates.reduce((v, t) => (v ? v : t.fromUri(url)), undefined);
315
+ },
316
+ varNames: [...pathTemplate.varNames, ...e._queryParams.map(q => q.name)]
317
+ };
318
+ }
319
+ else {
320
+ e._uriTemplateParse = uriTemplates(map);
321
+ }
322
+ });
323
+ }
324
+ }
325
+ }
326
+ /**
327
+ * What a request URL is matched against for a route: a route declaring a
328
+ * query template (`{?q,page?}`, `{?rest*}`) matches the whole URL, any other
329
+ * route matches the path alone, so an extra query string (`?v=123`) neither
330
+ * prevents the match nor ends up in a path variable
331
+ * @param routeUrl - the route URL
332
+ * @param finalUrl - the request URL, from `getFinalUrl`
333
+ * @returns the URL to match
334
+ */
335
+ getMatchTarget(routeUrl, finalUrl) {
336
+ return routeUrl.includes("{?") ? finalUrl : finalUrl.split("?")[0];
337
+ }
338
+ /**
339
+ * Get all method for a specific url
340
+ * @param config - the configuration
341
+ * @param method - the HTTP method
342
+ * @param url - the URL
343
+ * @returns the list of results
344
+ */
345
+ getRouteMethodsFromUrl(url) {
346
+ const finalUrl = this.getFinalUrl(url);
347
+ const methods = new Set();
348
+ for (const i in this.pathMap) {
349
+ const routeUrl = this.pathMap[i].url;
350
+ const map = this.pathMap[i].config;
351
+ const target = this.getMatchTarget(routeUrl, finalUrl);
352
+ if (routeUrl !== target &&
353
+ (map._uriTemplateParse === undefined || map._uriTemplateParse.fromUri(target, { strict: true }) === undefined)) {
354
+ continue;
355
+ }
356
+ map.methods.forEach(m => methods.add(m));
357
+ }
358
+ return Array.from(methods);
359
+ }
360
+ /**
361
+ * Get the route from a method / url
362
+ * @param ctx - the operation context
363
+ * @param method - the HTTP method
364
+ * @param url - the URL
365
+ * @returns the result
366
+ */
367
+ getRouteFromUrl(ctx, method, url) {
368
+ const finalUrl = this.getFinalUrl(url);
369
+ // Search for the route
370
+ for (const i in this.pathMap) {
371
+ const routeUrl = this.pathMap[i].url;
372
+ const map = this.pathMap[i].config;
373
+ // Check method
374
+ if (map.methods.indexOf(method) === -1) {
375
+ continue;
376
+ }
377
+ const target = this.getMatchTarget(routeUrl, finalUrl);
378
+ // If url is strictly equal
379
+ if (routeUrl === target) {
380
+ return map;
381
+ }
382
+ // If the url
383
+ if (map._uriTemplateParse === undefined) {
384
+ continue;
385
+ }
386
+ const parse_result = map._uriTemplateParse.fromUri(target, { strict: true });
387
+ if (parse_result !== undefined) {
388
+ const parseUrl = new URL(`http://localhost${finalUrl}`);
389
+ if (map._queryCatchAll) {
390
+ parse_result[map._queryCatchAll] = {};
391
+ parseUrl.searchParams.forEach((v, k) => {
392
+ if (!map._queryParams?.find(q => q.name === k)) {
393
+ parse_result[map._queryCatchAll][k] = v;
394
+ }
395
+ });
396
+ }
397
+ // Check for each params
398
+ let mandatoryParams = true;
399
+ map._queryParams?.forEach(q => {
400
+ if (!parseUrl.searchParams.has(q.name)) {
401
+ mandatoryParams &&= !q.required;
402
+ return;
403
+ }
404
+ parse_result[q.name] = parseUrl.searchParams.get(q.name);
405
+ });
406
+ // Skip if we miss mandatory params
407
+ if (!mandatoryParams) {
408
+ continue;
409
+ }
410
+ if (parse_result.URITemplateQuery) {
411
+ delete parse_result.URITemplateQuery;
412
+ }
413
+ ctx.setParameters(parse_result);
414
+ return map;
415
+ }
416
+ }
417
+ }
418
+ /**
419
+ * Convert a schema name or object to an OpenAPI $ref or inline schema
420
+ * @param schema - the schema object
421
+ * @returns the result
422
+ */
423
+ getOpenAPISchema(schema) {
424
+ if (!schema) {
425
+ return {
426
+ $ref: "#/components/schemas/Object"
427
+ };
428
+ }
429
+ else if (typeof schema === "string") {
430
+ return {
431
+ $ref: "#/components/schemas/" + schema
432
+ };
433
+ }
434
+ return schema;
435
+ }
436
+ /**
437
+ * Add all known routes to paths
438
+ *
439
+ * @param openapi to complete
440
+ * @param skipHidden add hidden routes or not
441
+ */
442
+ completeOpenAPI(openapi, skipHidden = true) {
443
+ const hasTag = tag => openapi.tags.find(t => t.name === tag) !== undefined;
444
+ for (const i in this.routes) {
445
+ this.routes[i].forEach((route) => {
446
+ route.openapi = templateVariables(route.openapi || {}, useDynamicService(route.executor).getOpenApiReplacements());
447
+ if (route.openapi.hidden && skipHidden) {
448
+ return;
449
+ }
450
+ route.openapi.hidden = false;
451
+ let path = i;
452
+ if (i.indexOf("{?") >= 0) {
453
+ path = i.substring(0, i.indexOf("{?"));
454
+ }
455
+ openapi.paths[path] = openapi.paths[path] || {};
456
+ if (route._uriTemplateParse) {
457
+ openapi.paths[path].parameters = [];
458
+ route._uriTemplateParse.varNames.forEach(varName => {
459
+ const queryParam = route._queryParams?.find(i => i.name === varName);
460
+ if (queryParam) {
461
+ let name = varName;
462
+ if (name.startsWith("*")) {
463
+ name = name.substr(1);
464
+ }
465
+ openapi.paths[path].parameters.push({
466
+ name,
467
+ in: "query",
468
+ required: queryParam.required,
469
+ schema: {
470
+ type: "string"
471
+ }
472
+ });
473
+ return;
474
+ }
475
+ openapi.paths[path].parameters.push({
476
+ // ^[a-zA-Z0-9._$-]+$] is the official regex of AWS
477
+ name: varName.replace(/[^a-zA-Z0-9._$-]/g, ""),
478
+ in: "path",
479
+ required: true,
480
+ schema: {
481
+ type: "string"
482
+ }
483
+ });
484
+ });
485
+ }
486
+ route.methods.forEach(method => {
487
+ let responses;
488
+ let schema;
489
+ let description;
490
+ let summary;
491
+ let operationId;
492
+ let requestBody;
493
+ const tags = route.openapi.tags ?? [];
494
+ // Refactor here
495
+ if (route.openapi[method.toLowerCase()]) {
496
+ responses = route.openapi[method.toLowerCase()].responses;
497
+ schema = this.getOpenAPISchema(route.openapi[method.toLowerCase()].schemas?.output);
498
+ description = route.openapi[method.toLowerCase()].description;
499
+ summary = route.openapi[method.toLowerCase()].summary;
500
+ operationId = route.openapi[method.toLowerCase()].operationId;
501
+ tags.push(...(route.openapi[method.toLowerCase()].tags || []));
502
+ requestBody = route.openapi[method.toLowerCase()].requestBody;
503
+ }
504
+ responses = responses || {
505
+ 200: {
506
+ description: "Operation success"
507
+ }
508
+ };
509
+ for (const j in responses) {
510
+ // Add default answer
511
+ const code = parseInt(j);
512
+ if (code < 300 && code >= 200 && !responses[j].description) {
513
+ responses[j].description = "Operation success";
514
+ responses[j].content ??= {};
515
+ responses[j].content["application/json"] = {
516
+ schema
517
+ };
518
+ }
519
+ }
520
+ // Add the service name if no tags are defined
521
+ if (tags.length === 0) {
522
+ tags.push(route.executor);
523
+ }
524
+ const desc = {
525
+ tags,
526
+ responses: responses,
527
+ description,
528
+ summary,
529
+ operationId,
530
+ requestBody
531
+ };
532
+ if (method.toLowerCase().startsWith("p") && route.openapi[method.toLowerCase()]?.schemas?.input) {
533
+ // Add request schema if exist
534
+ desc.requestBody ??= {
535
+ content: {
536
+ "application/json": {
537
+ schema: this.getOpenAPISchema(route.openapi[method.toLowerCase()]?.schemas?.input)
538
+ }
539
+ }
540
+ };
541
+ }
542
+ openapi.paths[path][method.toLowerCase()] = desc;
543
+ tags
544
+ .filter(tag => !hasTag(tag))
545
+ .forEach(tag => openapi.tags.push({
546
+ name: tag
547
+ }));
548
+ });
549
+ });
550
+ }
551
+ }
552
+ /**
553
+ * Execute the matched route handler for a web context
554
+ * @param ctx - the operation context
555
+ */
556
+ async execute(ctx) {
557
+ const httpContext = ctx.getHttpContext();
558
+ const method = httpContext.getMethod();
559
+ // Routes are relative to the prefix (API Gateway stage, custom domain base path…)
560
+ const url = httpContext.getRelativeUri();
561
+ // Handle CORS preflight
562
+ if (method === "OPTIONS") {
563
+ const methods = this.getRouteMethodsFromUrl(url);
564
+ if (methods.length > 0 && (await this.checkCORSRequest(ctx))) {
565
+ ctx.setHeader("Access-Control-Allow-Methods", methods.join(","));
566
+ ctx.writeHead(204);
567
+ return;
568
+ }
569
+ this.writeNotFound(ctx, method, url);
570
+ return;
571
+ }
572
+ const info = this.getRouteFromUrl(ctx, method, url);
573
+ if (!info) {
574
+ this.writeNotFound(ctx, method, url);
575
+ return;
576
+ }
577
+ // Check request filters (authentication, etc.)
578
+ if (!(await this.checkRequest(ctx))) {
579
+ ctx.writeHead(403);
580
+ return;
581
+ }
582
+ // Execute the route handler
583
+ if (typeof info._method === "function") {
584
+ await info._method(ctx);
585
+ }
586
+ else if (info._method && info.executor) {
587
+ const service = useDynamicService(info.executor);
588
+ if (service && typeof service[info._method] === "function") {
589
+ await service[info._method](ctx);
590
+ }
591
+ }
592
+ }
593
+ /**
594
+ * Answer a request no route matches: 404 with the same error body a thrown
595
+ * `NotFound` gets, so clients don't receive an empty response
596
+ * @param ctx - the web context
597
+ * @param method - the HTTP method
598
+ * @param url - the requested URL
599
+ */
600
+ writeNotFound(ctx, method, url) {
601
+ emitCoreEvent("Webda.404", { context: ctx });
602
+ ctx.writeHead(404);
603
+ ctx.write({ error: { code: "NOT_FOUND", message: `No route for ${method} ${url}` } });
604
+ }
605
+ /**
606
+ * Verify if a request can be done
607
+ *
608
+ * @param context Context of the request
609
+ * @param ctx - the operation context
610
+ * @returns true if the condition is met
611
+ */
612
+ async checkRequest(ctx) {
613
+ // Do not need to filter on OPTIONS as CORS is for that
614
+ if (ctx.getHttpContext().getMethod() === "OPTIONS" || this._requestFilters.length === 0) {
615
+ return true;
616
+ }
617
+ return (await Promise.all(this._requestFilters.map(filter => filter.checkRequest(ctx, "AUTH")))).some(v => v);
618
+ }
619
+ /**
620
+ * Verify if an origin is allowed to do request on the API
621
+ *
622
+ * @param context Context of the request
623
+ * @param ctx - the operation context
624
+ * @returns true if the condition is met
625
+ */
626
+ async checkCORSRequest(ctx) {
627
+ return (await Promise.all(this._requestCORSFilters.map(filter => filter.checkRequest(ctx, "CORS")))).some(v => v);
628
+ }
629
+ /**
630
+ * Export the OpenAPI definition as JSON to stdout
631
+ * @param output - file path to write to (prints to stdout if omitted)
632
+ * @param includeHidden - include hidden routes in the output
633
+ */
634
+ openapi(
635
+ /** @alias o @description Output file path (stdout if omitted) */
636
+ output,
637
+ /** @description Include hidden routes */
638
+ includeHidden) {
639
+ const doc = this.exportOpenAPI(!includeHidden);
640
+ const json = JSON.stringify(doc, undefined, 2);
641
+ if (output) {
642
+ FileUtils.save(doc, output);
643
+ useLog("INFO", `OpenAPI definition written to ${output}`);
644
+ }
645
+ else {
646
+ useOutput(json);
647
+ }
648
+ }
649
+ /**
650
+ * Export OpenAPI
651
+ * @param skipHidden - whether to skip hidden entries
652
+ * @returns the result
653
+ */
654
+ exportOpenAPI(skipHidden = true) {
655
+ const packageInfo = useApplication().getPackageDescription();
656
+ let contact;
657
+ if (typeof packageInfo.author === "string") {
658
+ contact = {
659
+ name: packageInfo.author
660
+ };
661
+ }
662
+ else if (packageInfo.author) {
663
+ contact = packageInfo.author;
664
+ }
665
+ let license;
666
+ if (typeof packageInfo.license === "string") {
667
+ license = {
668
+ name: packageInfo.license
669
+ };
670
+ }
671
+ else if (packageInfo.license) {
672
+ license = packageInfo.license;
673
+ }
674
+ const openapi = deepmerge({
675
+ openapi: "3.0.3",
676
+ info: {
677
+ description: packageInfo.description,
678
+ version: packageInfo.version || "0.0.0",
679
+ title: packageInfo.title || "Webda-based application",
680
+ termsOfService: packageInfo.termsOfService,
681
+ contact,
682
+ license
683
+ },
684
+ components: {
685
+ schemas: {
686
+ Object: {
687
+ type: "object"
688
+ }
689
+ }
690
+ },
691
+ paths: {},
692
+ tags: []
693
+ }, useApplication().getCurrentConfiguration().openapi || {});
694
+ const app = useApplication();
695
+ const models = app.getModels();
696
+ const schemas = app.getSchemas();
697
+ // Copy all input/output from actions
698
+ for (const i in schemas) {
699
+ if (!(i.endsWith(".input") || i.endsWith(".output"))) {
700
+ continue;
701
+ }
702
+ // @ts-ignore
703
+ openapi.components.schemas[i] ??= schemas[i];
704
+ // Not sure how to test following
705
+ /* c8 ignore next 5 */
706
+ for (const j in schemas[i].definitions) {
707
+ // @ts-ignore
708
+ openapi.components.schemas[j] ??= schemas[i].definitions[j];
709
+ }
710
+ }
711
+ for (const i in models) {
712
+ const model = models[i];
713
+ let desc = {
714
+ type: "object"
715
+ };
716
+ const modelName = model.name || i.split("/").pop();
717
+ const schema = useApplication().getSchema(i);
718
+ if (schema) {
719
+ for (const j in schema.definitions) {
720
+ // @ts-ignore
721
+ openapi.components.schemas[j] ??= schema.definitions[j];
722
+ }
723
+ delete schema.definitions;
724
+ desc = schema;
725
+ }
726
+ // Remove empty required as openapi does not like that
727
+ // Our compiler is not generating this anymore but it is additional protection
728
+ /* c8 ignore next 3 */
729
+ if (desc.required && desc.required.length === 0) {
730
+ delete desc.required;
731
+ }
732
+ // Remove $schema
733
+ delete desc.$schema;
734
+ // Rename all #/definitions/ by #/components/schemas/
735
+ openapi.components.schemas[modelName] = JSON.parse(JSON.stringify(desc).replace(/#\/definitions\//g, "#/components/schemas/"));
736
+ }
737
+ this.completeOpenAPI(openapi, skipHidden);
738
+ openapi.tags.sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase()));
739
+ const paths = {};
740
+ Object.keys(openapi.paths)
741
+ .sort()
742
+ .forEach(i => (paths[i] = openapi.paths[i]));
743
+ openapi.paths = paths;
744
+ return openapi;
745
+ }
746
+ /**
747
+ * Register a request filtering
748
+ *
749
+ * Will apply to all requests regardless of the devMode
750
+ * @param filter - the filter to apply
751
+ */
752
+ registerRequestFilter(filter) {
753
+ this._requestFilters.push(filter);
754
+ }
755
+ /**
756
+ * Register a CORS request filtering
757
+ *
758
+ * Does not apply in devMode
759
+ * @param filter - the filter to apply
760
+ */
761
+ registerCORSFilter(filter) {
762
+ this._requestCORSFilters.push(filter);
763
+ }
764
+ /**
765
+ * Auto-discover services that declare `request-filter` or `cors-filter` capabilities
766
+ * and register them with the Router.
767
+ *
768
+ * Called during framework initialization (after all services are resolved and
769
+ * initialized) to replace manual `registerRequestFilter(this)` calls. Iterates
770
+ * all services, checks their {@link Service.getCapabilities} return value, and
771
+ * registers matching services as request or CORS filters.
772
+ *
773
+ * @param services - Iterable of initialized services to scan for filter capabilities
774
+ *
775
+ * @example
776
+ * ```typescript
777
+ * // Called automatically by Core.init():
778
+ * router.discoverFilters(Object.values(this.services));
779
+ *
780
+ * // A service with "request-filter" capability is auto-registered:
781
+ * class HawkService extends Service implements RequestFilter {
782
+ * // getCapabilities() returns { "request-filter": {}, "cors-filter": {} }
783
+ * // → automatically registered with router as both request and CORS filter
784
+ * }
785
+ * ```
786
+ */
787
+ discoverFilters(services) {
788
+ for (const service of services) {
789
+ // Services that failed to construct are kept as undefined entries
790
+ if (!service)
791
+ continue;
792
+ const caps = service.getCapabilities();
793
+ if ("request-filter" in caps) {
794
+ this.registerRequestFilter(service);
795
+ }
796
+ if ("cors-filter" in caps) {
797
+ this.registerCORSFilter(service);
798
+ }
799
+ }
800
+ }
801
+ /**
802
+ * Auto-discover routes declared with `@Route` (or the legacy
803
+ * `constructor.routes` bucket) on each service, and register them with the
804
+ * router. Called once from `Core.init()` after all services have resolved —
805
+ * services don't have to push their own routes anymore.
806
+ *
807
+ * @param services - iterable of initialized services to scan
808
+ */
809
+ discoverRoutes(services) {
810
+ for (const service of services) {
811
+ if (!service)
812
+ continue;
813
+ // @ts-ignore — back-compat for subclasses that still populate this
814
+ const legacy = service.constructor.routes || {};
815
+ const fromMetadata = getMetadata(service.constructor)?.["webda.route"] || {};
816
+ const routes = { ...legacy };
817
+ for (const path in fromMetadata) {
818
+ routes[path] = [...(routes[path] || []), ...fromMetadata[path]];
819
+ }
820
+ for (const path in routes) {
821
+ for (const route of routes[path]) {
822
+ const executor = service[route.executor];
823
+ if (typeof executor !== "function") {
824
+ useLog("WARN", `@Route on ${service.getName()} references non-method ${route.executor}`);
825
+ continue;
826
+ }
827
+ const finalUrl = service.getUrl(path, route.methods);
828
+ if (!finalUrl)
829
+ continue;
830
+ this.addRouteToRouter(finalUrl, {
831
+ _method: executor.bind(service),
832
+ executor: service.getName(),
833
+ openapi: route.openapi,
834
+ methods: route.methods
835
+ });
836
+ }
837
+ }
838
+ }
839
+ }
840
+ };
841
+ })();
842
+ export { Router };
843
+ //# sourceMappingURL=router.service.js.map