@paroicms/server 1.78.1 → 1.80.0

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 (449) hide show
  1. package/README.md +4 -4
  2. package/dist/{modules/core → bo-backend}/account/account.formatters.js +1 -1
  3. package/dist/bo-backend/account/account.formatters.js.map +1 -0
  4. package/dist/{modules/core → bo-backend}/account/account.queries.d.ts +1 -1
  5. package/dist/{modules/core → bo-backend}/account/account.queries.js +58 -95
  6. package/dist/bo-backend/account/account.queries.js.map +1 -0
  7. package/dist/bo-backend/account/account.resolver.d.ts +3 -0
  8. package/dist/{modules/core → bo-backend}/account/account.resolver.js +18 -18
  9. package/dist/bo-backend/account/account.resolver.js.map +1 -0
  10. package/dist/{modules/core → bo-backend}/auth/auth.helper.d.ts +2 -1
  11. package/dist/{modules/core → bo-backend}/auth/auth.helper.js +4 -3
  12. package/dist/bo-backend/auth/auth.helper.js.map +1 -0
  13. package/dist/{modules/core → bo-backend}/auth/auth.service.d.ts +1 -1
  14. package/dist/{modules/core → bo-backend}/auth/auth.service.js +5 -5
  15. package/dist/bo-backend/auth/auth.service.js.map +1 -0
  16. package/dist/bo-backend/auth/auth.types.js.map +1 -0
  17. package/dist/bo-backend/backup/backup.controller.d.ts +3 -0
  18. package/dist/{modules/core → bo-backend}/backup/backup.controller.js +6 -6
  19. package/dist/bo-backend/backup/backup.controller.js.map +1 -0
  20. package/dist/{modules/core → bo-backend}/backup/backup.helper.js +2 -2
  21. package/dist/bo-backend/backup/backup.helper.js.map +1 -0
  22. package/dist/{modules/core → bo-backend}/backup/backup.resolver.d.ts +2 -2
  23. package/dist/{modules/core → bo-backend}/backup/backup.resolver.js +3 -3
  24. package/dist/bo-backend/backup/backup.resolver.js.map +1 -0
  25. package/dist/bo-backend/document/document.helper.js.map +1 -0
  26. package/dist/bo-backend/document/document.resolver.d.ts +3 -0
  27. package/dist/bo-backend/document/document.resolver.extend.d.ts +3 -0
  28. package/dist/{modules/core → bo-backend}/document/document.resolver.extend.js +5 -5
  29. package/dist/bo-backend/document/document.resolver.extend.js.map +1 -0
  30. package/dist/{modules/core → bo-backend}/document/document.resolver.js +16 -16
  31. package/dist/bo-backend/document/document.resolver.js.map +1 -0
  32. package/dist/{modules/core → bo-backend}/document/load-documents.queries.d.ts +1 -1
  33. package/dist/bo-backend/document/load-documents.queries.js +90 -0
  34. package/dist/bo-backend/document/load-documents.queries.js.map +1 -0
  35. package/dist/{modules/core → bo-backend}/document/save-documents.queries.d.ts +1 -1
  36. package/dist/bo-backend/document/save-documents.queries.js +206 -0
  37. package/dist/bo-backend/document/save-documents.queries.js.map +1 -0
  38. package/dist/bo-backend/fields/_fields.helpers.js.map +1 -0
  39. package/dist/{modules/core → bo-backend}/fields/fields.resolver.d.ts +2 -2
  40. package/dist/{modules/core → bo-backend}/fields/fields.resolver.js +11 -11
  41. package/dist/bo-backend/fields/fields.resolver.js.map +1 -0
  42. package/dist/{modules/core → bo-backend}/fields/load-fields-of.queries.d.ts +1 -1
  43. package/dist/{modules/core → bo-backend}/fields/load-fields-of.queries.js +10 -12
  44. package/dist/bo-backend/fields/load-fields-of.queries.js.map +1 -0
  45. package/dist/{modules/core → bo-backend}/fields/load-fields.queries.d.ts +1 -1
  46. package/dist/{modules/core → bo-backend}/fields/load-fields.queries.js +14 -26
  47. package/dist/bo-backend/fields/load-fields.queries.js.map +1 -0
  48. package/dist/{modules/core → bo-backend}/fields/preprocess-fields.d.ts +2 -2
  49. package/dist/{modules/core → bo-backend}/fields/preprocess-fields.js +1 -1
  50. package/dist/bo-backend/fields/preprocess-fields.js.map +1 -0
  51. package/dist/{modules/core → bo-backend}/fields/save-fields.queries.d.ts +1 -1
  52. package/dist/{modules/core → bo-backend}/fields/save-fields.queries.js +27 -39
  53. package/dist/bo-backend/fields/save-fields.queries.js.map +1 -0
  54. package/dist/{modules/core → bo-backend}/labeling/labeling.queries.d.ts +1 -1
  55. package/dist/bo-backend/labeling/labeling.queries.js +47 -0
  56. package/dist/bo-backend/labeling/labeling.queries.js.map +1 -0
  57. package/dist/bo-backend/labeling/labeling.resolver.d.ts +3 -0
  58. package/dist/{modules/core → bo-backend}/labeling/labeling.resolver.js +2 -2
  59. package/dist/bo-backend/labeling/labeling.resolver.js.map +1 -0
  60. package/dist/bo-backend/login/login.controller.d.ts +3 -0
  61. package/dist/bo-backend/login/login.controller.js +31 -0
  62. package/dist/bo-backend/login/login.controller.js.map +1 -0
  63. package/dist/{modules/core → bo-backend}/media/add-media-to-node.d.ts +1 -1
  64. package/dist/{modules/core → bo-backend}/media/add-media-to-node.js +4 -4
  65. package/dist/bo-backend/media/add-media-to-node.js.map +1 -0
  66. package/dist/bo-backend/media/media-upload.controller.d.ts +3 -0
  67. package/dist/{modules/core → bo-backend}/media/media-upload.controller.js +4 -5
  68. package/dist/bo-backend/media/media-upload.controller.js.map +1 -0
  69. package/dist/{modules/core → bo-backend}/media/media.d.ts +1 -1
  70. package/dist/{modules/core → bo-backend}/media/media.js +2 -2
  71. package/dist/bo-backend/media/media.js.map +1 -0
  72. package/dist/bo-backend/media/media.resolver.d.ts +3 -0
  73. package/dist/bo-backend/media/media.resolver.extend.d.ts +3 -0
  74. package/dist/{modules/core → bo-backend}/media/media.resolver.extend.js +2 -2
  75. package/dist/bo-backend/media/media.resolver.extend.js.map +1 -0
  76. package/dist/{modules/core → bo-backend}/media/media.resolver.js +20 -20
  77. package/dist/bo-backend/media/media.resolver.js.map +1 -0
  78. package/dist/{modules/core → bo-backend}/node/node.queries.d.ts +2 -2
  79. package/dist/{modules/core → bo-backend}/node/node.queries.js +40 -69
  80. package/dist/bo-backend/node/node.queries.js.map +1 -0
  81. package/dist/bo-backend/node/node.resolver.d.ts +3 -0
  82. package/dist/bo-backend/node/node.resolver.extend.d.ts +3 -0
  83. package/dist/{modules/core → bo-backend}/node/node.resolver.extend.js +2 -2
  84. package/dist/bo-backend/node/node.resolver.extend.js.map +1 -0
  85. package/dist/{modules/core → bo-backend}/node/node.resolver.js +8 -8
  86. package/dist/bo-backend/node/node.resolver.js.map +1 -0
  87. package/dist/{modules/core → bo-backend}/node/ordered-node.queries.d.ts +1 -1
  88. package/dist/{modules/core → bo-backend}/node/ordered-node.queries.js +13 -25
  89. package/dist/bo-backend/node/ordered-node.queries.js.map +1 -0
  90. package/dist/{modules/core → bo-backend}/nodel/nodel-wrap.formatters.d.ts +1 -1
  91. package/dist/{modules/core → bo-backend}/nodel/nodel-wrap.formatters.js +1 -1
  92. package/dist/bo-backend/nodel/nodel-wrap.formatters.js.map +1 -0
  93. package/dist/bo-backend/nodel/nodel-wrap.resolver.d.ts +3 -0
  94. package/dist/{modules/core → bo-backend}/nodel/nodel-wrap.resolver.js +20 -25
  95. package/dist/bo-backend/nodel/nodel-wrap.resolver.js.map +1 -0
  96. package/dist/{modules/core → bo-backend}/nodel/nodel.queries.d.ts +3 -3
  97. package/dist/{modules/core → bo-backend}/nodel/nodel.queries.js +57 -69
  98. package/dist/bo-backend/nodel/nodel.queries.js.map +1 -0
  99. package/dist/bo-backend/part/part-node.queries.d.ts +9 -0
  100. package/dist/bo-backend/part/part-node.queries.js +38 -0
  101. package/dist/bo-backend/part/part-node.queries.js.map +1 -0
  102. package/dist/{modules/core → bo-backend}/part/part.queries.d.ts +1 -1
  103. package/dist/{modules/core → bo-backend}/part/part.queries.js +89 -108
  104. package/dist/bo-backend/part/part.queries.js.map +1 -0
  105. package/dist/bo-backend/part/part.resolver.d.ts +3 -0
  106. package/dist/bo-backend/part/part.resolver.extend.d.ts +3 -0
  107. package/dist/{modules/core → bo-backend}/part/part.resolver.extend.js +4 -4
  108. package/dist/bo-backend/part/part.resolver.extend.js.map +1 -0
  109. package/dist/{modules/core → bo-backend}/part/part.resolver.js +10 -10
  110. package/dist/bo-backend/part/part.resolver.js.map +1 -0
  111. package/dist/bo-backend/site-constants/site-constants.resolver.d.ts +3 -0
  112. package/dist/{modules/core → bo-backend}/site-constants/site-constants.resolver.js +9 -9
  113. package/dist/bo-backend/site-constants/site-constants.resolver.js.map +1 -0
  114. package/dist/{modules/core → bo-backend}/unprotected/unprotected.resolver.d.ts +2 -2
  115. package/dist/{modules/core → bo-backend}/unprotected/unprotected.resolver.js +2 -2
  116. package/dist/bo-backend/unprotected/unprotected.resolver.js.map +1 -0
  117. package/dist/common/child-ordering-query.d.ts +2 -3
  118. package/dist/common/child-ordering-query.js +14 -18
  119. package/dist/common/child-ordering-query.js.map +1 -1
  120. package/dist/common/data-format.d.ts +3 -3
  121. package/dist/common/data-format.js.map +1 -1
  122. package/dist/common/serve-text-or.d.ts +3 -5
  123. package/dist/common/serve-text-or.js +7 -16
  124. package/dist/common/serve-text-or.js.map +1 -1
  125. package/dist/common/text-cache.js +1 -1
  126. package/dist/common/text-cache.js.map +1 -1
  127. package/dist/express/http-helpers.d.ts +17 -18
  128. package/dist/express/http-helpers.js +26 -25
  129. package/dist/express/http-helpers.js.map +1 -1
  130. package/dist/express/http-redirection-middleware.d.ts +2 -0
  131. package/dist/express/http-redirection-middleware.js +11 -0
  132. package/dist/express/http-redirection-middleware.js.map +1 -0
  133. package/dist/express/{create-redirect-url.js → http-redirection-url.js} +1 -1
  134. package/dist/express/http-redirection-url.js.map +1 -0
  135. package/dist/express/pa-http-context.d.ts +3 -0
  136. package/dist/express/pa-http-context.js +39 -0
  137. package/dist/express/pa-http-context.js.map +1 -0
  138. package/dist/express/public-api-middlewares.d.ts +3 -2
  139. package/dist/express/public-api-middlewares.js +9 -16
  140. package/dist/express/public-api-middlewares.js.map +1 -1
  141. package/dist/express/route-handler-wrapper.d.ts +9 -2
  142. package/dist/express/route-handler-wrapper.js +81 -28
  143. package/dist/express/route-handler-wrapper.js.map +1 -1
  144. package/dist/express/serve-file.d.ts +8 -0
  145. package/dist/express/serve-file.js +58 -0
  146. package/dist/express/serve-file.js.map +1 -0
  147. package/dist/express/site-middleware.d.ts +3 -0
  148. package/dist/express/site-middleware.js +83 -0
  149. package/dist/express/site-middleware.js.map +1 -0
  150. package/dist/express/static-files-middlewares.d.ts +5 -4
  151. package/dist/express/static-files-middlewares.js +48 -89
  152. package/dist/express/static-files-middlewares.js.map +1 -1
  153. package/dist/graphql/apollo-server-init.d.ts +1 -1
  154. package/dist/graphql/apollo-server-init.js +15 -15
  155. package/dist/graphql/apollo-server-init.js.map +1 -1
  156. package/dist/graphql/complexity-plugin.d.ts +1 -1
  157. package/dist/graphql/error-converter-plugin.d.ts +1 -1
  158. package/dist/graphql/error-converter-plugin.js.map +1 -1
  159. package/dist/{modules → graphql}/graphql.types.d.ts +2 -3
  160. package/dist/graphql/graphql.types.js.map +1 -0
  161. package/dist/helpers/cors-middleware.d.ts +6 -2
  162. package/dist/helpers/cors-middleware.js.map +1 -1
  163. package/dist/helpers/make-backend-plugin-service.js +8 -8
  164. package/dist/helpers/make-backend-plugin-service.js.map +1 -1
  165. package/dist/helpers/running-instance-connector.js +7 -12
  166. package/dist/helpers/running-instance-connector.js.map +1 -1
  167. package/dist/index.js +11 -82
  168. package/dist/index.js.map +1 -1
  169. package/dist/{modules/core/account-auth → oauth}/account-auth.service.d.ts +1 -1
  170. package/dist/{modules/core/account-auth → oauth}/account-auth.service.js +1 -1
  171. package/dist/oauth/account-auth.service.js.map +1 -0
  172. package/dist/{modules/core/account-auth → oauth}/account-auth.strategy.js +1 -1
  173. package/dist/oauth/account-auth.strategy.js.map +1 -0
  174. package/dist/oauth/oauth-middleware.d.ts +2 -2
  175. package/dist/oauth/oauth-middleware.js +19 -14
  176. package/dist/oauth/oauth-middleware.js.map +1 -1
  177. package/dist/oauth/oauth2-client.controller.d.ts +1 -1
  178. package/dist/oauth/oauth2-client.controller.js +4 -4
  179. package/dist/oauth/oauth2-client.controller.js.map +1 -1
  180. package/dist/{modules/public-api → public-api}/mail/validate-recaptcha-response.d.ts +1 -1
  181. package/dist/{modules/public-api → public-api}/mail/validate-recaptcha-response.js +1 -1
  182. package/dist/public-api/mail/validate-recaptcha-response.js.map +1 -0
  183. package/dist/public-api/password-reset/password-reset.controller.d.ts +6 -0
  184. package/dist/public-api/password-reset/password-reset.controller.js +46 -0
  185. package/dist/public-api/password-reset/password-reset.controller.js.map +1 -0
  186. package/dist/{modules/public-api → public-api}/password-reset/password-reset.service.d.ts +1 -1
  187. package/dist/{modules/public-api → public-api}/password-reset/password-reset.service.js +21 -19
  188. package/dist/public-api/password-reset/password-reset.service.js.map +1 -0
  189. package/dist/public-api/public-api-controller.d.ts +7 -0
  190. package/dist/public-api/public-api-controller.js +6 -0
  191. package/dist/public-api/public-api-controller.js.map +1 -0
  192. package/dist/{modules/public-api → public-api}/public-api-rendering.d.ts +4 -9
  193. package/dist/{modules/public-api → public-api}/public-api-rendering.js +24 -22
  194. package/dist/public-api/public-api-rendering.js.map +1 -0
  195. package/dist/{modules/public-api → public-api}/search-text/search-text.queries.d.ts +3 -3
  196. package/dist/public-api/search-text/search-text.queries.js +82 -0
  197. package/dist/public-api/search-text/search-text.queries.js.map +1 -0
  198. package/dist/public-payload/breadcrumb.queries.js +2 -2
  199. package/dist/public-payload/breadcrumb.queries.js.map +1 -1
  200. package/dist/public-payload/create-doc-drop.js +3 -3
  201. package/dist/public-payload/create-doc-drop.js.map +1 -1
  202. package/dist/public-payload/doc-values.queries.d.ts +2 -2
  203. package/dist/public-payload/doc-values.queries.js +33 -34
  204. package/dist/public-payload/doc-values.queries.js.map +1 -1
  205. package/dist/public-payload/excerpt.queries.js +9 -8
  206. package/dist/public-payload/excerpt.queries.js.map +1 -1
  207. package/dist/public-payload/field-values.js +3 -3
  208. package/dist/public-payload/field-values.js.map +1 -1
  209. package/dist/public-payload/get-siblings.queries.js +38 -47
  210. package/dist/public-payload/get-siblings.queries.js.map +1 -1
  211. package/dist/public-payload/load-default-image.js +1 -1
  212. package/dist/public-payload/load-default-image.js.map +1 -1
  213. package/dist/public-payload/parts.queries.js +34 -38
  214. package/dist/public-payload/parts.queries.js.map +1 -1
  215. package/dist/public-payload/site-payload.js +1 -1
  216. package/dist/public-payload/site-payload.js.map +1 -1
  217. package/dist/public-payload/taxonomies.queries.js +17 -15
  218. package/dist/public-payload/taxonomies.queries.js.map +1 -1
  219. package/dist/public-payload/translations.queries.js +6 -8
  220. package/dist/public-payload/translations.queries.js.map +1 -1
  221. package/dist/public-site/common-routes.controller.d.ts +4 -0
  222. package/dist/{modules/app.controller.js → public-site/common-routes.controller.js} +8 -7
  223. package/dist/public-site/common-routes.controller.js.map +1 -0
  224. package/dist/{modules/public-site → public-site}/feed/feed-generator.d.ts +2 -2
  225. package/dist/{modules/public-site → public-site}/feed/feed-generator.js +34 -28
  226. package/dist/public-site/feed/feed-generator.js.map +1 -0
  227. package/dist/public-site/feed/feed-helpers.js.map +1 -0
  228. package/dist/public-site/feed/feed.middleware.d.ts +3 -0
  229. package/dist/{modules/public-site → public-site}/feed/feed.middleware.js +16 -23
  230. package/dist/public-site/feed/feed.middleware.js.map +1 -0
  231. package/dist/public-site/helpers/format-date.helper.js.map +1 -0
  232. package/dist/{modules/public-site → public-site}/helpers/medias.helpers.d.ts +1 -1
  233. package/dist/{modules/public-site → public-site}/helpers/medias.helpers.js +1 -1
  234. package/dist/public-site/helpers/medias.helpers.js.map +1 -0
  235. package/dist/{modules/public-site → public-site}/liquidjs-filters/format-date.d.ts +1 -1
  236. package/dist/{modules/public-site → public-site}/liquidjs-filters/format-date.js +1 -1
  237. package/dist/public-site/liquidjs-filters/format-date.js.map +1 -0
  238. package/dist/{modules/public-site → public-site}/liquidjs-filters/format-number.d.ts +1 -1
  239. package/dist/{modules/public-site → public-site}/liquidjs-filters/format-number.js +1 -1
  240. package/dist/public-site/liquidjs-filters/format-number.js.map +1 -0
  241. package/dist/{modules/public-site → public-site}/liquidjs-filters/head-tags-filter.d.ts +2 -2
  242. package/dist/{modules/public-site → public-site}/liquidjs-filters/head-tags-filter.js +5 -5
  243. package/dist/public-site/liquidjs-filters/head-tags-filter.js.map +1 -0
  244. package/dist/{modules/public-site → public-site}/liquidjs-filters/image-zoom-url.d.ts +1 -1
  245. package/dist/{modules/public-site → public-site}/liquidjs-filters/image-zoom-url.js +3 -3
  246. package/dist/public-site/liquidjs-filters/image-zoom-url.js.map +1 -0
  247. package/dist/{modules/public-site → public-site}/liquidjs-filters/info-filter.js +1 -1
  248. package/dist/public-site/liquidjs-filters/info-filter.js.map +1 -0
  249. package/dist/{modules/public-site → public-site}/liquidjs-filters/inject-menu-items-data.d.ts +1 -1
  250. package/dist/{modules/public-site → public-site}/liquidjs-filters/inject-menu-items-data.js +2 -2
  251. package/dist/public-site/liquidjs-filters/inject-menu-items-data.js.map +1 -0
  252. package/dist/{modules/public-site → public-site}/liquidjs-filters/make-excerpt.js +1 -1
  253. package/dist/public-site/liquidjs-filters/make-excerpt.js.map +1 -0
  254. package/dist/{modules/public-site → public-site}/liquidjs-filters/obfuscate.d.ts +1 -1
  255. package/dist/public-site/liquidjs-filters/obfuscate.js.map +1 -0
  256. package/dist/{modules/public-site → public-site}/liquidjs-filters/open-graph-filter.d.ts +4 -4
  257. package/dist/{modules/public-site → public-site}/liquidjs-filters/open-graph-filter.js +2 -2
  258. package/dist/public-site/liquidjs-filters/open-graph-filter.js.map +1 -0
  259. package/dist/{modules/public-site → public-site}/liquidjs-filters/plugin-asset-url-filter.d.ts +1 -1
  260. package/dist/{modules/public-site → public-site}/liquidjs-filters/plugin-asset-url-filter.js +2 -2
  261. package/dist/public-site/liquidjs-filters/plugin-asset-url-filter.js.map +1 -0
  262. package/dist/{modules/public-site → public-site}/liquidjs-filters/translate-filter.d.ts +1 -1
  263. package/dist/{modules/public-site → public-site}/liquidjs-filters/translate-filter.js +1 -1
  264. package/dist/public-site/liquidjs-filters/translate-filter.js.map +1 -0
  265. package/dist/{modules/public-site → public-site}/liquidjs-tags/get-doc-tag.d.ts +1 -1
  266. package/dist/{modules/public-site → public-site}/liquidjs-tags/get-doc-tag.js +5 -5
  267. package/dist/public-site/liquidjs-tags/get-doc-tag.js.map +1 -0
  268. package/dist/{modules/public-site → public-site}/liquidjs-tags/get-docs-tag.d.ts +1 -1
  269. package/dist/{modules/public-site → public-site}/liquidjs-tags/get-docs-tag.js +6 -6
  270. package/dist/public-site/liquidjs-tags/get-docs-tag.js.map +1 -0
  271. package/dist/{modules/public-site → public-site}/liquidjs-tags/get-paginated-docs-tag.d.ts +5 -5
  272. package/dist/{modules/public-site → public-site}/liquidjs-tags/get-paginated-docs-tag.js +6 -6
  273. package/dist/public-site/liquidjs-tags/get-paginated-docs-tag.js.map +1 -0
  274. package/dist/{modules/public-site → public-site}/liquidjs-tags/use-image-tag.d.ts +1 -1
  275. package/dist/{modules/public-site → public-site}/liquidjs-tags/use-image-tag.js +3 -3
  276. package/dist/public-site/liquidjs-tags/use-image-tag.js.map +1 -0
  277. package/dist/public-site/media-serve/_media-serve-helpers.js.map +1 -0
  278. package/dist/public-site/media-serve/media-serve.controller.d.ts +5 -0
  279. package/dist/{modules/public-site → public-site}/media-serve/media-serve.controller.js +22 -22
  280. package/dist/public-site/media-serve/media-serve.controller.js.map +1 -0
  281. package/dist/{modules/public-site → public-site}/public-route/make-url.d.ts +1 -1
  282. package/dist/{modules/public-site → public-site}/public-route/make-url.js +46 -32
  283. package/dist/public-site/public-route/make-url.js.map +1 -0
  284. package/dist/{modules/public-site → public-site}/public-route/public-route-parser.d.ts +2 -2
  285. package/dist/{modules/public-site → public-site}/public-route/public-route-parser.js +7 -7
  286. package/dist/public-site/public-route/public-route-parser.js.map +1 -0
  287. package/dist/{modules/public-site → public-site}/public-route/raw-document-payload.d.ts +2 -2
  288. package/dist/public-site/public-route/raw-document-payload.js +77 -0
  289. package/dist/public-site/public-route/raw-document-payload.js.map +1 -0
  290. package/dist/public-site/public-site.middleware.d.ts +3 -0
  291. package/dist/public-site/public-site.middleware.js +55 -0
  292. package/dist/public-site/public-site.middleware.js.map +1 -0
  293. package/dist/{modules/public-site → public-site}/serve-document/serve-document.d.ts +3 -4
  294. package/dist/{modules/public-site → public-site}/serve-document/serve-document.js +7 -7
  295. package/dist/public-site/serve-document/serve-document.js.map +1 -0
  296. package/dist/public-site/serve-index-page.d.ts +5 -0
  297. package/dist/public-site/serve-index-page.js +26 -0
  298. package/dist/public-site/serve-index-page.js.map +1 -0
  299. package/dist/site-context/create-site-context.js +16 -16
  300. package/dist/site-context/create-site-context.js.map +1 -1
  301. package/dist/site-context/site-context.types.d.ts +2 -2
  302. package/dist/tsconfig.tsbuildinfo +1 -1
  303. package/package.json +13 -13
  304. package/dist/express/create-redirect-url.js.map +0 -1
  305. package/dist/express/small-middlewares.d.ts +0 -4
  306. package/dist/express/small-middlewares.js +0 -29
  307. package/dist/express/small-middlewares.js.map +0 -1
  308. package/dist/modules/app.controller.d.ts +0 -3
  309. package/dist/modules/app.controller.js.map +0 -1
  310. package/dist/modules/core/account/account.formatters.js.map +0 -1
  311. package/dist/modules/core/account/account.queries.js.map +0 -1
  312. package/dist/modules/core/account/account.resolver.d.ts +0 -3
  313. package/dist/modules/core/account/account.resolver.js.map +0 -1
  314. package/dist/modules/core/account-auth/account-auth.service.js.map +0 -1
  315. package/dist/modules/core/account-auth/account-auth.strategy.js.map +0 -1
  316. package/dist/modules/core/auth/auth.helper.js.map +0 -1
  317. package/dist/modules/core/auth/auth.service.js.map +0 -1
  318. package/dist/modules/core/auth/auth.types.js.map +0 -1
  319. package/dist/modules/core/backup/backup.controller.d.ts +0 -2
  320. package/dist/modules/core/backup/backup.controller.js.map +0 -1
  321. package/dist/modules/core/backup/backup.helper.js.map +0 -1
  322. package/dist/modules/core/backup/backup.resolver.js.map +0 -1
  323. package/dist/modules/core/document/document.helper.js.map +0 -1
  324. package/dist/modules/core/document/document.resolver.d.ts +0 -3
  325. package/dist/modules/core/document/document.resolver.extend.d.ts +0 -3
  326. package/dist/modules/core/document/document.resolver.extend.js.map +0 -1
  327. package/dist/modules/core/document/document.resolver.js.map +0 -1
  328. package/dist/modules/core/document/load-documents.queries.js +0 -104
  329. package/dist/modules/core/document/load-documents.queries.js.map +0 -1
  330. package/dist/modules/core/document/save-documents.queries.js +0 -296
  331. package/dist/modules/core/document/save-documents.queries.js.map +0 -1
  332. package/dist/modules/core/fields/_fields.helpers.js.map +0 -1
  333. package/dist/modules/core/fields/fields.resolver.js.map +0 -1
  334. package/dist/modules/core/fields/load-fields-of.queries.js.map +0 -1
  335. package/dist/modules/core/fields/load-fields.queries.js.map +0 -1
  336. package/dist/modules/core/fields/preprocess-fields.js.map +0 -1
  337. package/dist/modules/core/fields/save-fields.queries.js.map +0 -1
  338. package/dist/modules/core/labeling/labeling.queries.js +0 -53
  339. package/dist/modules/core/labeling/labeling.queries.js.map +0 -1
  340. package/dist/modules/core/labeling/labeling.resolver.d.ts +0 -3
  341. package/dist/modules/core/labeling/labeling.resolver.js.map +0 -1
  342. package/dist/modules/core/login/login.controller.d.ts +0 -2
  343. package/dist/modules/core/login/login.controller.js +0 -17
  344. package/dist/modules/core/login/login.controller.js.map +0 -1
  345. package/dist/modules/core/media/add-media-to-node.js.map +0 -1
  346. package/dist/modules/core/media/media-upload.controller.d.ts +0 -2
  347. package/dist/modules/core/media/media-upload.controller.js.map +0 -1
  348. package/dist/modules/core/media/media.js.map +0 -1
  349. package/dist/modules/core/media/media.resolver.d.ts +0 -3
  350. package/dist/modules/core/media/media.resolver.extend.d.ts +0 -3
  351. package/dist/modules/core/media/media.resolver.extend.js.map +0 -1
  352. package/dist/modules/core/media/media.resolver.js.map +0 -1
  353. package/dist/modules/core/node/node.queries.js.map +0 -1
  354. package/dist/modules/core/node/node.resolver.d.ts +0 -3
  355. package/dist/modules/core/node/node.resolver.extend.d.ts +0 -3
  356. package/dist/modules/core/node/node.resolver.extend.js.map +0 -1
  357. package/dist/modules/core/node/node.resolver.js.map +0 -1
  358. package/dist/modules/core/node/ordered-node.queries.js.map +0 -1
  359. package/dist/modules/core/nodel/nodel-wrap.formatters.js.map +0 -1
  360. package/dist/modules/core/nodel/nodel-wrap.resolver.d.ts +0 -3
  361. package/dist/modules/core/nodel/nodel-wrap.resolver.js.map +0 -1
  362. package/dist/modules/core/nodel/nodel.queries.js.map +0 -1
  363. package/dist/modules/core/part/part-node.queries.d.ts +0 -9
  364. package/dist/modules/core/part/part-node.queries.js +0 -59
  365. package/dist/modules/core/part/part-node.queries.js.map +0 -1
  366. package/dist/modules/core/part/part.queries.js.map +0 -1
  367. package/dist/modules/core/part/part.resolver.d.ts +0 -3
  368. package/dist/modules/core/part/part.resolver.extend.d.ts +0 -3
  369. package/dist/modules/core/part/part.resolver.extend.js.map +0 -1
  370. package/dist/modules/core/part/part.resolver.js.map +0 -1
  371. package/dist/modules/core/site-constants/site-constants.resolver.d.ts +0 -3
  372. package/dist/modules/core/site-constants/site-constants.resolver.js.map +0 -1
  373. package/dist/modules/core/unprotected/unprotected.resolver.js.map +0 -1
  374. package/dist/modules/graphql.types.js.map +0 -1
  375. package/dist/modules/public-api/mail/validate-recaptcha-response.js.map +0 -1
  376. package/dist/modules/public-api/partials/partials-params.dto.d.ts +0 -6
  377. package/dist/modules/public-api/partials/partials-params.dto.js +0 -41
  378. package/dist/modules/public-api/partials/partials-params.dto.js.map +0 -1
  379. package/dist/modules/public-api/password-reset/password-reset.controller.d.ts +0 -5
  380. package/dist/modules/public-api/password-reset/password-reset.controller.js +0 -22
  381. package/dist/modules/public-api/password-reset/password-reset.controller.js.map +0 -1
  382. package/dist/modules/public-api/password-reset/password-reset.dto.d.ts +0 -3
  383. package/dist/modules/public-api/password-reset/password-reset.dto.js +0 -29
  384. package/dist/modules/public-api/password-reset/password-reset.dto.js.map +0 -1
  385. package/dist/modules/public-api/password-reset/password-reset.service.js.map +0 -1
  386. package/dist/modules/public-api/public-api-controller.d.ts +0 -8
  387. package/dist/modules/public-api/public-api-controller.js +0 -6
  388. package/dist/modules/public-api/public-api-controller.js.map +0 -1
  389. package/dist/modules/public-api/public-api-rendering.js.map +0 -1
  390. package/dist/modules/public-api/search-text/search-text.dto.d.ts +0 -7
  391. package/dist/modules/public-api/search-text/search-text.dto.js +0 -46
  392. package/dist/modules/public-api/search-text/search-text.dto.js.map +0 -1
  393. package/dist/modules/public-api/search-text/search-text.queries.js +0 -60
  394. package/dist/modules/public-api/search-text/search-text.queries.js.map +0 -1
  395. package/dist/modules/public-site/feed/feed-generator.js.map +0 -1
  396. package/dist/modules/public-site/feed/feed-helpers.js.map +0 -1
  397. package/dist/modules/public-site/feed/feed.middleware.d.ts +0 -2
  398. package/dist/modules/public-site/feed/feed.middleware.js.map +0 -1
  399. package/dist/modules/public-site/helpers/format-date.helper.js.map +0 -1
  400. package/dist/modules/public-site/helpers/medias.helpers.js.map +0 -1
  401. package/dist/modules/public-site/liquidjs-filters/format-date.js.map +0 -1
  402. package/dist/modules/public-site/liquidjs-filters/format-number.js.map +0 -1
  403. package/dist/modules/public-site/liquidjs-filters/head-tags-filter.js.map +0 -1
  404. package/dist/modules/public-site/liquidjs-filters/image-zoom-url.js.map +0 -1
  405. package/dist/modules/public-site/liquidjs-filters/info-filter.js.map +0 -1
  406. package/dist/modules/public-site/liquidjs-filters/inject-menu-items-data.js.map +0 -1
  407. package/dist/modules/public-site/liquidjs-filters/make-excerpt.js.map +0 -1
  408. package/dist/modules/public-site/liquidjs-filters/obfuscate.js.map +0 -1
  409. package/dist/modules/public-site/liquidjs-filters/open-graph-filter.js.map +0 -1
  410. package/dist/modules/public-site/liquidjs-filters/plugin-asset-url-filter.js.map +0 -1
  411. package/dist/modules/public-site/liquidjs-filters/translate-filter.js.map +0 -1
  412. package/dist/modules/public-site/liquidjs-tags/get-doc-tag.js.map +0 -1
  413. package/dist/modules/public-site/liquidjs-tags/get-docs-tag.js.map +0 -1
  414. package/dist/modules/public-site/liquidjs-tags/get-paginated-docs-tag.js.map +0 -1
  415. package/dist/modules/public-site/liquidjs-tags/use-image-tag.js.map +0 -1
  416. package/dist/modules/public-site/media-serve/_media-serve-helpers.js.map +0 -1
  417. package/dist/modules/public-site/media-serve/media-serve.controller.d.ts +0 -4
  418. package/dist/modules/public-site/media-serve/media-serve.controller.js.map +0 -1
  419. package/dist/modules/public-site/public-route/make-url.js.map +0 -1
  420. package/dist/modules/public-site/public-route/public-route-parser.js.map +0 -1
  421. package/dist/modules/public-site/public-route/raw-document-payload.js +0 -67
  422. package/dist/modules/public-site/public-route/raw-document-payload.js.map +0 -1
  423. package/dist/modules/public-site/public-site.controller.d.ts +0 -2
  424. package/dist/modules/public-site/public-site.controller.js +0 -27
  425. package/dist/modules/public-site/public-site.controller.js.map +0 -1
  426. package/dist/modules/public-site/public-site.middleware.d.ts +0 -2
  427. package/dist/modules/public-site/public-site.middleware.js +0 -47
  428. package/dist/modules/public-site/public-site.middleware.js.map +0 -1
  429. package/dist/modules/public-site/serve-document/serve-document.js.map +0 -1
  430. /package/dist/{modules/core → bo-backend}/account/account.formatters.d.ts +0 -0
  431. /package/dist/{modules/core → bo-backend}/auth/auth.types.d.ts +0 -0
  432. /package/dist/{modules/core → bo-backend}/auth/auth.types.js +0 -0
  433. /package/dist/{modules/core → bo-backend}/backup/backup.helper.d.ts +0 -0
  434. /package/dist/{modules/core → bo-backend}/document/document.helper.d.ts +0 -0
  435. /package/dist/{modules/core → bo-backend}/document/document.helper.js +0 -0
  436. /package/dist/{modules/core → bo-backend}/fields/_fields.helpers.d.ts +0 -0
  437. /package/dist/{modules/core → bo-backend}/fields/_fields.helpers.js +0 -0
  438. /package/dist/express/{create-redirect-url.d.ts → http-redirection-url.d.ts} +0 -0
  439. /package/dist/{modules → graphql}/graphql.types.js +0 -0
  440. /package/dist/{modules/core/account-auth → oauth}/account-auth.strategy.d.ts +0 -0
  441. /package/dist/{modules/public-site → public-site}/feed/feed-helpers.d.ts +0 -0
  442. /package/dist/{modules/public-site → public-site}/feed/feed-helpers.js +0 -0
  443. /package/dist/{modules/public-site → public-site}/helpers/format-date.helper.d.ts +0 -0
  444. /package/dist/{modules/public-site → public-site}/helpers/format-date.helper.js +0 -0
  445. /package/dist/{modules/public-site → public-site}/liquidjs-filters/info-filter.d.ts +0 -0
  446. /package/dist/{modules/public-site → public-site}/liquidjs-filters/make-excerpt.d.ts +0 -0
  447. /package/dist/{modules/public-site → public-site}/liquidjs-filters/obfuscate.js +0 -0
  448. /package/dist/{modules/public-site → public-site}/media-serve/_media-serve-helpers.d.ts +0 -0
  449. /package/dist/{modules/public-site → public-site}/media-serve/_media-serve-helpers.js +0 -0
@@ -0,0 +1,39 @@
1
+ import { Stream } from "node:stream";
2
+ export function toPaHttpContext(expressReq, expressRes) {
3
+ const req = {
4
+ hostname: expressReq.hostname,
5
+ headers: expressReq.headers,
6
+ method: expressReq.method,
7
+ relativeUrl: expressReq.url,
8
+ path: expressReq.path,
9
+ query: expressReq.query,
10
+ body: expressReq.body,
11
+ file: expressReq.file,
12
+ };
13
+ let headersSent = false;
14
+ const res = {
15
+ get headersSent() {
16
+ return headersSent || expressRes.headersSent;
17
+ },
18
+ status(code) {
19
+ expressRes.status(code);
20
+ return res;
21
+ },
22
+ append(field, value) {
23
+ expressRes.append(field, value);
24
+ return res;
25
+ },
26
+ send(body) {
27
+ headersSent = true;
28
+ if (body instanceof Stream) {
29
+ body.pipe(expressRes);
30
+ }
31
+ else {
32
+ expressRes.send(body);
33
+ }
34
+ return res;
35
+ },
36
+ };
37
+ return { req, res };
38
+ }
39
+ //# sourceMappingURL=pa-http-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pa-http-context.js","sourceRoot":"","sources":["../../src/express/pa-http-context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,UAAU,eAAe,CAAC,UAAmB,EAAE,UAAoB;IACvE,MAAM,GAAG,GAAkB;QACzB,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,OAAO,EAAE,UAAU,CAAC,OAAuD;QAC3E,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,WAAW,EAAE,UAAU,CAAC,GAAG;QAC3B,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,KAAK,EAAE,UAAU,CAAC,KAAwD;QAC1E,IAAI,EAAE,UAAU,CAAC,IAA0B;QAC3C,IAAI,EAAE,UAAU,CAAC,IAAI;KACtB,CAAC;IAEF,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,MAAM,GAAG,GAAmB;QAC1B,IAAI,WAAW;YACb,OAAO,WAAW,IAAI,UAAU,CAAC,WAAW,CAAC;QAC/C,CAAC;QACD,MAAM,CAAC,IAAI;YACT,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACxB,OAAO,GAAG,CAAC;QACb,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,KAAK;YACjB,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAChC,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,CAAC,IAAI;YACP,WAAW,GAAG,IAAI,CAAC;YACnB,IAAI,IAAI,YAAY,MAAM,EAAE,CAAC;gBAC3B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;KACF,CAAC;IAEF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACtB,CAAC"}
@@ -1,2 +1,3 @@
1
- import type { Request, Response } from "express";
2
- export declare function pluginPublicApiMiddleware(req: Request, res: Response, next: () => void): Promise<void>;
1
+ import type { PaHttpContext } from "@paroicms/public-server-lib";
2
+ import type { SiteContext } from "../site-context/site-context.types.js";
3
+ export declare function pluginPublicApiReqHandler(siteContext: SiteContext, httpContext: PaHttpContext): Promise<boolean>;
@@ -1,28 +1,21 @@
1
1
  import { makeBackendPluginRenderService } from "../helpers/make-backend-plugin-service.js";
2
2
  import { createNoRenderingContext } from "../liquidjs-tools/liquidjs-rendering/rendering-context.js";
3
- import { getReqSiteContext, serve404SimpleHtml, serve500Html } from "./http-helpers.js";
4
- export async function pluginPublicApiMiddleware(req, res, next) {
5
- const siteContext = getReqSiteContext(req);
3
+ import { serve404SimpleHtml } from "./http-helpers.js";
4
+ export async function pluginPublicApiReqHandler(siteContext, httpContext) {
5
+ const { req } = httpContext;
6
6
  const path = req.path;
7
7
  const prefix = "/api/plugin/";
8
- if (!path.startsWith(prefix)) {
9
- next();
10
- return;
11
- }
8
+ if (!path.startsWith(prefix))
9
+ return false;
12
10
  const sepIndex = path.indexOf("/", prefix.length);
13
11
  const pluginPublicDirName = sepIndex === -1 ? path.substring(prefix.length) : path.substring(prefix.length, sepIndex);
14
12
  const relativePath = sepIndex === -1 ? "" : path.substring(sepIndex);
15
13
  const plugin = siteContext.plugins.get(pluginPublicDirName);
16
14
  if (!plugin || !plugin.publicApiHandler) {
17
- serve404SimpleHtml(res);
18
- return;
19
- }
20
- try {
21
- await plugin.publicApiHandler(makeBackendPluginRenderService(siteContext, createNoRenderingContext(), plugin), req, res, relativePath);
22
- }
23
- catch (error) {
24
- siteContext.logger.error(error);
25
- serve500Html(res);
15
+ serve404SimpleHtml(httpContext);
16
+ return true;
26
17
  }
18
+ await plugin.publicApiHandler(makeBackendPluginRenderService(siteContext, createNoRenderingContext(), plugin), httpContext, relativePath);
19
+ return true;
27
20
  }
28
21
  //# sourceMappingURL=public-api-middlewares.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"public-api-middlewares.js","sourceRoot":"","sources":["../../src/express/public-api-middlewares.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,8BAA8B,EAAE,MAAM,2CAA2C,CAAC;AAC3F,OAAO,EAAE,wBAAwB,EAAE,MAAM,2DAA2D,CAAC;AACrG,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAExF,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,GAAY,EAAE,GAAa,EAAE,IAAgB;IAC3F,MAAM,WAAW,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IACtB,MAAM,MAAM,GAAG,cAAc,CAAC;IAC9B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,IAAI,EAAE,CAAC;QACP,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,mBAAmB,GACvB,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5F,MAAM,YAAY,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAC5D,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACxC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,gBAAgB,CAC3B,8BAA8B,CAAC,WAAW,EAAE,wBAAwB,EAAE,EAAE,MAAM,CAAC,EAC/E,GAAG,EACH,GAAG,EACH,YAAY,CACb,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChC,YAAY,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"public-api-middlewares.js","sourceRoot":"","sources":["../../src/express/public-api-middlewares.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,8BAA8B,EAAE,MAAM,2CAA2C,CAAC;AAC3F,OAAO,EAAE,wBAAwB,EAAE,MAAM,2DAA2D,CAAC;AAErG,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,WAAwB,EACxB,WAA0B;IAE1B,MAAM,EAAE,GAAG,EAAE,GAAG,WAAW,CAAC;IAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IACtB,MAAM,MAAM,GAAG,cAAc,CAAC;IAC9B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAE3C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,mBAAmB,GACvB,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5F,MAAM,YAAY,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAC5D,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACxC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,CAAC,gBAAgB,CAC3B,8BAA8B,CAAC,WAAW,EAAE,wBAAwB,EAAE,EAAE,MAAM,CAAC,EAC/E,WAAW,EACX,YAAY,CACb,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,4 +1,11 @@
1
+ import type { PaHttpContext } from "@paroicms/public-server-lib";
1
2
  import type { NextFunction, Request, Response } from "express";
2
3
  import { Stream } from "node:stream";
3
- export declare function wrapRouteHandler(handler: (req: Request, res: Response) => Promise<unknown>): (req: Request, res: Response) => Promise<Stream | undefined>;
4
- export declare function wrapMiddlewareHandler(handler: (req: Request, res: Response, next: NextFunction) => Promise<unknown>): (req: Request, res: Response, next: NextFunction) => Promise<void>;
4
+ import type { SiteContext } from "../site-context/site-context.types.js";
5
+ export declare function loadPaContextsMiddleware(req: Request, res: Response, next: NextFunction): Promise<void>;
6
+ export type PaRouteController = (siteContext: SiteContext, httpContext: PaHttpContext, routeParams: Record<string, string | undefined>) => Promise<unknown>;
7
+ export declare function wrapRouteController(handler: PaRouteController): (req: Request, res: Response) => Promise<void>;
8
+ export type PaReqHandler = (siteContext: SiteContext, httpContext: PaHttpContext) => Promise<boolean>;
9
+ export declare function reqHandlerToExpressMiddleware(handler: PaReqHandler): (req: Request, res: Response, next: NextFunction) => Promise<void>;
10
+ export declare function mergeReqHandlers(handlers: PaReqHandler[]): PaReqHandler;
11
+ export declare function wrapExpressRoute(handler: (req: Request, res: Response) => Promise<unknown>): (req: Request, res: Response) => Promise<Stream | undefined>;
@@ -1,8 +1,77 @@
1
1
  import { Stream } from "node:stream";
2
2
  import { ApiError } from "../common/api-error-handler.js";
3
3
  import { platformLogger } from "../context.js";
4
- import { serve500Html } from "./http-helpers.js";
5
- export function wrapRouteHandler(handler) {
4
+ import { getSiteContext } from "../site-context/site-context.js";
5
+ import { getPaSiteContext, serve404SimpleHtml, serve500Html } from "./http-helpers.js";
6
+ import { toPaHttpContext } from "./pa-http-context.js";
7
+ export async function loadPaContextsMiddleware(req, res, next) {
8
+ try {
9
+ const siteContext = await getSiteContext(req.hostname, { returnsUndef: true });
10
+ if (!siteContext) {
11
+ platformLogger.debug(`[404] Site not found: ${req.protocol}://${req.hostname}${req.originalUrl}`);
12
+ serve404SimpleHtml(toPaHttpContext(req, res));
13
+ return;
14
+ }
15
+ req.paSiteContext = siteContext;
16
+ next();
17
+ }
18
+ catch (error) {
19
+ handleErrorSafely(req, res, error, undefined);
20
+ }
21
+ }
22
+ export function wrapRouteController(handler) {
23
+ return async (req, res) => {
24
+ const httpContext = toPaHttpContext(req, res);
25
+ const siteContext = getPaSiteContext(req);
26
+ try {
27
+ let result = await handler(siteContext, httpContext, req.params);
28
+ if (result instanceof Stream) {
29
+ result.pipe(res);
30
+ return;
31
+ }
32
+ if (!httpContext.res.headersSent) {
33
+ result ??= "";
34
+ if (typeof result === "object" || Array.isArray(result)) {
35
+ res.status(200).json(result);
36
+ }
37
+ else {
38
+ res.status(200).send(String(result));
39
+ }
40
+ }
41
+ else if (result) {
42
+ (req.paSiteContext?.logger ?? platformLogger).error(`[${req.url}]`, "Cannot send a http response:", result);
43
+ }
44
+ }
45
+ catch (error) {
46
+ handleErrorSafely(req, res, error, httpContext);
47
+ }
48
+ };
49
+ }
50
+ export function reqHandlerToExpressMiddleware(handler) {
51
+ return async (req, res, next) => {
52
+ const httpContext = toPaHttpContext(req, res);
53
+ const siteContext = getPaSiteContext(req);
54
+ try {
55
+ const done = await handler(siteContext, httpContext);
56
+ if (!done) {
57
+ next();
58
+ }
59
+ }
60
+ catch (error) {
61
+ handleErrorSafely(req, res, error, httpContext);
62
+ }
63
+ };
64
+ }
65
+ export function mergeReqHandlers(handlers) {
66
+ return async (siteContext, httpContext) => {
67
+ for (const handler of handlers) {
68
+ if (await handler(siteContext, httpContext))
69
+ return true;
70
+ }
71
+ return false;
72
+ };
73
+ }
74
+ export function wrapExpressRoute(handler) {
6
75
  return async (req, res) => {
7
76
  try {
8
77
  let response = await handler(req, res);
@@ -22,36 +91,20 @@ export function wrapRouteHandler(handler) {
22
91
  }
23
92
  }
24
93
  catch (error) {
25
- (req.paSiteContext?.logger ?? platformLogger).error(`[${req.url}]`, error);
26
- if (!res.headersSent) {
27
- if (error instanceof ApiError) {
28
- const message = error.status === 500 ? "Internal Server Error" : error.message;
29
- res.status(error.status).json({ message });
30
- }
31
- else {
32
- serve500Html(res);
33
- }
34
- }
94
+ handleErrorSafely(req, res, error, undefined);
35
95
  }
36
96
  };
37
97
  }
38
- export function wrapMiddlewareHandler(handler) {
39
- return async (req, res, next) => {
40
- try {
41
- await handler(req, res, next);
98
+ function handleErrorSafely(req, res, error, httpContext) {
99
+ (req.paSiteContext?.logger ?? platformLogger).error(`[${req.url}]`, error);
100
+ if (!res.headersSent) {
101
+ if (error instanceof ApiError) {
102
+ const message = error.status === 500 ? "Internal Server Error" : error.message;
103
+ res.status(error.status).json({ message });
42
104
  }
43
- catch (error) {
44
- (req.paSiteContext?.logger ?? platformLogger).error(`[${req.url}]`, error);
45
- if (!res.headersSent) {
46
- if (error instanceof ApiError) {
47
- const message = error.status === 500 ? "Internal Server Error" : error.message;
48
- res.status(error.status).json({ message });
49
- }
50
- else {
51
- serve500Html(res);
52
- }
53
- }
105
+ else {
106
+ serve500Html(httpContext ?? toPaHttpContext(req, res));
54
107
  }
55
- };
108
+ }
56
109
  }
57
110
  //# sourceMappingURL=route-handler-wrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-handler-wrapper.js","sourceRoot":"","sources":["../../src/express/route-handler-wrapper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route-handler-wrapper.js","sourceRoot":"","sources":["../../src/express/route-handler-wrapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { PaHttpContext } from "@paroicms/public-server-lib";
2
+ export interface ServeFileOption {
3
+ immutable?: boolean;
4
+ maxAge?: number;
5
+ root?: string;
6
+ on404?: () => Promise<void> | void;
7
+ }
8
+ export declare function serveFile({ req, res }: PaHttpContext, path: string, options?: ServeFileOption): Promise<void>;
@@ -0,0 +1,58 @@
1
+ import { lookup } from "mime-types";
2
+ import { readFile, stat } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ export async function serveFile({ req, res }, path, options = {}) {
5
+ const { immutable, maxAge, root, on404 } = options;
6
+ const fullPath = root ? join(root, path) : path;
7
+ try {
8
+ let fileStat;
9
+ try {
10
+ fileStat = await stat(fullPath);
11
+ }
12
+ catch (err) {
13
+ if (err.code !== "ENOENT")
14
+ throw err;
15
+ if (on404) {
16
+ await on404();
17
+ }
18
+ else {
19
+ res.status(404);
20
+ res.send({ error: "File not found" });
21
+ }
22
+ return;
23
+ }
24
+ const lastModified = new Date(fileStat.mtime).toUTCString();
25
+ res.append("Last-Modified", lastModified);
26
+ if (maxAge !== undefined) {
27
+ res.append("Cache-Control", immutable ? `max-age=${maxAge}, immutable` : `max-age=${maxAge}`);
28
+ }
29
+ const mimeType = lookup(fullPath) || "application/octet-stream";
30
+ const charset = /^text\/|^application\/(javascript|json)/.test(mimeType)
31
+ ? "; charset=utf-8"
32
+ : "";
33
+ res.append("Content-Type", `${mimeType}${charset}`);
34
+ const ifModifiedSince = req.headers["if-modified-since"];
35
+ if (ifModifiedSince) {
36
+ const ifModifiedSinceDate = new Date(ifModifiedSince);
37
+ const lastModifiedDate = new Date(fileStat.mtime);
38
+ lastModifiedDate.setMilliseconds(0);
39
+ if (ifModifiedSinceDate >= lastModifiedDate) {
40
+ res.status(304).send();
41
+ return;
42
+ }
43
+ }
44
+ const buf = await readFile(fullPath);
45
+ res.append("X-Content-Type-Options", "nosniff");
46
+ res.append("Content-Length", buf.byteLength.toString());
47
+ res.status(200);
48
+ res.send(buf);
49
+ }
50
+ catch (error) {
51
+ if ("code" in error) {
52
+ if (error.code === "ECONNABORTED")
53
+ return;
54
+ }
55
+ throw error;
56
+ }
57
+ }
58
+ //# sourceMappingURL=serve-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve-file.js","sourceRoot":"","sources":["../../src/express/serve-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import express, { type NextFunction, type Request, type Response } from "express";
2
+ export declare function createBoGraphqlMiddleware(): Promise<express.RequestHandler<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>>;
3
+ export declare function createSiteMiddleware(): (req: Request, res: Response, next: NextFunction) => void;
@@ -0,0 +1,83 @@
1
+ import { ApolloServer } from "@apollo/server";
2
+ import { expressMiddleware as graphqlMiddleware } from "@apollo/server/express4";
3
+ import express from "express";
4
+ import { GraphQLError } from "graphql";
5
+ import multer from "multer";
6
+ import { downloadBackupController } from "../bo-backend/backup/backup.controller.js";
7
+ import { loginController } from "../bo-backend/login/login.controller.js";
8
+ import { uploadMediaController } from "../bo-backend/media/media-upload.controller.js";
9
+ import { ApiError } from "../common/api-error-handler.js";
10
+ import { platformLogger } from "../context.js";
11
+ import { getPaSiteContext } from "../express/http-helpers.js";
12
+ import { pluginPublicApiReqHandler } from "../express/public-api-middlewares.js";
13
+ import { mergeReqHandlers, reqHandlerToExpressMiddleware, wrapRouteController, } from "../express/route-handler-wrapper.js";
14
+ import { boFilesReqHandler, boPluginsReqHandler, publicAssetsReqHandler, } from "../express/static-files-middlewares.js";
15
+ import { federateResolvers, typeDefs } from "../graphql/apollo-server-init.js";
16
+ import { createComplexityPlugin } from "../graphql/complexity-plugin.js";
17
+ import { disableApolloStudioPlugin } from "../graphql/disable-apollo-studio-plugin.js";
18
+ import { createErrorConverterPlugin } from "../graphql/error-converter-plugin.js";
19
+ import { checkPasswordResetController, setAccountPasswordController, } from "../public-api/password-reset/password-reset.controller.js";
20
+ import { healthCheckController } from "../public-api/public-api-controller.js";
21
+ import { faviconController, robotsTxtController } from "../public-site/common-routes.controller.js";
22
+ import { feedReqHandler } from "../public-site/feed/feed.middleware.js";
23
+ import { serveFilecontroller, serveUnversionedImageController, serveVersionedImageController, } from "../public-site/media-serve/media-serve.controller.js";
24
+ import { publicSiteReqHandler } from "../public-site/public-site.middleware.js";
25
+ import { toPaHttpContext } from "./pa-http-context.js";
26
+ export async function createBoGraphqlMiddleware() {
27
+ const developmentMode = process.env.NODE_ENV === "development";
28
+ const graphqlServer = new ApolloServer({
29
+ typeDefs,
30
+ resolvers: federateResolvers(),
31
+ plugins: [
32
+ createComplexityPlugin(),
33
+ createErrorConverterPlugin(),
34
+ ...(developmentMode ? [] : [disableApolloStudioPlugin()]),
35
+ ],
36
+ introspection: developmentMode,
37
+ formatError(formattedError, error) {
38
+ if (error instanceof GraphQLError && (!error.cause || error.cause instanceof ApiError)) {
39
+ return formattedError;
40
+ }
41
+ platformLogger.error("Unexpected graphql error", formattedError, error);
42
+ return {
43
+ message: "Internal Server Error",
44
+ code: "INTERNAL_SERVER_ERROR",
45
+ };
46
+ },
47
+ });
48
+ await graphqlServer.start();
49
+ return graphqlMiddleware(graphqlServer, {
50
+ context: async ({ req, res }) => ({
51
+ siteContext: getPaSiteContext(req),
52
+ httpContext: toPaHttpContext(req, res),
53
+ }),
54
+ });
55
+ }
56
+ export function createSiteMiddleware() {
57
+ const router = express.Router();
58
+ const upload = multer();
59
+ router.post("/adm/backend/upload", upload.single("file"), wrapRouteController(uploadMediaController));
60
+ router.get("/adm/backend/backup/:backupName", wrapRouteController(downloadBackupController));
61
+ router.get("/api/v1/healthcheck", wrapRouteController(healthCheckController));
62
+ router.post("/api/v1/login", wrapRouteController(loginController));
63
+ router.post("/api/v1/set-account-password", wrapRouteController(setAccountPasswordController));
64
+ router.post("/api/v1/check-password-reset", wrapRouteController(checkPasswordResetController));
65
+ router.get("/robots.txt", wrapRouteController(robotsTxtController));
66
+ router.get("/favicon.ico", wrapRouteController(faviconController));
67
+ router.get("/medias/:mediaUid/file/:nameAndExt", wrapRouteController(serveFilecontroller));
68
+ router.get("/medias/:mediaUid/image/:resourceVersion/:nameAndExt", wrapRouteController(serveVersionedImageController));
69
+ router.get("/medias/:mediaUid/image/:nameAndExt", wrapRouteController(serveUnversionedImageController));
70
+ const siteReqHandlers = mergeReqHandlers([
71
+ boPluginsReqHandler,
72
+ boFilesReqHandler,
73
+ pluginPublicApiReqHandler,
74
+ publicAssetsReqHandler,
75
+ feedReqHandler,
76
+ publicSiteReqHandler,
77
+ ]);
78
+ const siteReqMiddleware = reqHandlerToExpressMiddleware(siteReqHandlers);
79
+ return (req, res, next) => {
80
+ router(req, res, () => siteReqMiddleware(req, res, next));
81
+ };
82
+ }
83
+ //# sourceMappingURL=site-middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site-middleware.js","sourceRoot":"","sources":["../../src/express/site-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,IAAI,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,OAA2D,MAAM,SAAS,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EACL,gBAAgB,EAChB,6BAA6B,EAC7B,mBAAmB,GACpB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAElF,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,2DAA2D,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACpG,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EACL,mBAAmB,EACnB,+BAA+B,EAC/B,6BAA6B,GAC9B,MAAM,sDAAsD,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,CAAC;IAE/D,MAAM,aAAa,GAAG,IAAI,YAAY,CAAC;QACrC,QAAQ;QACR,SAAS,EAAE,iBAAiB,EAAE;QAC9B,OAAO,EAAE;YACP,sBAAsB,EAAE;YACxB,0BAA0B,EAAE;YAC5B,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,yBAAyB,EAAE,CAAC,CAAC;SAC1D;QACD,aAAa,EAAE,eAAe;QAC9B,WAAW,CAAC,cAAc,EAAE,KAAK;YAC/B,IAAI,KAAK,YAAY,YAAY,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,YAAY,QAAQ,CAAC,EAAE,CAAC;gBACvF,OAAO,cAAc,CAAC;YACxB,CAAC;YAED,cAAc,CAAC,KAAK,CAAC,0BAA0B,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;YACxE,OAAO;gBACL,OAAO,EAAE,uBAAuB;gBAChC,IAAI,EAAE,uBAAuB;aAC9B,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IACH,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC;IAG5B,OAAO,iBAAiB,CAAC,aAAa,EAAE;QACtC,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAA2B,EAAE,CAAC,CAAC;YACzD,WAAW,EAAE,gBAAgB,CAAC,GAAG,CAAC;YAClC,WAAW,EAAE,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC;SACvC,CAAC;KACH,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EACrB,mBAAmB,CAAC,qBAAqB,CAAC,CAC3C,CAAC;IACF,MAAM,CAAC,GAAG,CAAC,iCAAiC,EAAE,mBAAmB,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAC7F,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC9E,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC;IACnE,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,mBAAmB,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAC/F,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,mBAAmB,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAC/F,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACpE,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,mBAAmB,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACnE,MAAM,CAAC,GAAG,CAAC,oCAAoC,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC3F,MAAM,CAAC,GAAG,CACR,sDAAsD,EACtD,mBAAmB,CAAC,6BAA6B,CAAC,CACnD,CAAC;IACF,MAAM,CAAC,GAAG,CACR,qCAAqC,EACrC,mBAAmB,CAAC,+BAA+B,CAAC,CACrD,CAAC;IAEF,MAAM,eAAe,GAAG,gBAAgB,CAAC;QACvC,mBAAmB;QACnB,iBAAiB;QACjB,yBAAyB;QACzB,sBAAsB;QACtB,cAAc;QACd,oBAAoB;KACrB,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG,6BAA6B,CAAC,eAAe,CAAC,CAAC;IAEzE,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QACzD,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC;AACJ,CAAC"}
@@ -1,4 +1,5 @@
1
- import type { Request, Response } from "express";
2
- export declare function publicAssetsMiddleware(req: Request, res: Response, next: () => void): Promise<void>;
3
- export declare function boMiddleware(req: Request, res: Response, next: () => void): Promise<void>;
4
- export declare function boPluginsMiddleware(req: Request, res: Response, next: () => void): Promise<void>;
1
+ import type { PaHttpContext } from "@paroicms/public-server-lib";
2
+ import type { SiteContext } from "../site-context/site-context.types.js";
3
+ export declare function publicAssetsReqHandler(siteContext: SiteContext, httpContext: PaHttpContext): Promise<boolean>;
4
+ export declare function boFilesReqHandler(siteContext: SiteContext, httpContext: PaHttpContext): Promise<boolean>;
5
+ export declare function boPluginsReqHandler(siteContext: SiteContext, httpContext: PaHttpContext): Promise<boolean>;
@@ -6,13 +6,13 @@ import { getAssetsBaseUrl } from "../common/data-format.js";
6
6
  import { render404Html } from "../common/serve-text-or.js";
7
7
  import { appConf } from "../context.js";
8
8
  import { HTTP_MAX_AGE } from "./http-constants.js";
9
- import { getReqSiteContext, serve404SimpleHtml, serve500Html } from "./http-helpers.js";
10
- export async function publicAssetsMiddleware(req, res, next) {
11
- const siteContext = getReqSiteContext(req);
9
+ import { serve404SimpleHtml, serve500Html } from "./http-helpers.js";
10
+ import { serveFile } from "./serve-file.js";
11
+ export async function publicAssetsReqHandler(siteContext, httpContext) {
12
+ const { req } = httpContext;
12
13
  let path = req.path;
13
14
  if (!path.startsWith("/assets/") || !["GET", "HEAD"].includes(req.method)) {
14
- next();
15
- return;
15
+ return false;
16
16
  }
17
17
  let pathPrefix;
18
18
  let baseDir;
@@ -20,14 +20,14 @@ export async function publicAssetsMiddleware(req, res, next) {
20
20
  if (path.startsWith(pluginAssetsPrefix)) {
21
21
  const sepIndex = path.indexOf("/", pluginAssetsPrefix.length);
22
22
  if (sepIndex === -1) {
23
- void render404Asset(siteContext, res);
24
- return;
23
+ await render404Asset(siteContext, httpContext);
24
+ return true;
25
25
  }
26
26
  const pluginPublicDirName = path.substring(pluginAssetsPrefix.length, sepIndex);
27
27
  const plugin = siteContext.plugins.get(pluginPublicDirName);
28
28
  if (!plugin || !plugin.publicAssetsDir) {
29
- void render404Asset(siteContext, res);
30
- return;
29
+ await render404Asset(siteContext, httpContext);
30
+ return true;
31
31
  }
32
32
  baseDir = plugin.publicAssetsDir;
33
33
  pathPrefix = `${getPluginAssetsUrl(plugin)}/`;
@@ -37,107 +37,66 @@ export async function publicAssetsMiddleware(req, res, next) {
37
37
  baseDir = join(siteContext.themeDir, "assets");
38
38
  }
39
39
  if (!path.startsWith(pathPrefix)) {
40
- void render404Asset(siteContext, res);
41
- return;
40
+ await render404Asset(siteContext, httpContext);
41
+ return true;
42
42
  }
43
43
  path = path.substring(pathPrefix.length);
44
- try {
45
- res.sendFile(path, {
46
- root: baseDir,
47
- immutable: appConf.immutableAssets,
48
- maxAge: appConf.immutableAssets ? HTTP_MAX_AGE : 0,
49
- }, (error) => {
50
- if (!error)
51
- return;
52
- sendFileErrorHandler(error, siteContext, res, path);
53
- });
54
- }
55
- catch (error) {
56
- siteContext.logger.error(error);
57
- serve500Html(res);
58
- }
44
+ await serveFile(httpContext, path, {
45
+ root: baseDir,
46
+ immutable: appConf.immutableAssets,
47
+ maxAge: appConf.immutableAssets ? HTTP_MAX_AGE : 0,
48
+ });
49
+ return true;
59
50
  }
60
- export async function boMiddleware(req, res, next) {
61
- const siteContext = getReqSiteContext(req);
51
+ export async function boFilesReqHandler(siteContext, httpContext) {
52
+ const { req } = httpContext;
62
53
  let path = req.path;
63
54
  if (!["GET", "HEAD"].includes(req.method) ||
64
55
  path.startsWith("/adm/api/v1") ||
65
56
  (path !== "/adm" && !path.startsWith("/adm/"))) {
66
- next();
67
- return;
68
- }
69
- try {
70
- path = path.substring("/adm/".length);
71
- if (path === "")
72
- path = "index.html";
73
- if (!(await pathExists(join(boDistDir, path)))) {
74
- path = "index.html";
75
- }
76
- res.sendFile(path, { root: boDistDir }, (error) => {
77
- if (!error)
78
- return;
79
- sendFileErrorHandler(error, siteContext, res, path);
80
- });
81
- }
82
- catch (error) {
83
- siteContext.logger.error(error);
84
- serve500Html(res);
85
- }
57
+ return false;
58
+ }
59
+ path = path.substring("/adm/".length);
60
+ if (path === "")
61
+ path = "index.html";
62
+ if (!(await pathExists(join(boDistDir, path)))) {
63
+ path = "index.html";
64
+ }
65
+ await serveFile(httpContext, path, {
66
+ root: boDistDir,
67
+ on404: () => render404Asset(siteContext, httpContext),
68
+ });
69
+ return true;
86
70
  }
87
- export async function boPluginsMiddleware(req, res, next) {
88
- const siteContext = getReqSiteContext(req);
71
+ export async function boPluginsReqHandler(siteContext, httpContext) {
72
+ const { req } = httpContext;
89
73
  const prefix = "/adm/plugins/";
90
74
  if (!["GET", "HEAD"].includes(req.method) || !req.path.startsWith(prefix)) {
91
- next();
92
- return;
75
+ return false;
93
76
  }
94
77
  const relPathIndex = req.path.indexOf("/", prefix.length);
95
78
  if (relPathIndex === -1) {
96
- serve404SimpleHtml(res);
97
- return;
79
+ serve404SimpleHtml(httpContext);
80
+ return true;
98
81
  }
99
82
  const urlPath = req.path.substring(prefix.length, relPathIndex);
100
83
  const relPath = req.path.substring(relPathIndex + 1);
101
- try {
102
- const plugin = siteContext.plugins.get(urlPath);
103
- const boAssetsDir = plugin?.boAssetsDir;
104
- if (!boAssetsDir || !(await pathExists(join(boAssetsDir, relPath)))) {
105
- serve404SimpleHtml(res);
106
- return;
107
- }
108
- res.sendFile(relPath, { root: boAssetsDir }, (error) => {
109
- if (!error)
110
- return;
111
- sendFileErrorHandler(error, siteContext, res, join(boAssetsDir, relPath));
112
- });
113
- }
114
- catch (error) {
115
- siteContext.logger.error(error);
116
- serve500Html(res);
117
- }
118
- }
119
- function sendFileErrorHandler(error, siteContext, res, path) {
120
- if ("statusCode" in error && error.statusCode === 404) {
121
- void render404Asset(siteContext, res);
122
- }
123
- else {
124
- if ("code" in error) {
125
- if (error.code === "ECONNABORTED") {
126
- res.send();
127
- return;
128
- }
129
- siteContext.logger.error(`failed to serve file '${path}':`, error.code, error);
130
- }
131
- serve500Html(res);
132
- }
84
+ const plugin = siteContext.plugins.get(urlPath);
85
+ const boAssetsDir = plugin?.boAssetsDir;
86
+ if (!boAssetsDir || !(await pathExists(join(boAssetsDir, relPath)))) {
87
+ serve404SimpleHtml(httpContext);
88
+ return true;
89
+ }
90
+ await serveFile(httpContext, relPath, { root: boAssetsDir });
91
+ return true;
133
92
  }
134
- async function render404Asset(siteContext, res) {
93
+ async function render404Asset(siteContext, httpContext) {
135
94
  try {
136
- await render404Html(siteContext, res);
95
+ await render404Html(siteContext, httpContext);
137
96
  }
138
97
  catch (error) {
139
98
  siteContext.logger.error("failed to render 404", error);
140
- serve500Html(res);
99
+ serve500Html(httpContext);
141
100
  }
142
101
  }
143
102
  //# sourceMappingURL=static-files-middlewares.js.map