@webda/core 4.0.0-beta.2 → 4.0.0-beta.4

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 (793) hide show
  1. package/README.md +252 -0
  2. package/lib/application/application.d.ts +468 -0
  3. package/lib/application/application.d.ts.map +1 -0
  4. package/lib/application/application.js +845 -0
  5. package/lib/application/application.js.map +1 -0
  6. package/lib/application/deployment.d.ts +93 -0
  7. package/lib/application/deployment.d.ts.map +1 -0
  8. package/lib/application/deployment.js +99 -0
  9. package/lib/application/deployment.js.map +1 -0
  10. package/lib/application/hooks.d.ts +34 -0
  11. package/lib/application/hooks.d.ts.map +1 -0
  12. package/lib/application/hooks.js +57 -0
  13. package/lib/application/hooks.js.map +1 -0
  14. package/lib/application/iapplication.d.ts +43 -0
  15. package/lib/application/iapplication.d.ts.map +1 -0
  16. package/lib/application/iapplication.js +2 -0
  17. package/lib/application/iapplication.js.map +1 -0
  18. package/lib/application/iconfiguration.d.ts +176 -0
  19. package/lib/application/iconfiguration.d.ts.map +1 -0
  20. package/lib/application/iconfiguration.js +8 -0
  21. package/lib/application/iconfiguration.js.map +1 -0
  22. package/lib/application/runner.d.ts +8 -0
  23. package/lib/application/runner.d.ts.map +1 -0
  24. package/lib/application/runner.js +26 -0
  25. package/lib/application/runner.js.map +1 -0
  26. package/lib/{unpackedapplication.d.ts → application/unpackedapplication.d.ts} +43 -23
  27. package/lib/application/unpackedapplication.d.ts.map +1 -0
  28. package/lib/application/unpackedapplication.js +500 -0
  29. package/lib/application/unpackedapplication.js.map +1 -0
  30. package/lib/bin/cli-phase.d.ts +28 -0
  31. package/lib/bin/cli-phase.d.ts.map +1 -0
  32. package/lib/bin/cli-phase.js +44 -0
  33. package/lib/bin/cli-phase.js.map +1 -0
  34. package/lib/bin/cli.d.ts +196 -0
  35. package/lib/bin/cli.d.ts.map +1 -0
  36. package/lib/bin/cli.js +934 -0
  37. package/lib/bin/cli.js.map +1 -0
  38. package/lib/bin/launcher.d.ts +3 -0
  39. package/lib/bin/launcher.d.ts.map +1 -0
  40. package/lib/bin/launcher.js +50 -0
  41. package/lib/bin/launcher.js.map +1 -0
  42. package/lib/cache/cache.d.ts +33 -0
  43. package/lib/cache/cache.d.ts.map +1 -0
  44. package/lib/cache/cache.js +8 -0
  45. package/lib/cache/cache.js.map +1 -0
  46. package/lib/{services/configuration.d.ts → configurations/configuration.service.d.ts} +58 -58
  47. package/lib/configurations/configuration.service.d.ts.map +1 -0
  48. package/lib/configurations/configuration.service.js +248 -0
  49. package/lib/configurations/configuration.service.js.map +1 -0
  50. package/lib/configurations/fileconfiguration.service.d.ts +30 -0
  51. package/lib/configurations/fileconfiguration.service.d.ts.map +1 -0
  52. package/lib/configurations/fileconfiguration.service.js +65 -0
  53. package/lib/configurations/fileconfiguration.service.js.map +1 -0
  54. package/lib/configurations/kubernetesconfiguration.service.d.ts +43 -0
  55. package/lib/configurations/kubernetesconfiguration.service.d.ts.map +1 -0
  56. package/lib/configurations/kubernetesconfiguration.service.js +83 -0
  57. package/lib/configurations/kubernetesconfiguration.service.js.map +1 -0
  58. package/lib/contexts/execution.d.ts +33 -0
  59. package/lib/contexts/execution.d.ts.map +1 -0
  60. package/lib/contexts/execution.js +73 -0
  61. package/lib/contexts/execution.js.map +1 -0
  62. package/lib/contexts/globalcontext.d.ts +29 -0
  63. package/lib/contexts/globalcontext.d.ts.map +1 -0
  64. package/lib/contexts/globalcontext.js +38 -0
  65. package/lib/contexts/globalcontext.js.map +1 -0
  66. package/lib/{utils → contexts}/httpcontext.d.ts +44 -19
  67. package/lib/contexts/httpcontext.d.ts.map +1 -0
  68. package/lib/{utils → contexts}/httpcontext.js +95 -27
  69. package/lib/contexts/httpcontext.js.map +1 -0
  70. package/lib/contexts/icontext.d.ts +236 -0
  71. package/lib/contexts/icontext.d.ts.map +1 -0
  72. package/lib/contexts/icontext.js +230 -0
  73. package/lib/contexts/icontext.js.map +1 -0
  74. package/lib/contexts/operationcontext.d.ts +182 -0
  75. package/lib/contexts/operationcontext.d.ts.map +1 -0
  76. package/lib/contexts/operationcontext.js +361 -0
  77. package/lib/contexts/operationcontext.js.map +1 -0
  78. package/lib/contexts/simplecontext.d.ts +31 -0
  79. package/lib/contexts/simplecontext.d.ts.map +1 -0
  80. package/lib/contexts/simplecontext.js +45 -0
  81. package/lib/contexts/simplecontext.js.map +1 -0
  82. package/lib/contexts/webcontext.d.ts +218 -0
  83. package/lib/contexts/webcontext.d.ts.map +1 -0
  84. package/lib/contexts/webcontext.js +389 -0
  85. package/lib/contexts/webcontext.js.map +1 -0
  86. package/lib/core/authorizer.d.ts +23 -0
  87. package/lib/core/authorizer.d.ts.map +1 -0
  88. package/lib/core/authorizer.js +17 -0
  89. package/lib/core/authorizer.js.map +1 -0
  90. package/lib/core/core.d.ts +225 -0
  91. package/lib/core/core.d.ts.map +1 -0
  92. package/lib/core/core.js +576 -0
  93. package/lib/core/core.js.map +1 -0
  94. package/lib/core/hooks.d.ts +94 -0
  95. package/lib/core/hooks.d.ts.map +1 -0
  96. package/lib/core/hooks.js +97 -0
  97. package/lib/core/hooks.js.map +1 -0
  98. package/lib/core/icore.d.ts +249 -0
  99. package/lib/core/icore.d.ts.map +1 -0
  100. package/lib/core/icore.js +15 -0
  101. package/lib/core/icore.js.map +1 -0
  102. package/lib/core/instancestorage.d.ts +61 -0
  103. package/lib/core/instancestorage.d.ts.map +1 -0
  104. package/lib/core/instancestorage.js +75 -0
  105. package/lib/core/instancestorage.js.map +1 -0
  106. package/lib/core/operations.d.ts +181 -0
  107. package/lib/core/operations.d.ts.map +1 -0
  108. package/lib/core/operations.js +559 -0
  109. package/lib/core/operations.js.map +1 -0
  110. package/lib/deployers/deployer.d.ts +157 -0
  111. package/lib/deployers/deployer.d.ts.map +1 -0
  112. package/lib/deployers/deployer.js +81 -0
  113. package/lib/deployers/deployer.js.map +1 -0
  114. package/lib/deployers/git.d.ts +27 -0
  115. package/lib/deployers/git.d.ts.map +1 -0
  116. package/lib/deployers/git.js +66 -0
  117. package/lib/deployers/git.js.map +1 -0
  118. package/lib/deployers/packager.d.ts +85 -0
  119. package/lib/deployers/packager.d.ts.map +1 -0
  120. package/lib/deployers/packager.js +259 -0
  121. package/lib/deployers/packager.js.map +1 -0
  122. package/lib/errors/errors.d.ts +126 -0
  123. package/lib/errors/errors.d.ts.map +1 -0
  124. package/lib/errors/errors.js +165 -0
  125. package/lib/errors/errors.js.map +1 -0
  126. package/lib/events/asynceventemitter.d.ts +159 -0
  127. package/lib/events/asynceventemitter.d.ts.map +1 -0
  128. package/lib/events/asynceventemitter.js +152 -0
  129. package/lib/events/asynceventemitter.js.map +1 -0
  130. package/lib/events/events.d.ts +112 -0
  131. package/lib/events/events.d.ts.map +1 -0
  132. package/lib/events/events.js +45 -0
  133. package/lib/events/events.js.map +1 -0
  134. package/lib/index.d.ts +88 -54
  135. package/lib/index.d.ts.map +1 -1
  136. package/lib/index.js +88 -64
  137. package/lib/index.js.map +1 -1
  138. package/lib/loggers/console.service.d.ts +24 -0
  139. package/lib/loggers/console.service.d.ts.map +1 -0
  140. package/lib/loggers/console.service.js +30 -0
  141. package/lib/loggers/console.service.js.map +1 -0
  142. package/lib/loggers/file.service.d.ts +25 -0
  143. package/lib/loggers/file.service.d.ts.map +1 -0
  144. package/lib/loggers/file.service.js +33 -0
  145. package/lib/loggers/file.service.js.map +1 -0
  146. package/lib/loggers/hooks.d.ts +20 -0
  147. package/lib/loggers/hooks.d.ts.map +1 -0
  148. package/lib/loggers/hooks.js +40 -0
  149. package/lib/loggers/hooks.js.map +1 -0
  150. package/lib/loggers/ilogger.d.ts +76 -0
  151. package/lib/loggers/ilogger.d.ts.map +1 -0
  152. package/lib/loggers/ilogger.js +108 -0
  153. package/lib/loggers/ilogger.js.map +1 -0
  154. package/lib/loggers/logger.d.ts +13 -0
  155. package/lib/loggers/logger.d.ts.map +1 -0
  156. package/lib/loggers/logger.js +18 -0
  157. package/lib/loggers/logger.js.map +1 -0
  158. package/lib/loggers/memory.service.d.ts +18 -0
  159. package/lib/loggers/memory.service.d.ts.map +1 -0
  160. package/lib/loggers/memory.service.js +21 -0
  161. package/lib/loggers/memory.service.js.map +1 -0
  162. package/lib/loggers/params.d.ts +47 -0
  163. package/lib/loggers/params.d.ts.map +1 -0
  164. package/lib/loggers/params.js +56 -0
  165. package/lib/loggers/params.js.map +1 -0
  166. package/lib/metrics/metrics.d.ts +25 -0
  167. package/lib/metrics/metrics.d.ts.map +1 -0
  168. package/lib/metrics/metrics.js +51 -0
  169. package/lib/metrics/metrics.js.map +1 -0
  170. package/lib/models/aclmodel.d.ts +20 -76
  171. package/lib/models/aclmodel.d.ts.map +1 -1
  172. package/lib/models/aclmodel.js +27 -203
  173. package/lib/models/aclmodel.js.map +1 -1
  174. package/lib/models/coremodel.model.d.ts +5 -0
  175. package/lib/models/coremodel.model.d.ts.map +1 -0
  176. package/lib/models/coremodel.model.js +5 -0
  177. package/lib/models/coremodel.model.js.map +1 -0
  178. package/lib/models/decorator.d.ts +67 -0
  179. package/lib/models/decorator.d.ts.map +1 -0
  180. package/lib/models/decorator.js +67 -0
  181. package/lib/models/decorator.js.map +1 -0
  182. package/lib/models/deployment.d.ts +2 -21
  183. package/lib/models/deployment.d.ts.map +1 -1
  184. package/lib/models/encrypted.model.d.ts +46 -0
  185. package/lib/models/encrypted.model.d.ts.map +1 -0
  186. package/lib/models/encrypted.model.js +87 -0
  187. package/lib/models/encrypted.model.js.map +1 -0
  188. package/lib/models/ident.model.d.ts +128 -0
  189. package/lib/models/ident.model.d.ts.map +1 -0
  190. package/lib/models/ident.model.js +207 -0
  191. package/lib/models/ident.model.js.map +1 -0
  192. package/lib/models/ownermodel.model.d.ts +68 -0
  193. package/lib/models/ownermodel.model.d.ts.map +1 -0
  194. package/lib/models/ownermodel.model.js +113 -0
  195. package/lib/models/ownermodel.model.js.map +1 -0
  196. package/lib/models/password.model.d.ts +78 -0
  197. package/lib/models/password.model.d.ts.map +1 -0
  198. package/lib/models/password.model.js +171 -0
  199. package/lib/models/password.model.js.map +1 -0
  200. package/lib/models/refreshtoken.model.d.ts +30 -0
  201. package/lib/models/refreshtoken.model.d.ts.map +1 -0
  202. package/lib/models/refreshtoken.model.js +29 -0
  203. package/lib/models/refreshtoken.model.js.map +1 -0
  204. package/lib/models/registry.model.d.ts +76 -0
  205. package/lib/models/registry.model.d.ts.map +1 -0
  206. package/lib/models/registry.model.js +104 -0
  207. package/lib/models/registry.model.js.map +1 -0
  208. package/lib/models/rolemodel.model.d.ts +28 -0
  209. package/lib/models/rolemodel.model.d.ts.map +1 -0
  210. package/lib/models/{rolemodel.js → rolemodel.model.js} +23 -5
  211. package/lib/models/rolemodel.model.js.map +1 -0
  212. package/lib/models/simpleuser.model.d.ts +78 -0
  213. package/lib/models/simpleuser.model.d.ts.map +1 -0
  214. package/lib/models/simpleuser.model.js +124 -0
  215. package/lib/models/simpleuser.model.js.map +1 -0
  216. package/lib/models/types.d.ts +113 -0
  217. package/lib/models/types.d.ts.map +1 -0
  218. package/lib/models/types.js +2 -0
  219. package/lib/models/types.js.map +1 -0
  220. package/lib/models/user.model.d.ts +103 -0
  221. package/lib/models/user.model.d.ts.map +1 -0
  222. package/lib/models/user.model.js +164 -0
  223. package/lib/models/user.model.js.map +1 -0
  224. package/lib/queues/{memoryqueue.d.ts → memoryqueue.service.d.ts} +26 -13
  225. package/lib/queues/memoryqueue.service.d.ts.map +1 -0
  226. package/lib/queues/{memoryqueue.js → memoryqueue.service.js} +55 -31
  227. package/lib/queues/memoryqueue.service.js.map +1 -0
  228. package/lib/queues/pubsubservice.d.ts +8 -6
  229. package/lib/queues/pubsubservice.d.ts.map +1 -1
  230. package/lib/queues/pubsubservice.js +5 -4
  231. package/lib/queues/pubsubservice.js.map +1 -1
  232. package/lib/queues/queueservice.d.ts +9 -11
  233. package/lib/queues/queueservice.d.ts.map +1 -1
  234. package/lib/queues/queueservice.js +41 -13
  235. package/lib/queues/queueservice.js.map +1 -1
  236. package/lib/rest/hooks.d.ts +8 -0
  237. package/lib/rest/hooks.d.ts.map +1 -0
  238. package/lib/rest/hooks.js +10 -0
  239. package/lib/rest/hooks.js.map +1 -0
  240. package/lib/rest/irest.d.ts +212 -0
  241. package/lib/rest/irest.d.ts.map +1 -0
  242. package/lib/rest/irest.js +39 -0
  243. package/lib/rest/irest.js.map +1 -0
  244. package/lib/rest/originfilter.d.ts +38 -0
  245. package/lib/rest/originfilter.d.ts.map +1 -0
  246. package/lib/rest/originfilter.js +61 -0
  247. package/lib/rest/originfilter.js.map +1 -0
  248. package/lib/rest/restoperationstransport.service.d.ts +193 -0
  249. package/lib/rest/restoperationstransport.service.d.ts.map +1 -0
  250. package/lib/rest/restoperationstransport.service.js +780 -0
  251. package/lib/rest/restoperationstransport.service.js.map +1 -0
  252. package/lib/rest/router.service.d.ts +244 -0
  253. package/lib/rest/router.service.d.ts.map +1 -0
  254. package/lib/rest/router.service.js +843 -0
  255. package/lib/rest/router.service.js.map +1 -0
  256. package/lib/schemas/hooks.d.ts +48 -0
  257. package/lib/schemas/hooks.d.ts.map +1 -0
  258. package/lib/schemas/hooks.js +152 -0
  259. package/lib/schemas/hooks.js.map +1 -0
  260. package/lib/services/audit.model.d.ts +208 -0
  261. package/lib/services/audit.model.d.ts.map +1 -0
  262. package/lib/services/audit.model.js +432 -0
  263. package/lib/services/audit.model.js.map +1 -0
  264. package/lib/services/binary.service.d.ts +808 -0
  265. package/lib/services/binary.service.d.ts.map +1 -0
  266. package/lib/services/binary.service.js +1365 -0
  267. package/lib/services/binary.service.js.map +1 -0
  268. package/lib/services/cloudbinary.d.ts +17 -12
  269. package/lib/services/cloudbinary.d.ts.map +1 -1
  270. package/lib/services/cloudbinary.js +23 -17
  271. package/lib/services/cloudbinary.js.map +1 -1
  272. package/lib/services/command.d.ts +118 -0
  273. package/lib/services/command.d.ts.map +1 -0
  274. package/lib/services/command.js +97 -0
  275. package/lib/services/command.js.map +1 -0
  276. package/lib/services/cron.service.d.ts +142 -0
  277. package/lib/services/cron.service.d.ts.map +1 -0
  278. package/lib/services/cron.service.js +291 -0
  279. package/lib/services/cron.service.js.map +1 -0
  280. package/lib/services/{cryptoservice.d.ts → cryptoservice.service.d.ts} +75 -141
  281. package/lib/services/cryptoservice.service.d.ts.map +1 -0
  282. package/lib/services/cryptoservice.service.js +527 -0
  283. package/lib/services/cryptoservice.service.js.map +1 -0
  284. package/lib/services/debugmailer.service.d.ts +49 -0
  285. package/lib/services/debugmailer.service.d.ts.map +1 -0
  286. package/lib/services/{debugmailer.js → debugmailer.service.js} +25 -10
  287. package/lib/services/debugmailer.service.js.map +1 -0
  288. package/lib/services/domainservice.service.d.ts +242 -0
  289. package/lib/services/domainservice.service.d.ts.map +1 -0
  290. package/lib/services/domainservice.service.js +676 -0
  291. package/lib/services/domainservice.service.js.map +1 -0
  292. package/lib/services/httpserver.service.d.ts +248 -0
  293. package/lib/services/httpserver.service.d.ts.map +1 -0
  294. package/lib/services/httpserver.service.js +673 -0
  295. package/lib/services/httpserver.service.js.map +1 -0
  296. package/lib/services/iauthentication.d.ts +202 -0
  297. package/lib/services/iauthentication.d.ts.map +1 -0
  298. package/lib/services/iauthentication.js +2 -0
  299. package/lib/services/iauthentication.js.map +1 -0
  300. package/lib/services/icryptoservice.d.ts +127 -0
  301. package/lib/services/icryptoservice.d.ts.map +1 -0
  302. package/lib/services/icryptoservice.js +68 -0
  303. package/lib/services/icryptoservice.js.map +1 -0
  304. package/lib/services/imailer.d.ts +17 -0
  305. package/lib/services/imailer.d.ts.map +1 -0
  306. package/lib/services/imailer.js +2 -0
  307. package/lib/services/imailer.js.map +1 -0
  308. package/lib/services/iservice.d.ts +104 -0
  309. package/lib/services/iservice.d.ts.map +1 -0
  310. package/lib/services/iservice.js +63 -0
  311. package/lib/services/iservice.js.map +1 -0
  312. package/lib/services/mailer.service.d.ts +220 -0
  313. package/lib/services/mailer.service.d.ts.map +1 -0
  314. package/lib/services/mailer.service.js +251 -0
  315. package/lib/services/mailer.service.js.map +1 -0
  316. package/lib/services/{notificationservice.d.ts → notificationservice.service.d.ts} +10 -11
  317. package/lib/services/notificationservice.service.d.ts.map +1 -0
  318. package/lib/services/{notificationservice.js → notificationservice.service.js} +24 -12
  319. package/lib/services/notificationservice.service.js.map +1 -0
  320. package/lib/services/operationstransport.d.ts +65 -0
  321. package/lib/services/operationstransport.d.ts.map +1 -0
  322. package/lib/services/operationstransport.js +103 -0
  323. package/lib/services/operationstransport.js.map +1 -0
  324. package/lib/services/{prometheus.d.ts → prometheus.service.d.ts} +13 -12
  325. package/lib/services/prometheus.service.d.ts.map +1 -0
  326. package/lib/services/prometheus.service.js +203 -0
  327. package/lib/services/prometheus.service.js.map +1 -0
  328. package/lib/services/{resource.d.ts → resource.service.d.ts} +34 -15
  329. package/lib/services/resource.service.d.ts.map +1 -0
  330. package/lib/services/resource.service.js +301 -0
  331. package/lib/services/resource.service.js.map +1 -0
  332. package/lib/services/service.d.ts +87 -188
  333. package/lib/services/service.d.ts.map +1 -1
  334. package/lib/services/service.js +407 -422
  335. package/lib/services/service.js.map +1 -1
  336. package/lib/services/servicecommands.d.ts +99 -0
  337. package/lib/services/servicecommands.d.ts.map +1 -0
  338. package/lib/services/servicecommands.js +171 -0
  339. package/lib/services/servicecommands.js.map +1 -0
  340. package/lib/services/serviceparameters.d.ts +33 -0
  341. package/lib/services/serviceparameters.d.ts.map +1 -0
  342. package/lib/services/serviceparameters.js +79 -0
  343. package/lib/services/serviceparameters.js.map +1 -0
  344. package/lib/services/token.service.d.ts +95 -0
  345. package/lib/services/token.service.d.ts.map +1 -0
  346. package/lib/services/token.service.js +182 -0
  347. package/lib/services/token.service.js.map +1 -0
  348. package/lib/{utils → session}/cookie.d.ts +32 -19
  349. package/lib/session/cookie.d.ts.map +1 -0
  350. package/lib/{utils → session}/cookie.js +76 -23
  351. package/lib/session/cookie.js.map +1 -0
  352. package/lib/session/manager.model.d.ts +87 -0
  353. package/lib/session/manager.model.d.ts.map +1 -0
  354. package/lib/session/manager.model.js +212 -0
  355. package/lib/session/manager.model.js.map +1 -0
  356. package/lib/session/session.d.ts +100 -0
  357. package/lib/session/session.d.ts.map +1 -0
  358. package/lib/session/session.js +175 -0
  359. package/lib/session/session.js.map +1 -0
  360. package/lib/stores/istore.d.ts +99 -0
  361. package/lib/stores/istore.d.ts.map +1 -0
  362. package/lib/stores/istore.js +26 -0
  363. package/lib/stores/istore.js.map +1 -0
  364. package/lib/stores/memory.service.d.ts +114 -0
  365. package/lib/stores/memory.service.d.ts.map +1 -0
  366. package/lib/stores/memory.service.js +344 -0
  367. package/lib/stores/memory.service.js.map +1 -0
  368. package/lib/stores/store.d.ts +126 -626
  369. package/lib/stores/store.d.ts.map +1 -1
  370. package/lib/stores/store.js +257 -1117
  371. package/lib/stores/store.js.map +1 -1
  372. package/lib/templates/templates.d.ts +47 -0
  373. package/lib/templates/templates.d.ts.map +1 -0
  374. package/lib/templates/templates.js +101 -0
  375. package/lib/templates/templates.js.map +1 -0
  376. package/lib/test/application.d.ts +174 -0
  377. package/lib/test/application.d.ts.map +1 -0
  378. package/lib/test/application.js +288 -0
  379. package/lib/test/application.js.map +1 -0
  380. package/lib/test/asyncstorage.d.ts +16 -0
  381. package/lib/test/asyncstorage.d.ts.map +1 -0
  382. package/lib/test/asyncstorage.js +32 -0
  383. package/lib/test/asyncstorage.js.map +1 -0
  384. package/lib/test/behavior-fixture.model.d.ts +30 -0
  385. package/lib/test/behavior-fixture.model.d.ts.map +1 -0
  386. package/lib/test/behavior-fixture.model.js +63 -0
  387. package/lib/test/behavior-fixture.model.js.map +1 -0
  388. package/lib/test/core.d.ts +63 -0
  389. package/lib/test/core.d.ts.map +1 -0
  390. package/lib/test/core.js +190 -0
  391. package/lib/test/core.js.map +1 -0
  392. package/lib/test/index.d.ts +7 -0
  393. package/lib/test/index.d.ts.map +1 -0
  394. package/lib/test/index.js +8 -0
  395. package/lib/test/index.js.map +1 -0
  396. package/lib/test/internal.d.ts +34 -0
  397. package/lib/test/internal.d.ts.map +1 -0
  398. package/lib/test/internal.js +156 -0
  399. package/lib/test/internal.js.map +1 -0
  400. package/lib/test/legacyident.fixture.model.d.ts +98 -0
  401. package/lib/test/legacyident.fixture.model.d.ts.map +1 -0
  402. package/lib/test/legacyident.fixture.model.js +125 -0
  403. package/lib/test/legacyident.fixture.model.js.map +1 -0
  404. package/lib/test/objects.d.ts +318 -0
  405. package/lib/test/objects.d.ts.map +1 -0
  406. package/lib/test/objects.js +443 -0
  407. package/lib/test/objects.js.map +1 -0
  408. package/lib/utils/abstractdeployer.d.ts +4 -2
  409. package/lib/utils/abstractdeployer.d.ts.map +1 -1
  410. package/lib/utils/abstractdeployer.js +3 -0
  411. package/lib/utils/abstractdeployer.js.map +1 -1
  412. package/package.json +102 -60
  413. package/test/cachedapp/webda.config.json +1 -5
  414. package/test/config-cached.json +3 -6
  415. package/test/config.json +3 -10
  416. package/test/my-cnf.json +9 -0
  417. package/webda.module.json +3755 -2496
  418. package/lib/application.d.ts +0 -888
  419. package/lib/application.d.ts.map +0 -1
  420. package/lib/application.js +0 -768
  421. package/lib/application.js.map +0 -1
  422. package/lib/application.spec.d.ts +0 -2
  423. package/lib/application.spec.d.ts.map +0 -1
  424. package/lib/application.spec.js +0 -248
  425. package/lib/application.spec.js.map +0 -1
  426. package/lib/core.d.ts +0 -743
  427. package/lib/core.d.ts.map +0 -1
  428. package/lib/core.js +0 -1334
  429. package/lib/core.js.map +0 -1
  430. package/lib/core.spec.d.ts +0 -2
  431. package/lib/core.spec.d.ts.map +0 -1
  432. package/lib/core.spec.js +0 -790
  433. package/lib/core.spec.js.map +0 -1
  434. package/lib/errors.d.ts +0 -64
  435. package/lib/errors.d.ts.map +0 -1
  436. package/lib/errors.js +0 -97
  437. package/lib/errors.js.map +0 -1
  438. package/lib/errors.spec.d.ts +0 -2
  439. package/lib/errors.spec.d.ts.map +0 -1
  440. package/lib/errors.spec.js +0 -33
  441. package/lib/errors.spec.js.map +0 -1
  442. package/lib/models/aclmodel.spec.d.ts +0 -2
  443. package/lib/models/aclmodel.spec.d.ts.map +0 -1
  444. package/lib/models/aclmodel.spec.js +0 -187
  445. package/lib/models/aclmodel.spec.js.map +0 -1
  446. package/lib/models/coremodel.d.ts +0 -896
  447. package/lib/models/coremodel.d.ts.map +0 -1
  448. package/lib/models/coremodel.js +0 -1214
  449. package/lib/models/coremodel.js.map +0 -1
  450. package/lib/models/coremodel.spec.d.ts +0 -2
  451. package/lib/models/coremodel.spec.d.ts.map +0 -1
  452. package/lib/models/coremodel.spec.js +0 -464
  453. package/lib/models/coremodel.spec.js.map +0 -1
  454. package/lib/models/ident.d.ts +0 -68
  455. package/lib/models/ident.d.ts.map +0 -1
  456. package/lib/models/ident.js +0 -26
  457. package/lib/models/ident.js.map +0 -1
  458. package/lib/models/ident.spec.d.ts +0 -2
  459. package/lib/models/ident.spec.d.ts.map +0 -1
  460. package/lib/models/ident.spec.js +0 -24
  461. package/lib/models/ident.spec.js.map +0 -1
  462. package/lib/models/ownermodel.d.ts +0 -51
  463. package/lib/models/ownermodel.d.ts.map +0 -1
  464. package/lib/models/ownermodel.js +0 -65
  465. package/lib/models/ownermodel.js.map +0 -1
  466. package/lib/models/ownermodel.spec.d.ts +0 -2
  467. package/lib/models/ownermodel.spec.d.ts.map +0 -1
  468. package/lib/models/ownermodel.spec.js +0 -215
  469. package/lib/models/ownermodel.spec.js.map +0 -1
  470. package/lib/models/relations.d.ts +0 -182
  471. package/lib/models/relations.d.ts.map +0 -1
  472. package/lib/models/relations.js +0 -157
  473. package/lib/models/relations.js.map +0 -1
  474. package/lib/models/relations.spec.d.ts +0 -14
  475. package/lib/models/relations.spec.d.ts.map +0 -1
  476. package/lib/models/relations.spec.js +0 -217
  477. package/lib/models/relations.spec.js.map +0 -1
  478. package/lib/models/rolemodel.d.ts +0 -11
  479. package/lib/models/rolemodel.d.ts.map +0 -1
  480. package/lib/models/rolemodel.js.map +0 -1
  481. package/lib/models/rolemodel.spec.d.ts +0 -2
  482. package/lib/models/rolemodel.spec.d.ts.map +0 -1
  483. package/lib/models/rolemodel.spec.js +0 -90
  484. package/lib/models/rolemodel.spec.js.map +0 -1
  485. package/lib/models/simpleuser.d.ts +0 -47
  486. package/lib/models/simpleuser.d.ts.map +0 -1
  487. package/lib/models/simpleuser.js +0 -84
  488. package/lib/models/simpleuser.js.map +0 -1
  489. package/lib/models/test.d.ts +0 -11
  490. package/lib/models/test.d.ts.map +0 -1
  491. package/lib/models/test.js +0 -7
  492. package/lib/models/test.js.map +0 -1
  493. package/lib/models/user.d.ts +0 -67
  494. package/lib/models/user.d.ts.map +0 -1
  495. package/lib/models/user.js +0 -86
  496. package/lib/models/user.js.map +0 -1
  497. package/lib/models/user.spec.d.ts +0 -2
  498. package/lib/models/user.spec.d.ts.map +0 -1
  499. package/lib/models/user.spec.js +0 -89
  500. package/lib/models/user.spec.js.map +0 -1
  501. package/lib/queues/filequeue.d.ts +0 -59
  502. package/lib/queues/filequeue.d.ts.map +0 -1
  503. package/lib/queues/filequeue.js +0 -131
  504. package/lib/queues/filequeue.js.map +0 -1
  505. package/lib/queues/filequeue.spec.d.ts +0 -2
  506. package/lib/queues/filequeue.spec.d.ts.map +0 -1
  507. package/lib/queues/filequeue.spec.js +0 -84
  508. package/lib/queues/filequeue.spec.js.map +0 -1
  509. package/lib/queues/memoryqueue.d.ts.map +0 -1
  510. package/lib/queues/memoryqueue.js.map +0 -1
  511. package/lib/queues/memoryqueue.spec.d.ts +0 -2
  512. package/lib/queues/memoryqueue.spec.d.ts.map +0 -1
  513. package/lib/queues/memoryqueue.spec.js +0 -203
  514. package/lib/queues/memoryqueue.spec.js.map +0 -1
  515. package/lib/queues/queue.spec.d.ts +0 -6
  516. package/lib/queues/queue.spec.d.ts.map +0 -1
  517. package/lib/queues/queue.spec.js +0 -55
  518. package/lib/queues/queue.spec.js.map +0 -1
  519. package/lib/rest/restdomainservice.d.ts +0 -63
  520. package/lib/rest/restdomainservice.d.ts.map +0 -1
  521. package/lib/rest/restdomainservice.js +0 -687
  522. package/lib/rest/restdomainservice.js.map +0 -1
  523. package/lib/rest/restdomainservice.spec.d.ts +0 -2
  524. package/lib/rest/restdomainservice.spec.d.ts.map +0 -1
  525. package/lib/rest/restdomainservice.spec.js +0 -124
  526. package/lib/rest/restdomainservice.spec.js.map +0 -1
  527. package/lib/rest/router.d.ts +0 -174
  528. package/lib/rest/router.d.ts.map +0 -1
  529. package/lib/rest/router.js +0 -429
  530. package/lib/rest/router.js.map +0 -1
  531. package/lib/rest/router.spec.d.ts +0 -2
  532. package/lib/rest/router.spec.d.ts.map +0 -1
  533. package/lib/rest/router.spec.js +0 -255
  534. package/lib/rest/router.spec.js.map +0 -1
  535. package/lib/services/asyncevents.d.ts +0 -152
  536. package/lib/services/asyncevents.d.ts.map +0 -1
  537. package/lib/services/asyncevents.js +0 -217
  538. package/lib/services/asyncevents.js.map +0 -1
  539. package/lib/services/asyncevents.spec.d.ts +0 -2
  540. package/lib/services/asyncevents.spec.d.ts.map +0 -1
  541. package/lib/services/asyncevents.spec.js +0 -118
  542. package/lib/services/asyncevents.spec.js.map +0 -1
  543. package/lib/services/authentication.d.ts +0 -361
  544. package/lib/services/authentication.d.ts.map +0 -1
  545. package/lib/services/authentication.js +0 -773
  546. package/lib/services/authentication.js.map +0 -1
  547. package/lib/services/authentication.spec.d.ts +0 -2
  548. package/lib/services/authentication.spec.d.ts.map +0 -1
  549. package/lib/services/authentication.spec.js +0 -458
  550. package/lib/services/authentication.spec.js.map +0 -1
  551. package/lib/services/binary.d.ts +0 -477
  552. package/lib/services/binary.d.ts.map +0 -1
  553. package/lib/services/binary.js +0 -617
  554. package/lib/services/binary.js.map +0 -1
  555. package/lib/services/binary.spec.d.ts +0 -41
  556. package/lib/services/binary.spec.d.ts.map +0 -1
  557. package/lib/services/binary.spec.js +0 -151
  558. package/lib/services/binary.spec.js.map +0 -1
  559. package/lib/services/cloudbinary.spec.d.ts +0 -6
  560. package/lib/services/cloudbinary.spec.d.ts.map +0 -1
  561. package/lib/services/cloudbinary.spec.js +0 -66
  562. package/lib/services/cloudbinary.spec.js.map +0 -1
  563. package/lib/services/configuration.d.ts.map +0 -1
  564. package/lib/services/configuration.js +0 -193
  565. package/lib/services/configuration.js.map +0 -1
  566. package/lib/services/configuration.spec.d.ts +0 -2
  567. package/lib/services/configuration.spec.d.ts.map +0 -1
  568. package/lib/services/configuration.spec.js +0 -130
  569. package/lib/services/configuration.spec.js.map +0 -1
  570. package/lib/services/cron.d.ts +0 -74
  571. package/lib/services/cron.d.ts.map +0 -1
  572. package/lib/services/cron.js +0 -141
  573. package/lib/services/cron.js.map +0 -1
  574. package/lib/services/cron.spec.d.ts +0 -2
  575. package/lib/services/cron.spec.d.ts.map +0 -1
  576. package/lib/services/cron.spec.js +0 -76
  577. package/lib/services/cron.spec.js.map +0 -1
  578. package/lib/services/cryptoservice.d.ts.map +0 -1
  579. package/lib/services/cryptoservice.js +0 -433
  580. package/lib/services/cryptoservice.js.map +0 -1
  581. package/lib/services/cryptoservice.spec.d.ts +0 -2
  582. package/lib/services/cryptoservice.spec.d.ts.map +0 -1
  583. package/lib/services/cryptoservice.spec.js +0 -177
  584. package/lib/services/cryptoservice.spec.js.map +0 -1
  585. package/lib/services/debugmailer.d.ts +0 -36
  586. package/lib/services/debugmailer.d.ts.map +0 -1
  587. package/lib/services/debugmailer.js.map +0 -1
  588. package/lib/services/debugmailer.spec.d.ts +0 -2
  589. package/lib/services/debugmailer.spec.d.ts.map +0 -1
  590. package/lib/services/debugmailer.spec.js +0 -32
  591. package/lib/services/debugmailer.spec.js.map +0 -1
  592. package/lib/services/domainservice.d.ts +0 -272
  593. package/lib/services/domainservice.d.ts.map +0 -1
  594. package/lib/services/domainservice.js +0 -651
  595. package/lib/services/domainservice.js.map +0 -1
  596. package/lib/services/domainservice.spec.d.ts +0 -2
  597. package/lib/services/domainservice.spec.d.ts.map +0 -1
  598. package/lib/services/domainservice.spec.js +0 -592
  599. package/lib/services/domainservice.spec.js.map +0 -1
  600. package/lib/services/filebinary.d.ts +0 -136
  601. package/lib/services/filebinary.d.ts.map +0 -1
  602. package/lib/services/filebinary.js +0 -373
  603. package/lib/services/filebinary.js.map +0 -1
  604. package/lib/services/filebinary.spec.d.ts +0 -25
  605. package/lib/services/filebinary.spec.d.ts.map +0 -1
  606. package/lib/services/filebinary.spec.js +0 -428
  607. package/lib/services/filebinary.spec.js.map +0 -1
  608. package/lib/services/fileconfiguration.d.ts +0 -23
  609. package/lib/services/fileconfiguration.d.ts.map +0 -1
  610. package/lib/services/fileconfiguration.js +0 -48
  611. package/lib/services/fileconfiguration.js.map +0 -1
  612. package/lib/services/fileconfiguration.spec.d.ts +0 -2
  613. package/lib/services/fileconfiguration.spec.d.ts.map +0 -1
  614. package/lib/services/fileconfiguration.spec.js +0 -215
  615. package/lib/services/fileconfiguration.spec.js.map +0 -1
  616. package/lib/services/invitationservice.d.ts +0 -223
  617. package/lib/services/invitationservice.d.ts.map +0 -1
  618. package/lib/services/invitationservice.js +0 -529
  619. package/lib/services/invitationservice.js.map +0 -1
  620. package/lib/services/invitationservice.spec.d.ts +0 -2
  621. package/lib/services/invitationservice.spec.d.ts.map +0 -1
  622. package/lib/services/invitationservice.spec.js +0 -567
  623. package/lib/services/invitationservice.spec.js.map +0 -1
  624. package/lib/services/kubernetesconfiguration.d.ts +0 -27
  625. package/lib/services/kubernetesconfiguration.d.ts.map +0 -1
  626. package/lib/services/kubernetesconfiguration.js +0 -52
  627. package/lib/services/kubernetesconfiguration.js.map +0 -1
  628. package/lib/services/kubernetesconfiguration.spec.d.ts +0 -2
  629. package/lib/services/kubernetesconfiguration.spec.d.ts.map +0 -1
  630. package/lib/services/kubernetesconfiguration.spec.js +0 -206
  631. package/lib/services/kubernetesconfiguration.spec.js.map +0 -1
  632. package/lib/services/mailer.d.ts +0 -166
  633. package/lib/services/mailer.d.ts.map +0 -1
  634. package/lib/services/mailer.js +0 -176
  635. package/lib/services/mailer.js.map +0 -1
  636. package/lib/services/mailer.spec.d.ts +0 -2
  637. package/lib/services/mailer.spec.d.ts.map +0 -1
  638. package/lib/services/mailer.spec.js +0 -158
  639. package/lib/services/mailer.spec.js.map +0 -1
  640. package/lib/services/notificationservice.d.ts.map +0 -1
  641. package/lib/services/notificationservice.js.map +0 -1
  642. package/lib/services/notificationservice.spec.d.ts +0 -2
  643. package/lib/services/notificationservice.spec.d.ts.map +0 -1
  644. package/lib/services/notificationservice.spec.js +0 -83
  645. package/lib/services/notificationservice.spec.js.map +0 -1
  646. package/lib/services/oauth.d.ts +0 -226
  647. package/lib/services/oauth.d.ts.map +0 -1
  648. package/lib/services/oauth.js +0 -294
  649. package/lib/services/oauth.js.map +0 -1
  650. package/lib/services/oauth.spec.d.ts +0 -2
  651. package/lib/services/oauth.spec.d.ts.map +0 -1
  652. package/lib/services/oauth.spec.js +0 -208
  653. package/lib/services/oauth.spec.js.map +0 -1
  654. package/lib/services/prometheus.d.ts.map +0 -1
  655. package/lib/services/prometheus.js +0 -160
  656. package/lib/services/prometheus.js.map +0 -1
  657. package/lib/services/prometheus.spec.d.ts +0 -2
  658. package/lib/services/prometheus.spec.d.ts.map +0 -1
  659. package/lib/services/prometheus.spec.js +0 -76
  660. package/lib/services/prometheus.spec.js.map +0 -1
  661. package/lib/services/resource.d.ts.map +0 -1
  662. package/lib/services/resource.js +0 -170
  663. package/lib/services/resource.js.map +0 -1
  664. package/lib/services/resource.spec.d.ts +0 -2
  665. package/lib/services/resource.spec.d.ts.map +0 -1
  666. package/lib/services/resource.spec.js +0 -140
  667. package/lib/services/resource.spec.js.map +0 -1
  668. package/lib/services/service.spec.d.ts +0 -2
  669. package/lib/services/service.spec.d.ts.map +0 -1
  670. package/lib/services/service.spec.js +0 -286
  671. package/lib/services/service.spec.js.map +0 -1
  672. package/lib/stores/aggregator.d.ts +0 -48
  673. package/lib/stores/aggregator.d.ts.map +0 -1
  674. package/lib/stores/aggregator.js +0 -80
  675. package/lib/stores/aggregator.js.map +0 -1
  676. package/lib/stores/file.d.ts +0 -108
  677. package/lib/stores/file.d.ts.map +0 -1
  678. package/lib/stores/file.js +0 -188
  679. package/lib/stores/file.js.map +0 -1
  680. package/lib/stores/file.spec.d.ts +0 -13
  681. package/lib/stores/file.spec.d.ts.map +0 -1
  682. package/lib/stores/file.spec.js +0 -138
  683. package/lib/stores/file.spec.js.map +0 -1
  684. package/lib/stores/mapper.d.ts +0 -150
  685. package/lib/stores/mapper.d.ts.map +0 -1
  686. package/lib/stores/mapper.js +0 -293
  687. package/lib/stores/mapper.js.map +0 -1
  688. package/lib/stores/mapper.spec.d.ts +0 -2
  689. package/lib/stores/mapper.spec.d.ts.map +0 -1
  690. package/lib/stores/mapper.spec.js +0 -167
  691. package/lib/stores/mapper.spec.js.map +0 -1
  692. package/lib/stores/memory.d.ts +0 -152
  693. package/lib/stores/memory.d.ts.map +0 -1
  694. package/lib/stores/memory.js +0 -371
  695. package/lib/stores/memory.js.map +0 -1
  696. package/lib/stores/memory.spec.d.ts +0 -14
  697. package/lib/stores/memory.spec.d.ts.map +0 -1
  698. package/lib/stores/memory.spec.js +0 -263
  699. package/lib/stores/memory.spec.js.map +0 -1
  700. package/lib/stores/modelmapper.d.ts +0 -62
  701. package/lib/stores/modelmapper.d.ts.map +0 -1
  702. package/lib/stores/modelmapper.js +0 -197
  703. package/lib/stores/modelmapper.js.map +0 -1
  704. package/lib/stores/store.spec.d.ts +0 -57
  705. package/lib/stores/store.spec.d.ts.map +0 -1
  706. package/lib/stores/store.spec.js +0 -737
  707. package/lib/stores/store.spec.js.map +0 -1
  708. package/lib/test.d.ts +0 -265
  709. package/lib/test.d.ts.map +0 -1
  710. package/lib/test.js +0 -622
  711. package/lib/test.js.map +0 -1
  712. package/lib/unpackedapplication.d.ts.map +0 -1
  713. package/lib/unpackedapplication.js +0 -350
  714. package/lib/unpackedapplication.js.map +0 -1
  715. package/lib/utils/abstractdeployer.spec.d.ts +0 -2
  716. package/lib/utils/abstractdeployer.spec.d.ts.map +0 -1
  717. package/lib/utils/abstractdeployer.spec.js +0 -21
  718. package/lib/utils/abstractdeployer.spec.js.map +0 -1
  719. package/lib/utils/case.d.ts +0 -8
  720. package/lib/utils/case.d.ts.map +0 -1
  721. package/lib/utils/case.js +0 -43
  722. package/lib/utils/case.js.map +0 -1
  723. package/lib/utils/case.spec.d.ts +0 -2
  724. package/lib/utils/case.spec.d.ts.map +0 -1
  725. package/lib/utils/case.spec.js +0 -50
  726. package/lib/utils/case.spec.js.map +0 -1
  727. package/lib/utils/context.d.ts +0 -482
  728. package/lib/utils/context.d.ts.map +0 -1
  729. package/lib/utils/context.js +0 -739
  730. package/lib/utils/context.js.map +0 -1
  731. package/lib/utils/context.spec.d.ts +0 -10
  732. package/lib/utils/context.spec.d.ts.map +0 -1
  733. package/lib/utils/context.spec.js +0 -383
  734. package/lib/utils/context.spec.js.map +0 -1
  735. package/lib/utils/cookie.d.ts.map +0 -1
  736. package/lib/utils/cookie.js.map +0 -1
  737. package/lib/utils/cookie.spec.d.ts +0 -2
  738. package/lib/utils/cookie.spec.d.ts.map +0 -1
  739. package/lib/utils/cookie.spec.js +0 -88
  740. package/lib/utils/cookie.spec.js.map +0 -1
  741. package/lib/utils/esm.d.ts +0 -14
  742. package/lib/utils/esm.d.ts.map +0 -1
  743. package/lib/utils/esm.js +0 -19
  744. package/lib/utils/esm.js.map +0 -1
  745. package/lib/utils/httpcontext.d.ts.map +0 -1
  746. package/lib/utils/httpcontext.js.map +0 -1
  747. package/lib/utils/httpcontext.spec.d.ts +0 -5
  748. package/lib/utils/httpcontext.spec.d.ts.map +0 -1
  749. package/lib/utils/httpcontext.spec.js +0 -77
  750. package/lib/utils/httpcontext.spec.js.map +0 -1
  751. package/lib/utils/logger.d.ts +0 -92
  752. package/lib/utils/logger.d.ts.map +0 -1
  753. package/lib/utils/logger.js +0 -121
  754. package/lib/utils/logger.js.map +0 -1
  755. package/lib/utils/logger.spec.d.ts +0 -2
  756. package/lib/utils/logger.spec.d.ts.map +0 -1
  757. package/lib/utils/logger.spec.js +0 -48
  758. package/lib/utils/logger.spec.js.map +0 -1
  759. package/lib/utils/serializers.d.ts +0 -162
  760. package/lib/utils/serializers.d.ts.map +0 -1
  761. package/lib/utils/serializers.js +0 -420
  762. package/lib/utils/serializers.js.map +0 -1
  763. package/lib/utils/serializers.spec.d.ts +0 -2
  764. package/lib/utils/serializers.spec.d.ts.map +0 -1
  765. package/lib/utils/serializers.spec.js +0 -311
  766. package/lib/utils/serializers.spec.js.map +0 -1
  767. package/lib/utils/session.d.ts +0 -123
  768. package/lib/utils/session.d.ts.map +0 -1
  769. package/lib/utils/session.js +0 -156
  770. package/lib/utils/session.js.map +0 -1
  771. package/lib/utils/session.spec.d.ts +0 -2
  772. package/lib/utils/session.spec.d.ts.map +0 -1
  773. package/lib/utils/session.spec.js +0 -81
  774. package/lib/utils/session.spec.js.map +0 -1
  775. package/lib/utils/throttler.d.ts +0 -99
  776. package/lib/utils/throttler.d.ts.map +0 -1
  777. package/lib/utils/throttler.js +0 -160
  778. package/lib/utils/throttler.js.map +0 -1
  779. package/lib/utils/throttler.spec.d.ts +0 -2
  780. package/lib/utils/throttler.spec.d.ts.map +0 -1
  781. package/lib/utils/throttler.spec.js +0 -53
  782. package/lib/utils/throttler.spec.js.map +0 -1
  783. package/lib/utils/waiter.d.ts +0 -94
  784. package/lib/utils/waiter.d.ts.map +0 -1
  785. package/lib/utils/waiter.js +0 -148
  786. package/lib/utils/waiter.js.map +0 -1
  787. package/lib/utils/waiter.spec.d.ts +0 -2
  788. package/lib/utils/waiter.spec.d.ts.map +0 -1
  789. package/lib/utils/waiter.spec.js +0 -98
  790. package/lib/utils/waiter.spec.js.map +0 -1
  791. package/test/jsonutils/mdocs.yaml +0 -56
  792. package/test/jsonutils/test.json +0 -3
  793. package/test/jsonutils/test.yml +0 -5
@@ -0,0 +1,780 @@
1
+ import { QueryValidator } from "@webda/ql";
2
+ import { TransformCase } from "@webda/utils";
3
+ import { OperationsTransport, OperationsTransportParameters } from "../services/operationstransport.js";
4
+ import * as WebdaError from "../errors/errors.js";
5
+ import { useRouter } from "./hooks.js";
6
+ import { useApplication } from "../application/hooks.js";
7
+ import { useCore, useModelMetadata } from "../core/hooks.js";
8
+ import { useInstanceStorage } from "../core/instancestorage.js";
9
+ import { callOperation } from "../core/operations.js";
10
+ import { hasSchema } from "../schemas/hooks.js";
11
+ /**
12
+ * Swagger static html
13
+ */
14
+ const SWAGGER_HTML = `
15
+ <html>
16
+ <head>
17
+ <meta charset="UTF-8">
18
+ <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/{{VERSION}}/swagger-ui.css" >
19
+ <style>
20
+ .topbar {
21
+ display: none;
22
+ }
23
+ </style>
24
+ </head>
25
+
26
+ <body>
27
+ <div id="swagger-ui"></div>
28
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/{{VERSION}}/swagger-ui-bundle.js"> </script>
29
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/{{VERSION}}/swagger-ui-standalone-preset.js"> </script>
30
+ <script>
31
+ const spec = {{OPENAPI}};
32
+ window.onload = function() {
33
+ const ui = SwaggerUIBundle({
34
+ spec: spec,
35
+ dom_id: '#swagger-ui',
36
+ deepLinking: true,
37
+ presets: [
38
+ SwaggerUIBundle.presets.apis,
39
+ SwaggerUIStandalonePreset
40
+ ],
41
+ plugins: [
42
+ SwaggerUIBundle.plugins.DownloadUrl
43
+ ],
44
+ layout: "StandaloneLayout"
45
+ })
46
+
47
+ window.ui = ui
48
+ }
49
+ </script>
50
+ </body>
51
+ </html>
52
+ `;
53
+ /**
54
+ * Parameters for RESTOperationsTransport
55
+ */
56
+ export class RESTOperationsTransportParameters extends OperationsTransportParameters {
57
+ /**
58
+ * Expose the OpenAPI
59
+ *
60
+ * @default true if debug false otherwise
61
+ */
62
+ exposeOpenAPI;
63
+ /**
64
+ * Swagger version to use
65
+ *
66
+ * https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.19.5/swagger-ui.css
67
+ * https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.19.5/swagger-ui-bundle.js
68
+ * https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.19.5/swagger-ui-standalone-preset.js
69
+ *
70
+ * TODO Add renovatebot regex
71
+ */
72
+ swaggerVersion = "5.31.0";
73
+ /**
74
+ * Base URL for the REST API
75
+ */
76
+ url = "/";
77
+ /**
78
+ * Transform the name of the model to be used in the URL
79
+ *
80
+ * @see https://blog.boot.dev/clean-code/casings-in-coding/
81
+ * @default camelCase
82
+ */
83
+ nameTransformer;
84
+ /**
85
+ * Method used for query objects
86
+ *
87
+ * @default "PUT"
88
+ */
89
+ queryMethod;
90
+ /**
91
+ * Load parameters with defaults
92
+ * @param params - the service parameters
93
+ * @returns this for chaining
94
+ */
95
+ load(params = {}) {
96
+ super.load(params);
97
+ this.nameTransformer ??= "camelCase";
98
+ this.queryMethod ??= "PUT";
99
+ // Ensure url ends with /
100
+ if (this.url && !this.url.endsWith("/")) {
101
+ this.url += "/";
102
+ }
103
+ return this;
104
+ }
105
+ }
106
+ /**
107
+ * REST transport that exposes model operations as RESTful HTTP routes.
108
+ *
109
+ * Instead of iterating operations flat, it walks the model tree
110
+ * (parent/child relationships) to build nested URL prefixes like
111
+ * `/companies/{pid.0}/users/{uuid}`.
112
+ *
113
+ * @WebdaModda
114
+ */
115
+ export class RESTOperationsTransport extends OperationsTransport {
116
+ /**
117
+ * OpenAPI cache
118
+ */
119
+ openapiContent;
120
+ /**
121
+ * Transform name using configured casing
122
+ * @param name - the name to transform
123
+ * @returns the transformed name
124
+ */
125
+ transformName(name) {
126
+ return TransformCase(name, this.parameters.nameTransformer);
127
+ }
128
+ /**
129
+ * Resolve the service - set up OpenAPI route if configured
130
+ * @returns this for chaining
131
+ */
132
+ resolve() {
133
+ this.parameters.exposeOpenAPI ??= useCore().isDebug();
134
+ super.resolve();
135
+ if (this.parameters.exposeOpenAPI) {
136
+ this.addRoute(".", ["GET"], this.openapi, { hidden: true });
137
+ }
138
+ return this;
139
+ }
140
+ /**
141
+ * Override initTransport to walk the model tree instead of flat iteration.
142
+ * For each model, we look up its operations and register REST routes.
143
+ */
144
+ initTransport() {
145
+ const app = useApplication();
146
+ const models = app.getModels();
147
+ const operations = this.getOperations();
148
+ // Build a set of models that have parents, and find root models
149
+ const childModels = new Set();
150
+ for (const modelKey in models) {
151
+ const model = models[modelKey];
152
+ if (!model)
153
+ continue;
154
+ const metadata = useModelMetadata(model);
155
+ if (!metadata)
156
+ continue;
157
+ if (!app.isFinalModel(metadata.Identifier))
158
+ continue;
159
+ if (metadata.Relations?.parent) {
160
+ childModels.add(metadata.Identifier);
161
+ }
162
+ }
163
+ // Walk root models (no parent)
164
+ for (const modelKey in models) {
165
+ const model = models[modelKey];
166
+ if (!model)
167
+ continue;
168
+ const metadata = useModelMetadata(model);
169
+ if (!metadata)
170
+ continue;
171
+ if (!app.isFinalModel(metadata.Identifier))
172
+ continue;
173
+ if (childModels.has(metadata.Identifier))
174
+ continue;
175
+ // This is a root model - walk it
176
+ this.walkModel(model, metadata, operations, this.parameters.url, 0);
177
+ }
178
+ // Expose non-model operations (e.g., bean @Operation methods) that have REST hints
179
+ this.exposeServiceOperations(operations);
180
+ }
181
+ /**
182
+ * Expose service/bean operations that have rest hints but aren't tied to model CRUD.
183
+ * These are operations registered by Service.initOperations() from @Operation decorators.
184
+ * @param operations - the filtered operations map
185
+ */
186
+ exposeServiceOperations(operations) {
187
+ for (const [opId, op] of Object.entries(operations)) {
188
+ if (op.hidden)
189
+ continue;
190
+ // Skip if this operation was already handled by model tree walk
191
+ if (op.context?.model)
192
+ continue;
193
+ let path;
194
+ let methods;
195
+ if (op.rest) {
196
+ const rest = op.rest;
197
+ path = rest.path.startsWith("/") ? rest.path : `${this.parameters.url}${rest.path}`;
198
+ methods = [rest.method.toUpperCase()];
199
+ }
200
+ else {
201
+ // Default: expose as operationId.toLowerCase().replace(".", "/")
202
+ path = `${this.parameters.url}${opId.toLowerCase().replace(/\./g, "/")}`;
203
+ methods = ["PUT"];
204
+ }
205
+ const openapi = {
206
+ [methods[0].toLowerCase()]: {
207
+ tags: op.tags || [],
208
+ summary: op.summary || opId,
209
+ operationId: opId
210
+ }
211
+ };
212
+ this.addRoute(path, methods, async (context) => {
213
+ await callOperation(context, opId);
214
+ }, openapi);
215
+ }
216
+ }
217
+ /**
218
+ * Recursively walk a model and its children, registering routes at each level
219
+ * @param model - the model class
220
+ * @param metadata - model metadata
221
+ * @param operations - filtered operations map
222
+ * @param basePrefix - URL prefix from parent context
223
+ * @param depth - nesting depth for parent id parameters
224
+ */
225
+ walkModel(model, metadata, operations, basePrefix, depth) {
226
+ const app = useApplication();
227
+ const { Relations: relations, Identifier, Plural: plural, Actions: actions } = metadata;
228
+ const injectAttribute = relations?.parent?.attribute;
229
+ const shortId = Identifier.split("/").pop();
230
+ const name = plural;
231
+ // Build prefix for this model
232
+ const prefix = basePrefix + this.transformName(name);
233
+ // Register the model url with the router
234
+ useRouter()?.registerModelUrl(app.getModelId(model), prefix);
235
+ // Register routes for standard CRUD operations
236
+ this.exposeQueryRoute(prefix, plural, shortId, Identifier, depth, injectAttribute, operations);
237
+ this.exposeCreateRoute(prefix, shortId, Identifier, depth, injectAttribute, operations);
238
+ this.exposeDeleteRoute(prefix, shortId, Identifier, operations);
239
+ this.exposeUpdateRoute(prefix, shortId, Identifier, operations);
240
+ this.exposeGetRoute(prefix, shortId, Identifier, operations);
241
+ // Register action routes
242
+ const actionsName = Object.keys(actions);
243
+ actionsName
244
+ .filter(k => !["create", "update", "delete", "get", "query"].includes(k))
245
+ .forEach(actionName => {
246
+ this.exposeActionRoute(prefix, shortId, Identifier, actionName, actions[actionName], depth, injectAttribute);
247
+ });
248
+ // Register behavior routes
249
+ (relations.behaviors || []).forEach(behavior => {
250
+ this.exposeBehaviorRoutes(prefix, shortId, Identifier, name, behavior);
251
+ });
252
+ // Find children (models whose parent points to this model)
253
+ const childPrefix = prefix + `/{pid.${depth}}/`;
254
+ const models = app.getModels();
255
+ for (const childKey in models) {
256
+ const childModel = models[childKey];
257
+ if (!childModel)
258
+ continue;
259
+ const childMetadata = useModelMetadata(childModel);
260
+ if (!childMetadata)
261
+ continue;
262
+ if (!app.isFinalModel(childMetadata.Identifier))
263
+ continue;
264
+ if (!childMetadata.Relations?.parent)
265
+ continue;
266
+ if (childMetadata.Relations.parent.model !== Identifier)
267
+ continue;
268
+ this.walkModel(childModel, childMetadata, operations, childPrefix, depth + 1);
269
+ }
270
+ }
271
+ /**
272
+ * Register query route for a model
273
+ * @param prefix - the URL prefix for this model
274
+ * @param plural - the pluralized model name
275
+ * @param shortId - the short model identifier
276
+ * @param identifier - the full model identifier
277
+ * @param depth - nesting depth for parent id parameters
278
+ * @param injectAttribute - parent attribute to inject in queries
279
+ * @param operations - the filtered operations map
280
+ */
281
+ exposeQueryRoute(prefix, plural, shortId, identifier, depth, injectAttribute, operations) {
282
+ const operationId = `${plural}.Query`;
283
+ if (!operations[operationId])
284
+ return;
285
+ const openapi = {
286
+ [this.parameters.queryMethod.toLowerCase()]: {
287
+ tags: [shortId],
288
+ summary: `Query ${shortId}`,
289
+ operationId,
290
+ requestBody: this.parameters.queryMethod === "GET"
291
+ ? undefined
292
+ : {
293
+ content: {
294
+ "application/json": {
295
+ schema: {
296
+ properties: {
297
+ q: {
298
+ type: "string"
299
+ }
300
+ }
301
+ }
302
+ }
303
+ }
304
+ },
305
+ parameters: this.parameters.queryMethod === "GET"
306
+ ? [
307
+ {
308
+ name: "q",
309
+ in: "query",
310
+ description: "Query to execute",
311
+ schema: {
312
+ type: "string"
313
+ }
314
+ }
315
+ ]
316
+ : [],
317
+ responses: {
318
+ "200": {
319
+ description: "Operation success",
320
+ content: {
321
+ "application/json": {
322
+ schema: {
323
+ properties: {
324
+ continuationToken: {
325
+ type: "string"
326
+ },
327
+ results: {
328
+ type: "array",
329
+ items: {
330
+ $ref: `#/components/schemas/${identifier}`
331
+ }
332
+ }
333
+ }
334
+ }
335
+ }
336
+ }
337
+ },
338
+ "400": {
339
+ description: "Query is invalid"
340
+ },
341
+ "403": {
342
+ description: "You don't have permissions"
343
+ }
344
+ }
345
+ }
346
+ };
347
+ this.addRoute(`${prefix}${this.parameters.queryMethod === "GET" ? "{?q?}" : ""}`, [this.parameters.queryMethod], async (context) => {
348
+ let queryString = "";
349
+ const parentId = `pid.${depth - 1}`;
350
+ if (context.getHttpContext().getMethod() === "PUT") {
351
+ queryString = (await context.getInput()).q ?? "";
352
+ context.clearInput();
353
+ }
354
+ else {
355
+ queryString = context.parameter("q", "");
356
+ }
357
+ let query;
358
+ try {
359
+ query = new QueryValidator(queryString);
360
+ }
361
+ catch (err) {
362
+ throw new WebdaError.BadRequest(`Invalid query ${queryString}`);
363
+ }
364
+ // Inject parent attribute
365
+ if (injectAttribute) {
366
+ query.merge(`${injectAttribute} = '${context.parameter(parentId)}'`);
367
+ }
368
+ context.getParameters().query = query.toString();
369
+ return callOperation(context, operationId);
370
+ }, openapi);
371
+ }
372
+ /**
373
+ * Register create route for a model
374
+ * @param prefix - the URL prefix for this model
375
+ * @param shortId - the short model identifier
376
+ * @param identifier - the full model identifier
377
+ * @param depth - nesting depth for parent id parameters
378
+ * @param injectAttribute - parent attribute to inject on create
379
+ * @param operations - the filtered operations map
380
+ */
381
+ exposeCreateRoute(prefix, shortId, identifier, depth, injectAttribute, operations) {
382
+ const operationId = `${shortId}.Create`;
383
+ if (!operations[operationId])
384
+ return;
385
+ const openapi = {
386
+ post: {
387
+ tags: [shortId],
388
+ summary: `Create ${shortId}`,
389
+ operationId,
390
+ requestBody: {
391
+ content: {
392
+ "application/json": {
393
+ schema: {
394
+ $ref: `#/components/schemas/${identifier}`
395
+ }
396
+ }
397
+ }
398
+ },
399
+ responses: {
400
+ "201": {
401
+ description: "Operation success",
402
+ content: {
403
+ "application/json": {
404
+ schema: {
405
+ $ref: `#/components/schemas/${identifier}`
406
+ }
407
+ }
408
+ }
409
+ },
410
+ "400": {
411
+ description: "Invalid input"
412
+ },
413
+ "403": {
414
+ description: "You don't have permissions"
415
+ },
416
+ "409": {
417
+ description: "Object already exists"
418
+ }
419
+ }
420
+ }
421
+ };
422
+ // Lookup pkFields from the operation context to build a Location header
423
+ // that uses the model's real primary key (slug, uuid, composite, etc.).
424
+ const createCtx = operations[operationId]?.context;
425
+ const pkFields = createCtx?.pkFields ?? ["uuid"];
426
+ this.addRoute(`${prefix}`, ["POST"], async (context) => {
427
+ // Inject the parent attribute
428
+ if (injectAttribute) {
429
+ (await context.getInput())[injectAttribute] = context.parameter(`pid.${depth - 1}`);
430
+ }
431
+ await callOperation(context, operationId);
432
+ // Add Location for successful creates without changing the status code —
433
+ // the rest of the framework (and the shipped tests) assume 2xx without
434
+ // the 200→201 upgrade, so surface the URL via header only.
435
+ if (context.statusCode < 300 || context.statusCode === 204) {
436
+ const output = context.getOutput();
437
+ if (output) {
438
+ try {
439
+ const parsed = typeof output === "string" ? JSON.parse(output) : output;
440
+ const pkParts = pkFields.map(f => parsed?.[f]).filter(v => v !== undefined && v !== null);
441
+ if (pkParts.length === pkFields.length) {
442
+ context.setHeader("Location", `${context.getHttpContext().getAbsoluteUrl()}/${pkParts.join("/")}`);
443
+ }
444
+ }
445
+ catch {
446
+ // Not JSON, skip Location
447
+ }
448
+ }
449
+ }
450
+ }, openapi);
451
+ }
452
+ /**
453
+ * Register delete route for a model
454
+ * @param prefix - the URL prefix for this model
455
+ * @param shortId - the short model identifier
456
+ * @param identifier - the full model identifier
457
+ * @param operations - the filtered operations map
458
+ */
459
+ exposeDeleteRoute(prefix, shortId, identifier, operations) {
460
+ const operationId = `${shortId}.Delete`;
461
+ if (!operations[operationId])
462
+ return;
463
+ const openapi = {
464
+ delete: {
465
+ tags: [shortId],
466
+ operationId,
467
+ description: `Delete ${shortId} if the permissions allow`,
468
+ summary: `Delete a ${shortId}`,
469
+ responses: {
470
+ "204": {
471
+ description: "Operation success"
472
+ },
473
+ "403": {
474
+ description: "You don't have permissions"
475
+ },
476
+ "404": {
477
+ description: "Unknown object"
478
+ }
479
+ }
480
+ }
481
+ };
482
+ // Use the operation's declared REST path so the URL params match the model's
483
+ // actual primary-key field names (e.g. {slug} for Tag, {follower}/{following}
484
+ // for UserFollow). Fall back to {uuid} for legacy operations.
485
+ const pathSuffix = typeof operations[operationId].rest === "object"
486
+ ? operations[operationId].rest.path || "{uuid}"
487
+ : "{uuid}";
488
+ this.addRoute(`${prefix}/${pathSuffix}`, ["DELETE"], async (context) => {
489
+ await callOperation(context, operationId);
490
+ // Convention: 204 No Content
491
+ if (context.statusCode < 300 || context.statusCode === 204) {
492
+ context.writeHead(204);
493
+ }
494
+ }, openapi);
495
+ }
496
+ /**
497
+ * Register update (PUT) and patch (PATCH) routes for a model
498
+ * @param prefix - the URL prefix for this model
499
+ * @param shortId - the short model identifier
500
+ * @param identifier - the full model identifier
501
+ * @param operations - the filtered operations map
502
+ */
503
+ exposeUpdateRoute(prefix, shortId, identifier, operations) {
504
+ const updateOpId = `${shortId}.Update`;
505
+ const patchOpId = `${shortId}.Patch`;
506
+ if (!operations[updateOpId] && !operations[patchOpId])
507
+ return;
508
+ const hasUpdate = operations[updateOpId] !== undefined;
509
+ const hasPatch = operations[patchOpId] !== undefined;
510
+ const describe = (operationId, verb) => ({
511
+ tags: [shortId],
512
+ operationId,
513
+ description: `${verb} ${shortId} if the permissions allow`,
514
+ summary: operations[operationId]?.summary ?? `${verb} a ${shortId}`,
515
+ requestBody: {
516
+ content: {
517
+ "application/json": {
518
+ schema: {
519
+ $ref: `#/components/schemas/${identifier}`
520
+ }
521
+ }
522
+ }
523
+ },
524
+ responses: {
525
+ "204": {
526
+ description: "Operation success"
527
+ },
528
+ "400": {
529
+ description: "Invalid input"
530
+ },
531
+ "403": {
532
+ description: "You don't have permissions"
533
+ },
534
+ "404": {
535
+ description: "Unknown object"
536
+ }
537
+ }
538
+ });
539
+ // A verb without its own operation is served by the other one (see the
540
+ // handler below); document it without an operationId, which must be unique
541
+ const servedBy = (info) => {
542
+ const { operationId: _servedBy, ...rest } = info;
543
+ return rest;
544
+ };
545
+ const updateInfo = hasUpdate ? describe(updateOpId, "Update") : undefined;
546
+ const patchInfo = hasPatch ? describe(patchOpId, "Patch") : undefined;
547
+ const openapi = {
548
+ put: updateInfo ?? servedBy(patchInfo),
549
+ patch: patchInfo ?? servedBy(updateInfo)
550
+ };
551
+ // Use the update op's declared REST path so URL params match the PK fields.
552
+ const updateOp = operations[updateOpId] ?? operations[patchOpId];
553
+ const pathSuffix = typeof updateOp?.rest === "object"
554
+ ? updateOp.rest.path || "{uuid}"
555
+ : "{uuid}";
556
+ // DomainService registers both `${shortId}.Update` and `${shortId}.Patch`;
557
+ // when an application declares only one of them, route both verbs to it
558
+ // (modelUpdate's load() already merges, which is patch semantics).
559
+ this.addRoute(`${prefix}/${pathSuffix}`, ["PUT", "PATCH"], (context) => {
560
+ const method = context.getHttpContext().getMethod();
561
+ // Fall back to whichever operation is registered so users can override
562
+ // just one of Update/Patch without breaking the other HTTP verb.
563
+ if (method === "PATCH") {
564
+ return callOperation(context, hasPatch ? patchOpId : updateOpId);
565
+ }
566
+ return callOperation(context, hasUpdate ? updateOpId : patchOpId);
567
+ }, openapi);
568
+ }
569
+ /**
570
+ * Register get route for a model
571
+ * @param prefix - the URL prefix for this model
572
+ * @param shortId - the short model identifier
573
+ * @param identifier - the full model identifier
574
+ * @param operations - the filtered operations map
575
+ */
576
+ exposeGetRoute(prefix, shortId, identifier, operations) {
577
+ const operationId = `${shortId}.Get`;
578
+ if (!operations[operationId])
579
+ return;
580
+ const openapi = {
581
+ get: {
582
+ tags: [shortId],
583
+ description: `Retrieve ${shortId} model if permissions allow`,
584
+ summary: `Retrieve a ${shortId}`,
585
+ operationId,
586
+ responses: {
587
+ "200": {
588
+ content: {
589
+ "application/json": {
590
+ schema: {
591
+ $ref: `#/components/schemas/${identifier}`
592
+ }
593
+ }
594
+ }
595
+ },
596
+ "400": {
597
+ description: "Object is invalid"
598
+ },
599
+ "403": {
600
+ description: "You don't have permissions"
601
+ },
602
+ "404": {
603
+ description: "Unknown object"
604
+ }
605
+ }
606
+ }
607
+ };
608
+ const pathSuffix = typeof operations[operationId].rest === "object"
609
+ ? operations[operationId].rest.path || "{uuid}"
610
+ : "{uuid}";
611
+ this.addRoute(`${prefix}/${pathSuffix}`, ["GET"], (context) => callOperation(context, operationId), openapi);
612
+ }
613
+ /**
614
+ * Register action route for a model
615
+ * @param prefix - the URL prefix for this model
616
+ * @param shortId - the short model identifier
617
+ * @param identifier - the full model identifier
618
+ * @param actionName - the name of the action
619
+ * @param action - the action definition
620
+ * @param depth - nesting depth for parent id parameters
621
+ * @param injectAttribute - parent attribute to inject
622
+ */
623
+ exposeActionRoute(prefix, shortId, identifier, actionName, action, depth, injectAttribute) {
624
+ const actionOperationName = actionName.substring(0, 1).toUpperCase() + actionName.substring(1);
625
+ const operationId = `${shortId}.${actionOperationName}`;
626
+ const openapi = {
627
+ ...action.openapi
628
+ };
629
+ (action.methods || ["PUT"]).forEach((method, index) => {
630
+ openapi[method.toLowerCase()] = {
631
+ tags: [shortId],
632
+ // operationIds must be unique: when an action accepts several methods,
633
+ // the first one carries the operation the route dispatches to
634
+ ...(index === 0 ? { operationId } : {}),
635
+ ...(action.openapi?.[method.toLowerCase()] ?? {})
636
+ };
637
+ });
638
+ if (hasSchema(`${identifier}.${actionName}.input`)) {
639
+ Object.keys(openapi)
640
+ .filter(k => ["get", "post", "put", "patch", "delete"].includes(k))
641
+ .forEach(k => {
642
+ openapi[k].requestBody = {
643
+ content: {
644
+ "application/json": {
645
+ schema: {
646
+ $ref: `#/components/schemas/${identifier}.${actionName}.input`
647
+ }
648
+ }
649
+ }
650
+ };
651
+ });
652
+ }
653
+ if (hasSchema(`${identifier}.${actionName}.output`)) {
654
+ Object.keys(openapi)
655
+ .filter(k => ["get", "post", "put", "patch", "delete"].includes(k))
656
+ .forEach(k => {
657
+ openapi[k].responses ??= {};
658
+ openapi[k].responses["200"] ??= {};
659
+ openapi[k].responses["200"].content = {
660
+ "application/json": {
661
+ schema: {
662
+ $ref: `#/components/schemas/${identifier}.${actionName}.output`
663
+ }
664
+ }
665
+ };
666
+ });
667
+ }
668
+ this.addRoute(action.global ? `${prefix}/${actionName}` : `${prefix}/{uuid}/${actionName}`, action.methods || ["PUT"], async (context) => {
669
+ if (injectAttribute) {
670
+ context.getParameters()[injectAttribute] = context.parameter(`pid.${depth - 1}`);
671
+ context.getParameters()[`pid.${depth - 1}`] = undefined;
672
+ }
673
+ await callOperation(context, operationId);
674
+ }, openapi);
675
+ }
676
+ /**
677
+ * Register routes for every `@Action` on every Behavior attribute of a
678
+ * model. The default URL pattern is `{prefix}/{uuid}/{attribute}.{action}`
679
+ * (PUT) — the dot disambiguates Behavior calls from nested-resource routing.
680
+ *
681
+ * Authors can override the route via `@Action({ rest: { route, method } })`.
682
+ * `addBehaviorOperations` resolves that hint and writes the final
683
+ * `rest.method`/`rest.path` on the registered operation; this method just
684
+ * mirrors what's there, falling back to the dot-notation default if no
685
+ * hint was set.
686
+ *
687
+ * Each route dispatches the registered behavior operation
688
+ * (`{ShortId}.{AttributeCap}.{ActionCap}`). The dispatcher itself
689
+ * (`modelBehaviorAction`) handles model load, `canAct` gating, and method
690
+ * invocation — this method only wires the HTTP surface.
691
+ *
692
+ * Schema decoration on the OpenAPI doc is best-effort — we lean on
693
+ * `hasSchema()` (the AJV registry) to decide whether to emit
694
+ * `requestBody` / `responses` `$ref`s.
695
+ *
696
+ * @param prefix - the URL prefix for this model (e.g. `/api/users`)
697
+ * @param shortId - the short model identifier (e.g. `User`)
698
+ * @param identifier - the full model identifier (e.g. `MyApp/User`) — accepted
699
+ * for symmetry with `walkModel`'s caller signature even though we don't currently use it
700
+ * @param name - the model display name used in OpenAPI tags
701
+ * @param behavior - the Behavior attribute relation to expose
702
+ */
703
+ exposeBehaviorRoutes(prefix, shortId, identifier, name, behavior) {
704
+ void identifier;
705
+ void name;
706
+ const app = useApplication();
707
+ const behaviorMeta = app.getBehaviorMetadata(behavior.behavior);
708
+ if (!behaviorMeta) {
709
+ return;
710
+ }
711
+ const attributeCap = behavior.attribute.substring(0, 1).toUpperCase() + behavior.attribute.substring(1);
712
+ const ops = useInstanceStorage().operations;
713
+ Object.keys(behaviorMeta.Actions || {}).forEach(actionName => {
714
+ const actionCap = actionName.substring(0, 1).toUpperCase() + actionName.substring(1);
715
+ const operationId = `${shortId}.${attributeCap}.${actionCap}`;
716
+ // Read REST hints from the registered operation. addBehaviorOperations
717
+ // resolves the action's `rest: { route, method }` decorator option (if
718
+ // any) and writes the final method+path here, so we just mirror it.
719
+ const op = ops?.[operationId];
720
+ const restHint = op?.rest && typeof op.rest === "object" ? op.rest : undefined;
721
+ const httpMethod = (restHint?.method ?? "put").toUpperCase();
722
+ const methodKey = httpMethod.toLowerCase();
723
+ // `rest.path` is relative to the model prefix and starts with `{uuid}/`.
724
+ const relativePath = restHint?.path ?? `{uuid}/${behavior.attribute}.${actionName}`;
725
+ const fullPath = `${prefix}/${relativePath}`;
726
+ const openapi = {
727
+ [methodKey]: {
728
+ tags: [shortId],
729
+ summary: `${actionCap} on ${shortId}.${behavior.attribute}`,
730
+ operationId
731
+ }
732
+ };
733
+ const inputSchema = `${behavior.behavior}.${actionName}.input`;
734
+ const outputSchema = `${behavior.behavior}.${actionName}.output`;
735
+ if (hasSchema(inputSchema)) {
736
+ openapi[methodKey].requestBody = {
737
+ content: {
738
+ "application/json": {
739
+ schema: {
740
+ $ref: `#/components/schemas/${inputSchema}`
741
+ }
742
+ }
743
+ }
744
+ };
745
+ }
746
+ if (hasSchema(outputSchema)) {
747
+ openapi[methodKey].responses = {
748
+ "200": {
749
+ description: "Operation success",
750
+ content: {
751
+ "application/json": {
752
+ schema: {
753
+ $ref: `#/components/schemas/${outputSchema}`
754
+ }
755
+ }
756
+ }
757
+ }
758
+ };
759
+ }
760
+ this.addRoute(fullPath, [httpMethod], async (context) => callOperation(context, operationId), openapi);
761
+ });
762
+ }
763
+ /**
764
+ * No-op: route exposure is handled entirely by initTransport's tree walk
765
+ * @param _operationId - the operation identifier (unused)
766
+ * @param _definition - the operation definition (unused)
767
+ */
768
+ exposeOperation(_operationId, _definition) {
769
+ // Handled by initTransport's tree walk
770
+ }
771
+ /**
772
+ * Serve the openapi with the swagger-ui
773
+ * @param ctx - the web context
774
+ */
775
+ async openapi(ctx) {
776
+ this.openapiContent ??= SWAGGER_HTML.replace(/\{\{VERSION}}/g, this.parameters.swaggerVersion).replace("{{OPENAPI}}", JSON.stringify(useRouter().exportOpenAPI(true)));
777
+ ctx.write(this.openapiContent);
778
+ }
779
+ }
780
+ //# sourceMappingURL=restoperationstransport.service.js.map