@yimingliao/cms 0.0.125 → 0.0.127

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 (1118) hide show
  1. package/dist/export/client/index.js +61 -0
  2. package/dist/export/client/shadcn/index.js +17 -0
  3. package/dist/export/index.js +33 -0
  4. package/dist/export/server/index.js +78 -0
  5. package/dist/export/storage/r2/index.ts_.js +1 -0
  6. package/dist/export/storage/sftp/index.ts_.js +2 -0
  7. package/dist/src/client/applications/auth/sign-in/use-device-info.js +26 -0
  8. package/dist/src/client/applications/form/get-control-meta.js +30 -0
  9. package/dist/src/client/applications/form/use-pick-items.js +44 -0
  10. package/dist/src/client/applications/shadcn/use-mobile.js +20 -0
  11. package/dist/src/client/applications/shadcn/utils.js +8 -0
  12. package/dist/src/client/applications/ui/is-confirm.js +5 -0
  13. package/dist/src/client/applications/ui/use-count-down.js +34 -0
  14. package/dist/src/client/applications/ui/use-parent-pathname.js +10 -0
  15. package/dist/src/client/constants.js +3 -0
  16. package/dist/src/client/infrastructure/contexts/admin.js +27 -0
  17. package/dist/src/client/infrastructure/contexts/theme.js +22 -0
  18. package/dist/src/client/infrastructure/fetch/request-interceptor.js +21 -0
  19. package/dist/src/client/infrastructure/fetch/response-interceptor.js +22 -0
  20. package/dist/src/client/infrastructure/fetch/smart-fetch.js +24 -0
  21. package/dist/src/client/infrastructure/react-query/create-use-command.js +53 -0
  22. package/dist/src/client/infrastructure/react-query/create-use-query.js +20 -0
  23. package/dist/src/client/infrastructure/toast/error-display.js +14 -0
  24. package/dist/src/client/infrastructure/toast/handle-toast.js +29 -0
  25. package/dist/src/client/infrastructure/toast/should-show-toast.js +7 -0
  26. package/dist/src/client/interfaces/components/admin-initializer.js +28 -0
  27. package/dist/src/client/interfaces/components/shadcn/avatar.js +54 -0
  28. package/dist/src/client/interfaces/components/shadcn/button.js +56 -0
  29. package/dist/src/client/interfaces/components/shadcn/card.js +86 -0
  30. package/dist/src/client/interfaces/components/shadcn/collapsible.js +33 -0
  31. package/dist/src/client/interfaces/components/shadcn/dropdown-menu.js +217 -0
  32. package/dist/src/client/interfaces/components/shadcn/input-group.js +152 -0
  33. package/dist/src/client/interfaces/components/shadcn/input.js +23 -0
  34. package/dist/src/client/interfaces/components/shadcn/label.js +21 -0
  35. package/dist/src/client/interfaces/components/shadcn/pagination.js +107 -0
  36. package/dist/src/client/interfaces/components/shadcn/select.js +159 -0
  37. package/dist/src/client/interfaces/components/shadcn/separator.js +29 -0
  38. package/dist/src/client/interfaces/components/shadcn/sheet.js +114 -0
  39. package/dist/src/client/interfaces/components/shadcn/sidebar.js +612 -0
  40. package/dist/src/client/interfaces/components/shadcn/skeleton.js +17 -0
  41. package/dist/src/client/interfaces/components/shadcn/spinner.js +19 -0
  42. package/dist/src/client/interfaces/components/shadcn/textarea.js +22 -0
  43. package/dist/src/client/interfaces/components/shadcn/tooltip.js +53 -0
  44. package/dist/src/client/interfaces/components/ui/blocks/list-cards-container/list-cards-container.js +71 -0
  45. package/dist/src/client/interfaces/components/ui/blocks/list-cards-container/page-size-selector.js +43 -0
  46. package/dist/src/client/interfaces/components/ui/blocks/list-cards-container/pagination.js +84 -0
  47. package/dist/src/client/interfaces/components/ui/blocks/page-header/page-header-title.js +17 -0
  48. package/dist/src/client/interfaces/components/ui/blocks/page-header/page-header.js +66 -0
  49. package/dist/src/client/interfaces/components/ui/blocks/page-header/presets/batch-create.js +31 -0
  50. package/dist/src/client/interfaces/components/ui/blocks/page-header/presets/batch.js +34 -0
  51. package/dist/src/client/interfaces/components/ui/blocks/page-header/presets/create.js +31 -0
  52. package/dist/src/client/interfaces/components/ui/blocks/page-header/presets/edit.js +31 -0
  53. package/dist/src/client/interfaces/components/ui/blocks/page-header/presets/index.js +43 -0
  54. package/dist/src/client/interfaces/components/ui/blocks/page-header/presets/show.js +55 -0
  55. package/dist/src/client/interfaces/components/ui/blocks/page-header/presets/trash.js +33 -0
  56. package/dist/src/client/interfaces/components/ui/buttons/button.js +52 -0
  57. package/dist/src/client/interfaces/components/ui/buttons/return-button.js +59 -0
  58. package/dist/src/client/interfaces/components/ui/features/expandable-list/expand-bar.js +35 -0
  59. package/dist/src/client/interfaces/components/ui/features/expandable-list/expandable-list-content.js +42 -0
  60. package/dist/src/client/interfaces/components/ui/features/expandable-list/expandable-list.js +48 -0
  61. package/dist/src/client/interfaces/components/ui/form/containers/fields-container.js +23 -0
  62. package/dist/src/client/interfaces/components/ui/form/containers/main-fields.js +24 -0
  63. package/dist/src/client/interfaces/components/ui/form/containers/side-fields.js +23 -0
  64. package/dist/src/client/interfaces/components/ui/form/control-fields/built-in-fields.js +9 -0
  65. package/dist/src/client/interfaces/components/ui/form/control-fields/control-fields-display.js +104 -0
  66. package/dist/src/client/interfaces/components/ui/form/control-fields/control-fields-input.js +150 -0
  67. package/dist/src/client/interfaces/components/ui/form/control-fields/control-fields.js +57 -0
  68. package/dist/src/client/interfaces/components/ui/form/field-body.js +74 -0
  69. package/dist/src/client/interfaces/components/ui/form/field.js +30 -0
  70. package/dist/src/client/interfaces/components/ui/form/form.js +19 -0
  71. package/dist/src/client/interfaces/components/ui/form/index-field.js +92 -0
  72. package/dist/src/client/interfaces/components/ui/form/slug-field.js +87 -0
  73. package/dist/src/client/interfaces/components/ui/inputs/array-input.js +97 -0
  74. package/dist/src/client/interfaces/components/ui/inputs/checkbox.js +88 -0
  75. package/dist/src/client/interfaces/components/ui/inputs/input.js +56 -0
  76. package/dist/src/client/interfaces/components/ui/inputs/password-input.js +36 -0
  77. package/dist/src/client/interfaces/components/ui/inputs/search-input.js +58 -0
  78. package/dist/src/client/interfaces/components/ui/inputs/select.js +61 -0
  79. package/dist/src/client/interfaces/components/ui/inputs/textarea.js +59 -0
  80. package/dist/src/client/interfaces/components/ui/layouts/content-container.js +36 -0
  81. package/dist/src/client/interfaces/components/ui/layouts/layout-skeleton.js +32 -0
  82. package/dist/src/client/interfaces/components/ui/layouts/navbar/i18n-selector.js +34 -0
  83. package/dist/src/client/interfaces/components/ui/layouts/navbar/nav-user.js +79 -0
  84. package/dist/src/client/interfaces/components/ui/layouts/navbar/navbar.js +70 -0
  85. package/dist/src/client/interfaces/components/ui/layouts/navbar/sign-out-button.js +52 -0
  86. package/dist/src/client/interfaces/components/ui/layouts/navbar/theme-selector.js +29 -0
  87. package/dist/src/client/interfaces/components/ui/layouts/sidebar/nav-main.js +82 -0
  88. package/dist/src/client/interfaces/pages/auth/change-password.js +137 -0
  89. package/dist/src/client/interfaces/pages/auth/email-unverified.js +84 -0
  90. package/dist/src/client/interfaces/pages/auth/forgot-password.js +83 -0
  91. package/dist/src/client/interfaces/pages/auth/reset-password.js +111 -0
  92. package/dist/src/client/interfaces/pages/auth/sign-in.js +99 -0
  93. package/dist/src/client/interfaces/pages/auth/verify-email.js +51 -0
  94. package/dist/src/client/interfaces/styles/constants.js +7 -0
  95. package/dist/src/constants/anchor.js +4 -0
  96. package/dist/src/constants/cache-keys.js +25 -0
  97. package/dist/src/constants/keys/auth.js +13 -0
  98. package/dist/src/constants/keys/email.js +10 -0
  99. package/dist/src/constants/keys/index.js +15 -0
  100. package/dist/src/constants/keys/main.js +13 -0
  101. package/dist/src/constants/keys/resources.js +15 -0
  102. package/dist/src/constants/keys/ui.js +53 -0
  103. package/dist/src/constants/paths/auth.js +26 -0
  104. package/dist/src/constants/paths/cms-path.js +3 -0
  105. package/dist/src/constants/paths/index.js +11 -0
  106. package/dist/src/constants/paths/main.js +28 -0
  107. package/dist/src/constants/paths/resources.js +28 -0
  108. package/dist/src/constants/redirect-paths.js +10 -0
  109. package/dist/src/domain/resources/admin/constants.js +14 -0
  110. package/dist/src/domain/resources/admin/props.js +7 -0
  111. package/dist/src/domain/resources/constants.js +29 -0
  112. package/dist/src/domain/resources/file/props.js +10 -0
  113. package/dist/src/domain/resources/file/utils/is-file-locked.js +10 -0
  114. package/dist/src/domain/resources/folder/utils/file-manager-double-click.js +7 -0
  115. package/dist/src/domain/resources/folder/utils/is-folder-locked.js +8 -0
  116. package/dist/src/domain/resources/folder/utils/normalize-folder-key.js +16 -0
  117. package/dist/src/domain/resources/post/props.js +9 -0
  118. package/dist/src/server/applications/auth/create-auth-use-cases.js +125 -0
  119. package/dist/src/server/applications/emails/create-email-verification-email.js +29 -0
  120. package/dist/src/server/applications/emails/create-forgot-password-email.js +26 -0
  121. package/dist/src/server/infrastructure/argon2/argon2.service.js +23 -0
  122. package/dist/src/server/infrastructure/cache/cache-key-delimiter.js +3 -0
  123. package/dist/src/server/infrastructure/cache/create-cache-result.js +39 -0
  124. package/dist/src/server/infrastructure/cache/create-cache.js +20 -0
  125. package/dist/src/server/infrastructure/cache/create-ip-rate-limiter.js +42 -0
  126. package/dist/src/server/infrastructure/cache/normalize-cache-key.js +20 -0
  127. package/dist/src/server/infrastructure/cookie/cookie.service.js +81 -0
  128. package/dist/src/server/infrastructure/crypto/crypto.service.js +66 -0
  129. package/dist/src/server/infrastructure/database/admin/command/create-admin-command-repository.js +107 -0
  130. package/dist/src/server/infrastructure/database/admin/include.js +20 -0
  131. package/dist/src/server/infrastructure/database/admin/query/create-admin-query-repository.js +81 -0
  132. package/dist/src/server/infrastructure/database/admin-refresh-token/command/create-admin-refresh-token-command-repository.js +36 -0
  133. package/dist/src/server/infrastructure/database/admin-refresh-token/query/create-admin-refresh-token-query-repository.js +23 -0
  134. package/dist/src/server/infrastructure/database/constants.js +15 -0
  135. package/dist/src/server/infrastructure/database/file/command/create-file-command-repository.js +158 -0
  136. package/dist/src/server/infrastructure/database/file/include.js +30 -0
  137. package/dist/src/server/infrastructure/database/file/query/create-file-query-repository.js +74 -0
  138. package/dist/src/server/infrastructure/database/folder/command/create-folder-command-repository.js +67 -0
  139. package/dist/src/server/infrastructure/database/folder/include.js +13 -0
  140. package/dist/src/server/infrastructure/database/folder/query/create-folder-query-repository.js +55 -0
  141. package/dist/src/server/infrastructure/database/post/command/create-post-command-repository.js +195 -0
  142. package/dist/src/server/infrastructure/database/post/include.js +61 -0
  143. package/dist/src/server/infrastructure/database/post/query/create-post-query-repository.js +184 -0
  144. package/dist/src/server/infrastructure/database/seo-metadata/command/create-seo-metadata-command-repository.js +31 -0
  145. package/dist/src/server/infrastructure/database/utils/build-file-usage.js +20 -0
  146. package/dist/src/server/infrastructure/database/utils/connect.js +15 -0
  147. package/dist/src/server/infrastructure/database/utils/create-pagination.js +9 -0
  148. package/dist/src/server/infrastructure/database/utils/create-search.js +32 -0
  149. package/dist/src/server/infrastructure/email/create-render-email-template.js +64 -0
  150. package/dist/src/server/infrastructure/email/create-send-email.js +14 -0
  151. package/dist/src/server/infrastructure/email/create-transporter.js +19 -0
  152. package/dist/src/server/infrastructure/jwt/jwt.service.js +37 -0
  153. package/dist/src/server/infrastructure/zod/create-zod.js +69 -0
  154. package/dist/src/server/infrastructure/zod/rules/bcp47.js +12 -0
  155. package/dist/src/server/infrastructure/zod/rules/exist.js +24 -0
  156. package/dist/src/server/infrastructure/zod/rules/og-locale.js +7 -0
  157. package/dist/src/server/infrastructure/zod/rules/unique.js +35 -0
  158. package/dist/src/server/infrastructure/zod/schemas/file.js +38 -0
  159. package/dist/src/server/infrastructure/zod/schemas/schemas.js +102 -0
  160. package/dist/src/server/infrastructure/zod/schemas/toc-item.js +22 -0
  161. package/dist/src/server/interfaces/actions/auth/change-password/change-password-validator.js +20 -0
  162. package/dist/src/server/interfaces/actions/auth/change-password/create-change-password-action.js +29 -0
  163. package/dist/src/server/interfaces/actions/auth/email-unverifired/create-email-unverifired-action.js +34 -0
  164. package/dist/src/server/interfaces/actions/auth/email-unverifired/email-unverifired-validator.js +5 -0
  165. package/dist/src/server/interfaces/actions/auth/forgot-password/create-forgot-password-action.js +34 -0
  166. package/dist/src/server/interfaces/actions/auth/forgot-password/forgot-password-validator.js +5 -0
  167. package/dist/src/server/interfaces/actions/auth/reset-password/create-reset-password-action.js +32 -0
  168. package/dist/src/server/interfaces/actions/auth/reset-password/reset-password-validator.js +20 -0
  169. package/dist/src/server/interfaces/actions/auth/sign-in/create-sign-in-action.js +47 -0
  170. package/dist/src/server/interfaces/actions/auth/sign-in/sign-in-validator.js +6 -0
  171. package/dist/src/server/interfaces/actions/auth/sign-out/create-sign-out-action.js +34 -0
  172. package/dist/src/server/interfaces/actions/auth/verify/create-verify-action.js +17 -0
  173. package/dist/src/server/interfaces/actions/auth/verify-email/create-verify-email-action.js +34 -0
  174. package/dist/src/server/interfaces/actions/auth/verify-email/verify-email-validator.js +6 -0
  175. package/dist/src/server/interfaces/actions/resources/admin/commands/create/admin-create-validator.js +38 -0
  176. package/dist/src/server/interfaces/actions/resources/admin/commands/create/create-admin-create-action.js +46 -0
  177. package/dist/src/server/interfaces/actions/resources/admin/commands/delete/create-admin-delete-action.js +32 -0
  178. package/dist/src/server/interfaces/actions/resources/admin/commands/update/admin-update-validator.js +41 -0
  179. package/dist/src/server/interfaces/actions/resources/admin/commands/update/create-admin-update-action.js +57 -0
  180. package/dist/src/server/interfaces/actions/resources/admin/queries/create-admin-find-full-action.js +27 -0
  181. package/dist/src/server/interfaces/actions/resources/admin/queries/create-admin-find-list-cards-action.js +35 -0
  182. package/dist/src/server/interfaces/actions/resources/admin-refresh-token/commands/delete/create-admin-refresh-token-delete-action.js +37 -0
  183. package/dist/src/server/interfaces/actions/resources/admin-refresh-token/queries/create-admin-refresh-token-find-full-action.js +42 -0
  184. package/dist/src/server/interfaces/actions/resources/file/commands/create/create-file-create-action.js +53 -0
  185. package/dist/src/server/interfaces/actions/resources/file/commands/create/file-create-validator.js +37 -0
  186. package/dist/src/server/interfaces/actions/resources/file/commands/create-many/create-file-create-many-action.js +45 -0
  187. package/dist/src/server/interfaces/actions/resources/file/commands/create-many/file-create-many-validator.js +37 -0
  188. package/dist/src/server/interfaces/actions/resources/file/commands/purge-many/create-file-purge-many-action.js +44 -0
  189. package/dist/src/server/interfaces/actions/resources/file/commands/purge-many/file-purge-many-validator.js +5 -0
  190. package/dist/src/server/interfaces/actions/resources/file/commands/restore-many/create-file-restore-many-action.js +27 -0
  191. package/dist/src/server/interfaces/actions/resources/file/commands/restore-many/file-create-restore-validator.js +5 -0
  192. package/dist/src/server/interfaces/actions/resources/file/commands/soft-delete/create-file-soft-delete-action.js +30 -0
  193. package/dist/src/server/interfaces/actions/resources/file/commands/soft-delete-many/create-file-soft-delete-many-action.js +47 -0
  194. package/dist/src/server/interfaces/actions/resources/file/commands/soft-delete-many/file-soft-delete-many-validator.js +5 -0
  195. package/dist/src/server/interfaces/actions/resources/file/commands/update/create-file-update-action.js +59 -0
  196. package/dist/src/server/interfaces/actions/resources/file/commands/update/file-update-validator.js +35 -0
  197. package/dist/src/server/interfaces/actions/resources/file/querires/create-file-find-full-action.js +25 -0
  198. package/dist/src/server/interfaces/actions/resources/file/querires/create-file-find-list-cards-action.js +38 -0
  199. package/dist/src/server/interfaces/actions/resources/folder/commands/create/create-folder-create-action.js +40 -0
  200. package/dist/src/server/interfaces/actions/resources/folder/commands/create/folder-create-validator.js +12 -0
  201. package/dist/src/server/interfaces/actions/resources/folder/commands/delete/create-folder-delete-action.js +30 -0
  202. package/dist/src/server/interfaces/actions/resources/folder/commands/update/create-folder-update-action.js +42 -0
  203. package/dist/src/server/interfaces/actions/resources/folder/commands/update/folder-update-validator.js +16 -0
  204. package/dist/src/server/interfaces/actions/resources/folder/queries/create-folder-find-full-action.js +44 -0
  205. package/dist/src/server/interfaces/actions/resources/folder/queries/create-folder-find-list-cards-action.js +32 -0
  206. package/dist/src/server/interfaces/actions/resources/post/commands/create/create-post-create-action.js +33 -0
  207. package/dist/src/server/interfaces/actions/resources/post/commands/create/post-create-validator.js +147 -0
  208. package/dist/src/server/interfaces/actions/resources/post/commands/delete/create-post-delete-action.js +25 -0
  209. package/dist/src/server/interfaces/actions/resources/post/commands/update/create-post-update-action.js +38 -0
  210. package/dist/src/server/interfaces/actions/resources/post/commands/update/post-update-validator.js +149 -0
  211. package/dist/src/server/interfaces/actions/resources/post/queries/create-post-find-action.js +33 -0
  212. package/dist/src/server/interfaces/actions/resources/post/queries/create-post-find-full-action.js +33 -0
  213. package/dist/src/server/interfaces/actions/resources/post/queries/create-post-find-list-cards-action.js +53 -0
  214. package/dist/src/server/interfaces/actions/resources/post/queries/create-post-find-many-action.js +22 -0
  215. package/dist/src/server/interfaces/actions/resources/seo-metadata/commands/upsert/create-seo-metadata-upsert-action.js +41 -0
  216. package/dist/src/server/interfaces/actions/resources/seo-metadata/commands/upsert/seo-metadata-upsert-validator.js +83 -0
  217. package/dist/src/server/interfaces/apis/file-upload/file-upload-api.js +38 -0
  218. package/dist/src/server/interfaces/apis/file-upload/validator.js +15 -0
  219. package/dist/src/server/interfaces/apis/multi-files-upload/multi-files-upload-api.js +62 -0
  220. package/dist/src/server/interfaces/apis/multi-files-upload/validator.js +13 -0
  221. package/dist/src/server/interfaces/execution/create-execute-action.js +38 -0
  222. package/dist/src/server/interfaces/execution/create-execute-api.js +28 -0
  223. package/dist/src/server/interfaces/execution/create-run-action.js +26 -0
  224. package/dist/src/server/interfaces/execution/normalize-error.js +33 -0
  225. package/dist/src/server/interfaces/middlewares/auth/create-auth-middleware.js +31 -0
  226. package/dist/src/server/interfaces/middlewares/auth/create-verify-access-token.js +27 -0
  227. package/dist/src/server/interfaces/middlewares/auth/create-verify-refresh-token.js +27 -0
  228. package/dist/src/server/server-error.js +35 -0
  229. package/dist/src/shared/blob-file/classify-file-type.js +27 -0
  230. package/dist/src/shared/blob-file/format-file-size.js +13 -0
  231. package/dist/src/shared/blob-file/get-media-info/get-audio-info.js +26 -0
  232. package/dist/src/shared/blob-file/get-media-info/get-image-info.js +26 -0
  233. package/dist/src/shared/blob-file/get-media-info/get-media-info.js +31 -0
  234. package/dist/src/shared/blob-file/get-media-info/get-video-info.js +31 -0
  235. package/dist/src/shared/blob-file/mime-to-extension.js +8 -0
  236. package/dist/src/shared/form/normalizers/datetime-to-db.js +8 -0
  237. package/dist/src/shared/form/normalizers/datetime-to-ui.js +13 -0
  238. package/dist/src/shared/form/normalizers/json-array-to-db.js +17 -0
  239. package/dist/src/shared/form/normalizers/json-array-to-ui.js +9 -0
  240. package/dist/src/shared/result/result.js +26 -0
  241. package/dist/src/shared/seo-metadata/build-article-metadata.js +82 -0
  242. package/dist/src/shared/seo-metadata/build-website-metadata.js +65 -0
  243. package/dist/src/shared/seo-metadata/serialize-json-ld.js +6 -0
  244. package/dist/src/shared/seo-metadata/standards.js +22 -0
  245. package/dist/src/shared/seo-metadata/utils/build-alternate-map.js +10 -0
  246. package/dist/src/shared/seo-metadata/utils/build-og-image.js +18 -0
  247. package/dist/src/shared/seo-metadata/utils/ensure-og-type.js +9 -0
  248. package/dist/src/shared/seo-metadata/utils/ensure-twitter-card.js +9 -0
  249. package/dist/src/shared/seo-metadata/utils/sanitize-string-array.js +8 -0
  250. package/dist/src/shared/seo-metadata/utils/to-iso-time.js +6 -0
  251. package/dist/src/shared/translation/create-build-translations.js +11 -0
  252. package/dist/src/shared/translation/find-translation.js +13 -0
  253. package/dist/src/shared/units.js +10 -0
  254. package/dist/src/shared/utils/ensure-array.js +6 -0
  255. package/dist/src/shared/utils/format-date-time.js +17 -0
  256. package/dist/src/shared/utils/join-url.js +7 -0
  257. package/dist/{storage/r2/index.js → src/storage/r2/r2.service.js} +2 -3
  258. package/dist/src/storage/sftp/sftp-pool.js +53 -0
  259. package/dist/{storage/sftp/index.js → src/storage/sftp/sftp.service.js} +3 -54
  260. package/dist/{chunk-V3UUO5WJ.js → src/storage/utils.js} +3 -2
  261. package/dist/types/export/client/index.d.ts +2 -0
  262. package/dist/types/export/client/index.d.ts.map +1 -0
  263. package/dist/types/export/client/shadcn/index.d.ts +2 -0
  264. package/dist/types/export/client/shadcn/index.d.ts.map +1 -0
  265. package/dist/types/export/index.d.ts +4 -0
  266. package/dist/types/export/index.d.ts.map +1 -0
  267. package/dist/types/export/server/index.d.ts +2 -0
  268. package/dist/types/export/server/index.d.ts.map +1 -0
  269. package/dist/types/export/storage/r2/index.d.ts +2 -0
  270. package/dist/types/export/storage/r2/index.d.ts.map +1 -0
  271. package/dist/types/export/storage/sftp/index.d.ts +2 -0
  272. package/dist/types/export/storage/sftp/index.d.ts.map +1 -0
  273. package/dist/types/src/client/applications/auth/index.d.ts +2 -0
  274. package/dist/types/src/client/applications/auth/index.d.ts.map +1 -0
  275. package/dist/types/src/client/applications/auth/sign-in/index.d.ts +2 -0
  276. package/dist/types/src/client/applications/auth/sign-in/index.d.ts.map +1 -0
  277. package/dist/types/src/client/applications/auth/sign-in/use-device-info.d.ts +3 -0
  278. package/dist/types/src/client/applications/auth/sign-in/use-device-info.d.ts.map +1 -0
  279. package/dist/types/src/client/applications/form/get-control-meta.d.ts +16 -0
  280. package/dist/types/src/client/applications/form/get-control-meta.d.ts.map +1 -0
  281. package/dist/types/src/client/applications/form/index.d.ts +3 -0
  282. package/dist/types/src/client/applications/form/index.d.ts.map +1 -0
  283. package/dist/types/src/client/applications/form/use-pick-items.d.ts +14 -0
  284. package/dist/types/src/client/applications/form/use-pick-items.d.ts.map +1 -0
  285. package/dist/types/src/client/applications/index.d.ts +5 -0
  286. package/dist/types/src/client/applications/index.d.ts.map +1 -0
  287. package/dist/types/src/client/applications/shadcn/index.d.ts +3 -0
  288. package/dist/types/src/client/applications/shadcn/index.d.ts.map +1 -0
  289. package/dist/types/src/client/applications/shadcn/use-mobile.d.ts +2 -0
  290. package/dist/types/src/client/applications/shadcn/use-mobile.d.ts.map +1 -0
  291. package/dist/types/src/client/applications/shadcn/utils.d.ts +3 -0
  292. package/dist/types/src/client/applications/shadcn/utils.d.ts.map +1 -0
  293. package/dist/types/src/client/applications/ui/index.d.ts +4 -0
  294. package/dist/types/src/client/applications/ui/index.d.ts.map +1 -0
  295. package/dist/types/src/client/applications/ui/is-confirm.d.ts +2 -0
  296. package/dist/types/src/client/applications/ui/is-confirm.d.ts.map +1 -0
  297. package/dist/types/src/client/applications/ui/use-count-down.d.ts +6 -0
  298. package/dist/types/src/client/applications/ui/use-count-down.d.ts.map +1 -0
  299. package/dist/types/src/client/applications/ui/use-parent-pathname.d.ts +2 -0
  300. package/dist/types/src/client/applications/ui/use-parent-pathname.d.ts.map +1 -0
  301. package/dist/types/src/client/constants.d.ts +2 -0
  302. package/dist/types/src/client/constants.d.ts.map +1 -0
  303. package/dist/types/src/client/index.d.ts +4 -0
  304. package/dist/types/src/client/index.d.ts.map +1 -0
  305. package/dist/types/src/client/infrastructure/contexts/admin.d.ts +12 -0
  306. package/dist/types/src/client/infrastructure/contexts/admin.d.ts.map +1 -0
  307. package/dist/types/src/client/infrastructure/contexts/index.d.ts +3 -0
  308. package/dist/types/src/client/infrastructure/contexts/index.d.ts.map +1 -0
  309. package/dist/types/src/client/infrastructure/contexts/theme.d.ts +4 -0
  310. package/dist/types/src/client/infrastructure/contexts/theme.d.ts.map +1 -0
  311. package/dist/types/src/client/infrastructure/fetch/index.d.ts +4 -0
  312. package/dist/types/src/client/infrastructure/fetch/index.d.ts.map +1 -0
  313. package/dist/types/src/client/infrastructure/fetch/request-interceptor.d.ts +5 -0
  314. package/dist/types/src/client/infrastructure/fetch/request-interceptor.d.ts.map +1 -0
  315. package/dist/types/src/client/infrastructure/fetch/response-interceptor.d.ts +6 -0
  316. package/dist/types/src/client/infrastructure/fetch/response-interceptor.d.ts.map +1 -0
  317. package/dist/types/src/client/infrastructure/fetch/smart-fetch.d.ts +9 -0
  318. package/dist/types/src/client/infrastructure/fetch/smart-fetch.d.ts.map +1 -0
  319. package/dist/types/src/client/infrastructure/fetch/types.d.ts +12 -0
  320. package/dist/types/src/client/infrastructure/fetch/types.d.ts.map +1 -0
  321. package/dist/types/src/client/infrastructure/index.d.ts +5 -0
  322. package/dist/types/src/client/infrastructure/index.d.ts.map +1 -0
  323. package/dist/types/src/client/infrastructure/react-query/create-use-command.d.ts +89 -0
  324. package/dist/types/src/client/infrastructure/react-query/create-use-command.d.ts.map +1 -0
  325. package/dist/types/src/client/infrastructure/react-query/create-use-query.d.ts +174 -0
  326. package/dist/types/src/client/infrastructure/react-query/create-use-query.d.ts.map +1 -0
  327. package/dist/types/src/client/infrastructure/react-query/index.d.ts +3 -0
  328. package/dist/types/src/client/infrastructure/react-query/index.d.ts.map +1 -0
  329. package/dist/types/src/client/infrastructure/toast/error-display.d.ts +3 -0
  330. package/dist/types/src/client/infrastructure/toast/error-display.d.ts.map +1 -0
  331. package/dist/types/src/client/infrastructure/toast/handle-toast.d.ts +7 -0
  332. package/dist/types/src/client/infrastructure/toast/handle-toast.d.ts.map +1 -0
  333. package/dist/types/src/client/infrastructure/toast/index.d.ts +2 -0
  334. package/dist/types/src/client/infrastructure/toast/index.d.ts.map +1 -0
  335. package/dist/types/src/client/infrastructure/toast/should-show-toast.d.ts +3 -0
  336. package/dist/types/src/client/infrastructure/toast/should-show-toast.d.ts.map +1 -0
  337. package/dist/types/src/client/interfaces/components/admin-initializer.d.ts +8 -0
  338. package/dist/types/src/client/interfaces/components/admin-initializer.d.ts.map +1 -0
  339. package/dist/types/src/client/interfaces/components/index.d.ts +3 -0
  340. package/dist/types/src/client/interfaces/components/index.d.ts.map +1 -0
  341. package/dist/types/src/client/interfaces/components/shadcn/avatar.d.ts +7 -0
  342. package/dist/types/src/client/interfaces/components/shadcn/avatar.d.ts.map +1 -0
  343. package/dist/types/src/client/interfaces/components/shadcn/button.d.ts +11 -0
  344. package/dist/types/src/client/interfaces/components/shadcn/button.d.ts.map +1 -0
  345. package/dist/types/src/client/interfaces/components/shadcn/card.d.ts +10 -0
  346. package/dist/types/src/client/interfaces/components/shadcn/card.d.ts.map +1 -0
  347. package/dist/types/src/client/interfaces/components/shadcn/collapsible.d.ts +7 -0
  348. package/dist/types/src/client/interfaces/components/shadcn/collapsible.d.ts.map +1 -0
  349. package/dist/types/src/client/interfaces/components/shadcn/dropdown-menu.d.ts +26 -0
  350. package/dist/types/src/client/interfaces/components/shadcn/dropdown-menu.d.ts.map +1 -0
  351. package/dist/types/src/client/interfaces/components/shadcn/index.d.ts +18 -0
  352. package/dist/types/src/client/interfaces/components/shadcn/index.d.ts.map +1 -0
  353. package/dist/types/src/client/interfaces/components/shadcn/input-group.d.ts +17 -0
  354. package/dist/types/src/client/interfaces/components/shadcn/input-group.d.ts.map +1 -0
  355. package/dist/types/src/client/interfaces/components/shadcn/input.d.ts +4 -0
  356. package/dist/types/src/client/interfaces/components/shadcn/input.d.ts.map +1 -0
  357. package/dist/types/src/client/interfaces/components/shadcn/label.d.ts +6 -0
  358. package/dist/types/src/client/interfaces/components/shadcn/label.d.ts.map +1 -0
  359. package/dist/types/src/client/interfaces/components/shadcn/pagination.d.ts +14 -0
  360. package/dist/types/src/client/interfaces/components/shadcn/pagination.d.ts.map +1 -0
  361. package/dist/types/src/client/interfaces/components/shadcn/select.d.ts +16 -0
  362. package/dist/types/src/client/interfaces/components/shadcn/select.d.ts.map +1 -0
  363. package/dist/types/src/client/interfaces/components/shadcn/separator.d.ts +5 -0
  364. package/dist/types/src/client/interfaces/components/shadcn/separator.d.ts.map +1 -0
  365. package/dist/types/src/client/interfaces/components/shadcn/sheet.d.ts +14 -0
  366. package/dist/types/src/client/interfaces/components/shadcn/sheet.d.ts.map +1 -0
  367. package/dist/types/src/client/interfaces/components/shadcn/sidebar.d.ts +71 -0
  368. package/dist/types/src/client/interfaces/components/shadcn/sidebar.d.ts.map +1 -0
  369. package/dist/types/src/client/interfaces/components/shadcn/skeleton.d.ts +4 -0
  370. package/dist/types/src/client/interfaces/components/shadcn/skeleton.d.ts.map +1 -0
  371. package/dist/types/src/client/interfaces/components/shadcn/spinner.d.ts +4 -0
  372. package/dist/types/src/client/interfaces/components/shadcn/spinner.d.ts.map +1 -0
  373. package/dist/types/src/client/interfaces/components/shadcn/textarea.d.ts +4 -0
  374. package/dist/types/src/client/interfaces/components/shadcn/textarea.d.ts.map +1 -0
  375. package/dist/types/src/client/interfaces/components/shadcn/tooltip.d.ts +8 -0
  376. package/dist/types/src/client/interfaces/components/shadcn/tooltip.d.ts.map +1 -0
  377. package/dist/types/src/client/interfaces/components/ui/blocks/index.d.ts +3 -0
  378. package/dist/types/src/client/interfaces/components/ui/blocks/index.d.ts.map +1 -0
  379. package/dist/types/src/client/interfaces/components/ui/blocks/list-cards-container/index.d.ts +2 -0
  380. package/dist/types/src/client/interfaces/components/ui/blocks/list-cards-container/index.d.ts.map +1 -0
  381. package/dist/types/src/client/interfaces/components/ui/blocks/list-cards-container/list-cards-container.d.ts +16 -0
  382. package/dist/types/src/client/interfaces/components/ui/blocks/list-cards-container/list-cards-container.d.ts.map +1 -0
  383. package/dist/types/src/client/interfaces/components/ui/blocks/list-cards-container/page-size-selector.d.ts +7 -0
  384. package/dist/types/src/client/interfaces/components/ui/blocks/list-cards-container/page-size-selector.d.ts.map +1 -0
  385. package/dist/types/src/client/interfaces/components/ui/blocks/list-cards-container/pagination.d.ts +8 -0
  386. package/dist/types/src/client/interfaces/components/ui/blocks/list-cards-container/pagination.d.ts.map +1 -0
  387. package/dist/types/src/client/interfaces/components/ui/blocks/page-header/index.d.ts +2 -0
  388. package/dist/types/src/client/interfaces/components/ui/blocks/page-header/index.d.ts.map +1 -0
  389. package/dist/types/src/client/interfaces/components/ui/blocks/page-header/page-header-title.d.ts +12 -0
  390. package/dist/types/src/client/interfaces/components/ui/blocks/page-header/page-header-title.d.ts.map +1 -0
  391. package/dist/types/src/client/interfaces/components/ui/blocks/page-header/page-header.d.ts +28 -0
  392. package/dist/types/src/client/interfaces/components/ui/blocks/page-header/page-header.d.ts.map +1 -0
  393. package/dist/types/src/client/interfaces/components/ui/blocks/page-header/presets/batch-create.d.ts +3 -0
  394. package/dist/types/src/client/interfaces/components/ui/blocks/page-header/presets/batch-create.d.ts.map +1 -0
  395. package/dist/types/src/client/interfaces/components/ui/blocks/page-header/presets/batch.d.ts +3 -0
  396. package/dist/types/src/client/interfaces/components/ui/blocks/page-header/presets/batch.d.ts.map +1 -0
  397. package/dist/types/src/client/interfaces/components/ui/blocks/page-header/presets/create.d.ts +3 -0
  398. package/dist/types/src/client/interfaces/components/ui/blocks/page-header/presets/create.d.ts.map +1 -0
  399. package/dist/types/src/client/interfaces/components/ui/blocks/page-header/presets/edit.d.ts +3 -0
  400. package/dist/types/src/client/interfaces/components/ui/blocks/page-header/presets/edit.d.ts.map +1 -0
  401. package/dist/types/src/client/interfaces/components/ui/blocks/page-header/presets/index.d.ts +3 -0
  402. package/dist/types/src/client/interfaces/components/ui/blocks/page-header/presets/index.d.ts.map +1 -0
  403. package/dist/types/src/client/interfaces/components/ui/blocks/page-header/presets/show.d.ts +3 -0
  404. package/dist/types/src/client/interfaces/components/ui/blocks/page-header/presets/show.d.ts.map +1 -0
  405. package/dist/types/src/client/interfaces/components/ui/blocks/page-header/presets/trash.d.ts +3 -0
  406. package/dist/types/src/client/interfaces/components/ui/blocks/page-header/presets/trash.d.ts.map +1 -0
  407. package/dist/types/src/client/interfaces/components/ui/blocks/page-header/types.d.ts +14 -0
  408. package/dist/types/src/client/interfaces/components/ui/blocks/page-header/types.d.ts.map +1 -0
  409. package/dist/types/src/client/interfaces/components/ui/buttons/button.d.ts +10 -0
  410. package/dist/types/src/client/interfaces/components/ui/buttons/button.d.ts.map +1 -0
  411. package/dist/types/src/client/interfaces/components/ui/buttons/index.d.ts +3 -0
  412. package/dist/types/src/client/interfaces/components/ui/buttons/index.d.ts.map +1 -0
  413. package/dist/types/src/client/interfaces/components/ui/buttons/return-button.d.ts +11 -0
  414. package/dist/types/src/client/interfaces/components/ui/buttons/return-button.d.ts.map +1 -0
  415. package/dist/types/src/client/interfaces/components/ui/features/expandable-list/expand-bar.d.ts +4 -0
  416. package/dist/types/src/client/interfaces/components/ui/features/expandable-list/expand-bar.d.ts.map +1 -0
  417. package/dist/types/src/client/interfaces/components/ui/features/expandable-list/expandable-list-content.d.ts +13 -0
  418. package/dist/types/src/client/interfaces/components/ui/features/expandable-list/expandable-list-content.d.ts.map +1 -0
  419. package/dist/types/src/client/interfaces/components/ui/features/expandable-list/expandable-list.d.ts +9 -0
  420. package/dist/types/src/client/interfaces/components/ui/features/expandable-list/expandable-list.d.ts.map +1 -0
  421. package/dist/types/src/client/interfaces/components/ui/features/expandable-list/index.d.ts +2 -0
  422. package/dist/types/src/client/interfaces/components/ui/features/expandable-list/index.d.ts.map +1 -0
  423. package/dist/types/src/client/interfaces/components/ui/features/index.d.ts +2 -0
  424. package/dist/types/src/client/interfaces/components/ui/features/index.d.ts.map +1 -0
  425. package/dist/types/src/client/interfaces/components/ui/form/containers/fields-container.d.ts +3 -0
  426. package/dist/types/src/client/interfaces/components/ui/form/containers/fields-container.d.ts.map +1 -0
  427. package/dist/types/src/client/interfaces/components/ui/form/containers/index.d.ts +4 -0
  428. package/dist/types/src/client/interfaces/components/ui/form/containers/index.d.ts.map +1 -0
  429. package/dist/types/src/client/interfaces/components/ui/form/containers/main-fields.d.ts +3 -0
  430. package/dist/types/src/client/interfaces/components/ui/form/containers/main-fields.d.ts.map +1 -0
  431. package/dist/types/src/client/interfaces/components/ui/form/containers/side-fields.d.ts +3 -0
  432. package/dist/types/src/client/interfaces/components/ui/form/containers/side-fields.d.ts.map +1 -0
  433. package/dist/types/src/client/interfaces/components/ui/form/control-fields/built-in-fields.d.ts +4 -0
  434. package/dist/types/src/client/interfaces/components/ui/form/control-fields/built-in-fields.d.ts.map +1 -0
  435. package/dist/types/src/client/interfaces/components/ui/form/control-fields/control-fields-display.d.ts +10 -0
  436. package/dist/types/src/client/interfaces/components/ui/form/control-fields/control-fields-display.d.ts.map +1 -0
  437. package/dist/types/src/client/interfaces/components/ui/form/control-fields/control-fields-input.d.ts +12 -0
  438. package/dist/types/src/client/interfaces/components/ui/form/control-fields/control-fields-input.d.ts.map +1 -0
  439. package/dist/types/src/client/interfaces/components/ui/form/control-fields/control-fields.d.ts +17 -0
  440. package/dist/types/src/client/interfaces/components/ui/form/control-fields/control-fields.d.ts.map +1 -0
  441. package/dist/types/src/client/interfaces/components/ui/form/control-fields/index.d.ts +3 -0
  442. package/dist/types/src/client/interfaces/components/ui/form/control-fields/index.d.ts.map +1 -0
  443. package/dist/types/src/client/interfaces/components/ui/form/field-body.d.ts +10 -0
  444. package/dist/types/src/client/interfaces/components/ui/form/field-body.d.ts.map +1 -0
  445. package/dist/types/src/client/interfaces/components/ui/form/field.d.ts +12 -0
  446. package/dist/types/src/client/interfaces/components/ui/form/field.d.ts.map +1 -0
  447. package/dist/types/src/client/interfaces/components/ui/form/form.d.ts +3 -0
  448. package/dist/types/src/client/interfaces/components/ui/form/form.d.ts.map +1 -0
  449. package/dist/types/src/client/interfaces/components/ui/form/index-field.d.ts +11 -0
  450. package/dist/types/src/client/interfaces/components/ui/form/index-field.d.ts.map +1 -0
  451. package/dist/types/src/client/interfaces/components/ui/form/index.d.ts +8 -0
  452. package/dist/types/src/client/interfaces/components/ui/form/index.d.ts.map +1 -0
  453. package/dist/types/src/client/interfaces/components/ui/form/slug-field.d.ts +9 -0
  454. package/dist/types/src/client/interfaces/components/ui/form/slug-field.d.ts.map +1 -0
  455. package/dist/types/src/client/interfaces/components/ui/index.d.ts +6 -0
  456. package/dist/types/src/client/interfaces/components/ui/index.d.ts.map +1 -0
  457. package/dist/types/src/client/interfaces/components/ui/inputs/array-input.d.ts +9 -0
  458. package/dist/types/src/client/interfaces/components/ui/inputs/array-input.d.ts.map +1 -0
  459. package/dist/types/src/client/interfaces/components/ui/inputs/checkbox.d.ts +8 -0
  460. package/dist/types/src/client/interfaces/components/ui/inputs/checkbox.d.ts.map +1 -0
  461. package/dist/types/src/client/interfaces/components/ui/inputs/index.d.ts +8 -0
  462. package/dist/types/src/client/interfaces/components/ui/inputs/index.d.ts.map +1 -0
  463. package/dist/types/src/client/interfaces/components/ui/inputs/input.d.ts +7 -0
  464. package/dist/types/src/client/interfaces/components/ui/inputs/input.d.ts.map +1 -0
  465. package/dist/types/src/client/interfaces/components/ui/inputs/password-input.d.ts +4 -0
  466. package/dist/types/src/client/interfaces/components/ui/inputs/password-input.d.ts.map +1 -0
  467. package/dist/types/src/client/interfaces/components/ui/inputs/search-input.d.ts +9 -0
  468. package/dist/types/src/client/interfaces/components/ui/inputs/search-input.d.ts.map +1 -0
  469. package/dist/types/src/client/interfaces/components/ui/inputs/select.d.ts +17 -0
  470. package/dist/types/src/client/interfaces/components/ui/inputs/select.d.ts.map +1 -0
  471. package/dist/types/src/client/interfaces/components/ui/inputs/textarea.d.ts +7 -0
  472. package/dist/types/src/client/interfaces/components/ui/inputs/textarea.d.ts.map +1 -0
  473. package/dist/types/src/client/interfaces/components/ui/layouts/content-container.d.ts +9 -0
  474. package/dist/types/src/client/interfaces/components/ui/layouts/content-container.d.ts.map +1 -0
  475. package/dist/types/src/client/interfaces/components/ui/layouts/index.d.ts +5 -0
  476. package/dist/types/src/client/interfaces/components/ui/layouts/index.d.ts.map +1 -0
  477. package/dist/types/src/client/interfaces/components/ui/layouts/layout-skeleton.d.ts +2 -0
  478. package/dist/types/src/client/interfaces/components/ui/layouts/layout-skeleton.d.ts.map +1 -0
  479. package/dist/types/src/client/interfaces/components/ui/layouts/navbar/i18n-selector.d.ts +6 -0
  480. package/dist/types/src/client/interfaces/components/ui/layouts/navbar/i18n-selector.d.ts.map +1 -0
  481. package/dist/types/src/client/interfaces/components/ui/layouts/navbar/index.d.ts +4 -0
  482. package/dist/types/src/client/interfaces/components/ui/layouts/navbar/index.d.ts.map +1 -0
  483. package/dist/types/src/client/interfaces/components/ui/layouts/navbar/nav-user.d.ts +9 -0
  484. package/dist/types/src/client/interfaces/components/ui/layouts/navbar/nav-user.d.ts.map +1 -0
  485. package/dist/types/src/client/interfaces/components/ui/layouts/navbar/navbar.d.ts +8 -0
  486. package/dist/types/src/client/interfaces/components/ui/layouts/navbar/navbar.d.ts.map +1 -0
  487. package/dist/types/src/client/interfaces/components/ui/layouts/navbar/sign-out-button.d.ts +7 -0
  488. package/dist/types/src/client/interfaces/components/ui/layouts/navbar/sign-out-button.d.ts.map +1 -0
  489. package/dist/types/src/client/interfaces/components/ui/layouts/navbar/theme-selector.d.ts +2 -0
  490. package/dist/types/src/client/interfaces/components/ui/layouts/navbar/theme-selector.d.ts.map +1 -0
  491. package/dist/types/src/client/interfaces/components/ui/layouts/sidebar/index.d.ts +3 -0
  492. package/dist/types/src/client/interfaces/components/ui/layouts/sidebar/index.d.ts.map +1 -0
  493. package/dist/types/src/client/interfaces/components/ui/layouts/sidebar/nav-main.d.ts +12 -0
  494. package/dist/types/src/client/interfaces/components/ui/layouts/sidebar/nav-main.d.ts.map +1 -0
  495. package/dist/types/src/client/interfaces/index.d.ts +4 -0
  496. package/dist/types/src/client/interfaces/index.d.ts.map +1 -0
  497. package/dist/types/src/client/interfaces/pages/auth/change-password.d.ts +14 -0
  498. package/dist/types/src/client/interfaces/pages/auth/change-password.d.ts.map +1 -0
  499. package/dist/types/src/client/interfaces/pages/auth/email-unverified.d.ts +14 -0
  500. package/dist/types/src/client/interfaces/pages/auth/email-unverified.d.ts.map +1 -0
  501. package/dist/types/src/client/interfaces/pages/auth/forgot-password.d.ts +14 -0
  502. package/dist/types/src/client/interfaces/pages/auth/forgot-password.d.ts.map +1 -0
  503. package/dist/types/src/client/interfaces/pages/auth/index.d.ts +7 -0
  504. package/dist/types/src/client/interfaces/pages/auth/index.d.ts.map +1 -0
  505. package/dist/types/src/client/interfaces/pages/auth/reset-password.d.ts +14 -0
  506. package/dist/types/src/client/interfaces/pages/auth/reset-password.d.ts.map +1 -0
  507. package/dist/types/src/client/interfaces/pages/auth/sign-in.d.ts +14 -0
  508. package/dist/types/src/client/interfaces/pages/auth/sign-in.d.ts.map +1 -0
  509. package/dist/types/src/client/interfaces/pages/auth/verify-email.d.ts +14 -0
  510. package/dist/types/src/client/interfaces/pages/auth/verify-email.d.ts.map +1 -0
  511. package/dist/types/src/client/interfaces/pages/index.d.ts +2 -0
  512. package/dist/types/src/client/interfaces/pages/index.d.ts.map +1 -0
  513. package/dist/types/src/client/interfaces/styles/constants.d.ts +6 -0
  514. package/dist/types/src/client/interfaces/styles/constants.d.ts.map +1 -0
  515. package/dist/types/src/client/interfaces/styles/index.d.ts +2 -0
  516. package/dist/types/src/client/interfaces/styles/index.d.ts.map +1 -0
  517. package/dist/types/src/constants/anchor.d.ts +3 -0
  518. package/dist/types/src/constants/anchor.d.ts.map +1 -0
  519. package/dist/types/src/constants/cache-keys.d.ts +14 -0
  520. package/dist/types/src/constants/cache-keys.d.ts.map +1 -0
  521. package/dist/types/src/constants/index.d.ts +6 -0
  522. package/dist/types/src/constants/index.d.ts.map +1 -0
  523. package/dist/types/src/constants/keys/auth.d.ts +28 -0
  524. package/dist/types/src/constants/keys/auth.d.ts.map +1 -0
  525. package/dist/types/src/constants/keys/email.d.ts +13 -0
  526. package/dist/types/src/constants/keys/email.d.ts.map +1 -0
  527. package/dist/types/src/constants/keys/index.d.ts +207 -0
  528. package/dist/types/src/constants/keys/index.d.ts.map +1 -0
  529. package/dist/types/src/constants/keys/main.d.ts +28 -0
  530. package/dist/types/src/constants/keys/main.d.ts.map +1 -0
  531. package/dist/types/src/constants/keys/resources.d.ts +34 -0
  532. package/dist/types/src/constants/keys/resources.d.ts.map +1 -0
  533. package/dist/types/src/constants/keys/ui.d.ts +106 -0
  534. package/dist/types/src/constants/keys/ui.d.ts.map +1 -0
  535. package/dist/types/src/constants/paths/auth.d.ts +21 -0
  536. package/dist/types/src/constants/paths/auth.d.ts.map +1 -0
  537. package/dist/types/src/constants/paths/cms-path.d.ts +2 -0
  538. package/dist/types/src/constants/paths/cms-path.d.ts.map +1 -0
  539. package/dist/types/src/constants/paths/index.d.ts +69 -0
  540. package/dist/types/src/constants/paths/index.d.ts.map +1 -0
  541. package/dist/types/src/constants/paths/main.d.ts +24 -0
  542. package/dist/types/src/constants/paths/main.d.ts.map +1 -0
  543. package/dist/types/src/constants/paths/resources.d.ts +24 -0
  544. package/dist/types/src/constants/paths/resources.d.ts.map +1 -0
  545. package/dist/types/src/constants/redirect-paths.d.ts +3 -0
  546. package/dist/types/src/constants/redirect-paths.d.ts.map +1 -0
  547. package/dist/types/src/domain/index.d.ts +4 -0
  548. package/dist/types/src/domain/index.d.ts.map +1 -0
  549. package/dist/types/src/domain/item.d.ts +7 -0
  550. package/dist/types/src/domain/item.d.ts.map +1 -0
  551. package/dist/types/src/domain/resources/admin/base.d.ts +14 -0
  552. package/dist/types/src/domain/resources/admin/base.d.ts.map +1 -0
  553. package/dist/types/src/domain/resources/admin/card.d.ts +6 -0
  554. package/dist/types/src/domain/resources/admin/card.d.ts.map +1 -0
  555. package/dist/types/src/domain/resources/admin/constants.d.ts +7 -0
  556. package/dist/types/src/domain/resources/admin/constants.d.ts.map +1 -0
  557. package/dist/types/src/domain/resources/admin/full.d.ts +14 -0
  558. package/dist/types/src/domain/resources/admin/full.d.ts.map +1 -0
  559. package/dist/types/src/domain/resources/admin/index.d.ts +7 -0
  560. package/dist/types/src/domain/resources/admin/index.d.ts.map +1 -0
  561. package/dist/types/src/domain/resources/admin/props.d.ts +7 -0
  562. package/dist/types/src/domain/resources/admin/props.d.ts.map +1 -0
  563. package/dist/types/src/domain/resources/admin/translation.d.ts +18 -0
  564. package/dist/types/src/domain/resources/admin/translation.d.ts.map +1 -0
  565. package/dist/types/src/domain/resources/admin-refresh-token/base.d.ts +12 -0
  566. package/dist/types/src/domain/resources/admin-refresh-token/base.d.ts.map +1 -0
  567. package/dist/types/src/domain/resources/admin-refresh-token/index.d.ts +3 -0
  568. package/dist/types/src/domain/resources/admin-refresh-token/index.d.ts.map +1 -0
  569. package/dist/types/src/domain/resources/admin-refresh-token/props.d.ts +15 -0
  570. package/dist/types/src/domain/resources/admin-refresh-token/props.d.ts.map +1 -0
  571. package/dist/types/src/domain/resources/constants.d.ts +7 -0
  572. package/dist/types/src/domain/resources/constants.d.ts.map +1 -0
  573. package/dist/types/src/domain/resources/file/base.d.ts +20 -0
  574. package/dist/types/src/domain/resources/file/base.d.ts.map +1 -0
  575. package/dist/types/src/domain/resources/file/card.d.ts +6 -0
  576. package/dist/types/src/domain/resources/file/card.d.ts.map +1 -0
  577. package/dist/types/src/domain/resources/file/full.d.ts +19 -0
  578. package/dist/types/src/domain/resources/file/full.d.ts.map +1 -0
  579. package/dist/types/src/domain/resources/file/index.d.ts +7 -0
  580. package/dist/types/src/domain/resources/file/index.d.ts.map +1 -0
  581. package/dist/types/src/domain/resources/file/props.d.ts +10 -0
  582. package/dist/types/src/domain/resources/file/props.d.ts.map +1 -0
  583. package/dist/types/src/domain/resources/file/translation.d.ts +11 -0
  584. package/dist/types/src/domain/resources/file/translation.d.ts.map +1 -0
  585. package/dist/types/src/domain/resources/file/utils/index.d.ts +2 -0
  586. package/dist/types/src/domain/resources/file/utils/index.d.ts.map +1 -0
  587. package/dist/types/src/domain/resources/file/utils/is-file-locked.d.ts +4 -0
  588. package/dist/types/src/domain/resources/file/utils/is-file-locked.d.ts.map +1 -0
  589. package/dist/types/src/domain/resources/folder/base.d.ts +10 -0
  590. package/dist/types/src/domain/resources/folder/base.d.ts.map +1 -0
  591. package/dist/types/src/domain/resources/folder/full.d.ts +11 -0
  592. package/dist/types/src/domain/resources/folder/full.d.ts.map +1 -0
  593. package/dist/types/src/domain/resources/folder/index.d.ts +4 -0
  594. package/dist/types/src/domain/resources/folder/index.d.ts.map +1 -0
  595. package/dist/types/src/domain/resources/folder/utils/file-manager-double-click.d.ts +4 -0
  596. package/dist/types/src/domain/resources/folder/utils/file-manager-double-click.d.ts.map +1 -0
  597. package/dist/types/src/domain/resources/folder/utils/index.d.ts +4 -0
  598. package/dist/types/src/domain/resources/folder/utils/index.d.ts.map +1 -0
  599. package/dist/types/src/domain/resources/folder/utils/is-folder-locked.d.ts +4 -0
  600. package/dist/types/src/domain/resources/folder/utils/is-folder-locked.d.ts.map +1 -0
  601. package/dist/types/src/domain/resources/folder/utils/normalize-folder-key.d.ts +6 -0
  602. package/dist/types/src/domain/resources/folder/utils/normalize-folder-key.d.ts.map +1 -0
  603. package/dist/types/src/domain/resources/index.d.ts +8 -0
  604. package/dist/types/src/domain/resources/index.d.ts.map +1 -0
  605. package/dist/types/src/domain/resources/post/base.d.ts +48 -0
  606. package/dist/types/src/domain/resources/post/base.d.ts.map +1 -0
  607. package/dist/types/src/domain/resources/post/card.d.ts +14 -0
  608. package/dist/types/src/domain/resources/post/card.d.ts.map +1 -0
  609. package/dist/types/src/domain/resources/post/full.d.ts +27 -0
  610. package/dist/types/src/domain/resources/post/full.d.ts.map +1 -0
  611. package/dist/types/src/domain/resources/post/index.d.ts +6 -0
  612. package/dist/types/src/domain/resources/post/index.d.ts.map +1 -0
  613. package/dist/types/src/domain/resources/post/props.d.ts +23 -0
  614. package/dist/types/src/domain/resources/post/props.d.ts.map +1 -0
  615. package/dist/types/src/domain/resources/post/translation.d.ts +34 -0
  616. package/dist/types/src/domain/resources/post/translation.d.ts.map +1 -0
  617. package/dist/types/src/domain/resources/seo-metadata/base.d.ts +36 -0
  618. package/dist/types/src/domain/resources/seo-metadata/base.d.ts.map +1 -0
  619. package/dist/types/src/domain/resources/seo-metadata/index.d.ts +3 -0
  620. package/dist/types/src/domain/resources/seo-metadata/index.d.ts.map +1 -0
  621. package/dist/types/src/domain/resources/seo-metadata/props.d.ts +5 -0
  622. package/dist/types/src/domain/resources/seo-metadata/props.d.ts.map +1 -0
  623. package/dist/types/src/domain/translation.d.ts +7 -0
  624. package/dist/types/src/domain/translation.d.ts.map +1 -0
  625. package/dist/types/src/server/applications/auth/create-auth-use-cases.d.ts +64 -0
  626. package/dist/types/src/server/applications/auth/create-auth-use-cases.d.ts.map +1 -0
  627. package/dist/types/src/server/applications/auth/index.d.ts +2 -0
  628. package/dist/types/src/server/applications/auth/index.d.ts.map +1 -0
  629. package/dist/types/src/server/applications/emails/create-email-verification-email.d.ts +23 -0
  630. package/dist/types/src/server/applications/emails/create-email-verification-email.d.ts.map +1 -0
  631. package/dist/types/src/server/applications/emails/create-forgot-password-email.d.ts +22 -0
  632. package/dist/types/src/server/applications/emails/create-forgot-password-email.d.ts.map +1 -0
  633. package/dist/types/src/server/applications/emails/index.d.ts +3 -0
  634. package/dist/types/src/server/applications/emails/index.d.ts.map +1 -0
  635. package/dist/types/src/server/applications/index.d.ts +3 -0
  636. package/dist/types/src/server/applications/index.d.ts.map +1 -0
  637. package/dist/types/src/server/index.d.ts +5 -0
  638. package/dist/types/src/server/index.d.ts.map +1 -0
  639. package/dist/types/src/server/infrastructure/argon2/argon2.service.d.ts +5 -0
  640. package/dist/types/src/server/infrastructure/argon2/argon2.service.d.ts.map +1 -0
  641. package/dist/types/src/server/infrastructure/argon2/index.d.ts +2 -0
  642. package/dist/types/src/server/infrastructure/argon2/index.d.ts.map +1 -0
  643. package/dist/types/src/server/infrastructure/cache/cache-key-delimiter.d.ts +2 -0
  644. package/dist/types/src/server/infrastructure/cache/cache-key-delimiter.d.ts.map +1 -0
  645. package/dist/types/src/server/infrastructure/cache/create-cache-result.d.ts +10 -0
  646. package/dist/types/src/server/infrastructure/cache/create-cache-result.d.ts.map +1 -0
  647. package/dist/types/src/server/infrastructure/cache/create-cache.d.ts +9 -0
  648. package/dist/types/src/server/infrastructure/cache/create-cache.d.ts.map +1 -0
  649. package/dist/types/src/server/infrastructure/cache/create-ip-rate-limiter.d.ts +13 -0
  650. package/dist/types/src/server/infrastructure/cache/create-ip-rate-limiter.d.ts.map +1 -0
  651. package/dist/types/src/server/infrastructure/cache/index.d.ts +5 -0
  652. package/dist/types/src/server/infrastructure/cache/index.d.ts.map +1 -0
  653. package/dist/types/src/server/infrastructure/cache/normalize-cache-key.d.ts +3 -0
  654. package/dist/types/src/server/infrastructure/cache/normalize-cache-key.d.ts.map +1 -0
  655. package/dist/types/src/server/infrastructure/cookie/cookie.service.d.ts +27 -0
  656. package/dist/types/src/server/infrastructure/cookie/cookie.service.d.ts.map +1 -0
  657. package/dist/types/src/server/infrastructure/cookie/index.d.ts +2 -0
  658. package/dist/types/src/server/infrastructure/cookie/index.d.ts.map +1 -0
  659. package/dist/types/src/server/infrastructure/crypto/crypto.service.d.ts +20 -0
  660. package/dist/types/src/server/infrastructure/crypto/crypto.service.d.ts.map +1 -0
  661. package/dist/types/src/server/infrastructure/crypto/index.d.ts +2 -0
  662. package/dist/types/src/server/infrastructure/crypto/index.d.ts.map +1 -0
  663. package/dist/types/src/server/infrastructure/database/admin/command/create-admin-command-repository.d.ts +11 -0
  664. package/dist/types/src/server/infrastructure/database/admin/command/create-admin-command-repository.d.ts.map +1 -0
  665. package/dist/types/src/server/infrastructure/database/admin/command/index.d.ts +2 -0
  666. package/dist/types/src/server/infrastructure/database/admin/command/index.d.ts.map +1 -0
  667. package/dist/types/src/server/infrastructure/database/admin/command/types.d.ts +39 -0
  668. package/dist/types/src/server/infrastructure/database/admin/command/types.d.ts.map +1 -0
  669. package/dist/types/src/server/infrastructure/database/admin/include.d.ts +11 -0
  670. package/dist/types/src/server/infrastructure/database/admin/include.d.ts.map +1 -0
  671. package/dist/types/src/server/infrastructure/database/admin/index.d.ts +3 -0
  672. package/dist/types/src/server/infrastructure/database/admin/index.d.ts.map +1 -0
  673. package/dist/types/src/server/infrastructure/database/admin/query/create-admin-query-repository.d.ts +14 -0
  674. package/dist/types/src/server/infrastructure/database/admin/query/create-admin-query-repository.d.ts.map +1 -0
  675. package/dist/types/src/server/infrastructure/database/admin/query/index.d.ts +2 -0
  676. package/dist/types/src/server/infrastructure/database/admin/query/index.d.ts.map +1 -0
  677. package/dist/types/src/server/infrastructure/database/admin/query/types.d.ts +14 -0
  678. package/dist/types/src/server/infrastructure/database/admin/query/types.d.ts.map +1 -0
  679. package/dist/types/src/server/infrastructure/database/admin-refresh-token/command/create-admin-refresh-token-command-repository.d.ts +9 -0
  680. package/dist/types/src/server/infrastructure/database/admin-refresh-token/command/create-admin-refresh-token-command-repository.d.ts.map +1 -0
  681. package/dist/types/src/server/infrastructure/database/admin-refresh-token/command/index.d.ts +2 -0
  682. package/dist/types/src/server/infrastructure/database/admin-refresh-token/command/index.d.ts.map +1 -0
  683. package/dist/types/src/server/infrastructure/database/admin-refresh-token/command/types.d.ts +14 -0
  684. package/dist/types/src/server/infrastructure/database/admin-refresh-token/command/types.d.ts.map +1 -0
  685. package/dist/types/src/server/infrastructure/database/admin-refresh-token/index.d.ts +3 -0
  686. package/dist/types/src/server/infrastructure/database/admin-refresh-token/index.d.ts.map +1 -0
  687. package/dist/types/src/server/infrastructure/database/admin-refresh-token/query/create-admin-refresh-token-query-repository.d.ts +11 -0
  688. package/dist/types/src/server/infrastructure/database/admin-refresh-token/query/create-admin-refresh-token-query-repository.d.ts.map +1 -0
  689. package/dist/types/src/server/infrastructure/database/admin-refresh-token/query/index.d.ts +2 -0
  690. package/dist/types/src/server/infrastructure/database/admin-refresh-token/query/index.d.ts.map +1 -0
  691. package/dist/types/src/server/infrastructure/database/constants.d.ts +26 -0
  692. package/dist/types/src/server/infrastructure/database/constants.d.ts.map +1 -0
  693. package/dist/types/src/server/infrastructure/database/file/command/create-file-command-repository.d.ts +21 -0
  694. package/dist/types/src/server/infrastructure/database/file/command/create-file-command-repository.d.ts.map +1 -0
  695. package/dist/types/src/server/infrastructure/database/file/command/index.d.ts +2 -0
  696. package/dist/types/src/server/infrastructure/database/file/command/index.d.ts.map +1 -0
  697. package/dist/types/src/server/infrastructure/database/file/command/types.d.ts +38 -0
  698. package/dist/types/src/server/infrastructure/database/file/command/types.d.ts.map +1 -0
  699. package/dist/types/src/server/infrastructure/database/file/include.d.ts +14 -0
  700. package/dist/types/src/server/infrastructure/database/file/include.d.ts.map +1 -0
  701. package/dist/types/src/server/infrastructure/database/file/index.d.ts +3 -0
  702. package/dist/types/src/server/infrastructure/database/file/index.d.ts.map +1 -0
  703. package/dist/types/src/server/infrastructure/database/file/query/create-file-query-repository.d.ts +16 -0
  704. package/dist/types/src/server/infrastructure/database/file/query/create-file-query-repository.d.ts.map +1 -0
  705. package/dist/types/src/server/infrastructure/database/file/query/index.d.ts +2 -0
  706. package/dist/types/src/server/infrastructure/database/file/query/index.d.ts.map +1 -0
  707. package/dist/types/src/server/infrastructure/database/file/query/types.d.ts +13 -0
  708. package/dist/types/src/server/infrastructure/database/file/query/types.d.ts.map +1 -0
  709. package/dist/types/src/server/infrastructure/database/folder/command/create-folder-command-repository.d.ts +11 -0
  710. package/dist/types/src/server/infrastructure/database/folder/command/create-folder-command-repository.d.ts.map +1 -0
  711. package/dist/types/src/server/infrastructure/database/folder/command/index.d.ts +2 -0
  712. package/dist/types/src/server/infrastructure/database/folder/command/index.d.ts.map +1 -0
  713. package/dist/types/src/server/infrastructure/database/folder/command/types.d.ts +13 -0
  714. package/dist/types/src/server/infrastructure/database/folder/command/types.d.ts.map +1 -0
  715. package/dist/types/src/server/infrastructure/database/folder/include.d.ts +11 -0
  716. package/dist/types/src/server/infrastructure/database/folder/include.d.ts.map +1 -0
  717. package/dist/types/src/server/infrastructure/database/folder/index.d.ts +3 -0
  718. package/dist/types/src/server/infrastructure/database/folder/index.d.ts.map +1 -0
  719. package/dist/types/src/server/infrastructure/database/folder/query/create-folder-query-repository.d.ts +11 -0
  720. package/dist/types/src/server/infrastructure/database/folder/query/create-folder-query-repository.d.ts.map +1 -0
  721. package/dist/types/src/server/infrastructure/database/folder/query/index.d.ts +2 -0
  722. package/dist/types/src/server/infrastructure/database/folder/query/index.d.ts.map +1 -0
  723. package/dist/types/src/server/infrastructure/database/folder/query/types.d.ts +12 -0
  724. package/dist/types/src/server/infrastructure/database/folder/query/types.d.ts.map +1 -0
  725. package/dist/types/src/server/infrastructure/database/index.d.ts +8 -0
  726. package/dist/types/src/server/infrastructure/database/index.d.ts.map +1 -0
  727. package/dist/types/src/server/infrastructure/database/post/command/create-post-command-repository.d.ts +11 -0
  728. package/dist/types/src/server/infrastructure/database/post/command/create-post-command-repository.d.ts.map +1 -0
  729. package/dist/types/src/server/infrastructure/database/post/command/index.d.ts +2 -0
  730. package/dist/types/src/server/infrastructure/database/post/command/index.d.ts.map +1 -0
  731. package/dist/types/src/server/infrastructure/database/post/command/types.d.ts +154 -0
  732. package/dist/types/src/server/infrastructure/database/post/command/types.d.ts.map +1 -0
  733. package/dist/types/src/server/infrastructure/database/post/include.d.ts +172 -0
  734. package/dist/types/src/server/infrastructure/database/post/include.d.ts.map +1 -0
  735. package/dist/types/src/server/infrastructure/database/post/index.d.ts +3 -0
  736. package/dist/types/src/server/infrastructure/database/post/index.d.ts.map +1 -0
  737. package/dist/types/src/server/infrastructure/database/post/query/create-post-query-repository.d.ts +23 -0
  738. package/dist/types/src/server/infrastructure/database/post/query/create-post-query-repository.d.ts.map +1 -0
  739. package/dist/types/src/server/infrastructure/database/post/query/index.d.ts +2 -0
  740. package/dist/types/src/server/infrastructure/database/post/query/index.d.ts.map +1 -0
  741. package/dist/types/src/server/infrastructure/database/post/query/types.d.ts +41 -0
  742. package/dist/types/src/server/infrastructure/database/post/query/types.d.ts.map +1 -0
  743. package/dist/types/src/server/infrastructure/database/seo-metadata/command/create-seo-metadata-command-repository.d.ts +6 -0
  744. package/dist/types/src/server/infrastructure/database/seo-metadata/command/create-seo-metadata-command-repository.d.ts.map +1 -0
  745. package/dist/types/src/server/infrastructure/database/seo-metadata/command/index.d.ts +2 -0
  746. package/dist/types/src/server/infrastructure/database/seo-metadata/command/index.d.ts.map +1 -0
  747. package/dist/types/src/server/infrastructure/database/seo-metadata/command/types.d.ts +34 -0
  748. package/dist/types/src/server/infrastructure/database/seo-metadata/command/types.d.ts.map +1 -0
  749. package/dist/types/src/server/infrastructure/database/seo-metadata/index.d.ts +2 -0
  750. package/dist/types/src/server/infrastructure/database/seo-metadata/index.d.ts.map +1 -0
  751. package/dist/types/src/server/infrastructure/database/utils/build-file-usage.d.ts +19 -0
  752. package/dist/types/src/server/infrastructure/database/utils/build-file-usage.d.ts.map +1 -0
  753. package/dist/types/src/server/infrastructure/database/utils/connect.d.ts +28 -0
  754. package/dist/types/src/server/infrastructure/database/utils/connect.d.ts.map +1 -0
  755. package/dist/types/src/server/infrastructure/database/utils/create-pagination.d.ts +5 -0
  756. package/dist/types/src/server/infrastructure/database/utils/create-pagination.d.ts.map +1 -0
  757. package/dist/types/src/server/infrastructure/database/utils/create-search.d.ts +28 -0
  758. package/dist/types/src/server/infrastructure/database/utils/create-search.d.ts.map +1 -0
  759. package/dist/types/src/server/infrastructure/email/create-render-email-template.d.ts +8 -0
  760. package/dist/types/src/server/infrastructure/email/create-render-email-template.d.ts.map +1 -0
  761. package/dist/types/src/server/infrastructure/email/create-send-email.d.ts +17 -0
  762. package/dist/types/src/server/infrastructure/email/create-send-email.d.ts.map +1 -0
  763. package/dist/types/src/server/infrastructure/email/create-transporter.d.ts +8 -0
  764. package/dist/types/src/server/infrastructure/email/create-transporter.d.ts.map +1 -0
  765. package/dist/types/src/server/infrastructure/email/index.d.ts +4 -0
  766. package/dist/types/src/server/infrastructure/email/index.d.ts.map +1 -0
  767. package/dist/types/src/server/infrastructure/index.d.ts +9 -0
  768. package/dist/types/src/server/infrastructure/index.d.ts.map +1 -0
  769. package/dist/types/src/server/infrastructure/jwt/index.d.ts +2 -0
  770. package/dist/types/src/server/infrastructure/jwt/index.d.ts.map +1 -0
  771. package/dist/types/src/server/infrastructure/jwt/jwt.service.d.ts +19 -0
  772. package/dist/types/src/server/infrastructure/jwt/jwt.service.d.ts.map +1 -0
  773. package/dist/types/src/server/infrastructure/zod/create-zod.d.ts +21 -0
  774. package/dist/types/src/server/infrastructure/zod/create-zod.d.ts.map +1 -0
  775. package/dist/types/src/server/infrastructure/zod/index.d.ts +4 -0
  776. package/dist/types/src/server/infrastructure/zod/index.d.ts.map +1 -0
  777. package/dist/types/src/server/infrastructure/zod/rules/bcp47.d.ts +2 -0
  778. package/dist/types/src/server/infrastructure/zod/rules/bcp47.d.ts.map +1 -0
  779. package/dist/types/src/server/infrastructure/zod/rules/exist.d.ts +7 -0
  780. package/dist/types/src/server/infrastructure/zod/rules/exist.d.ts.map +1 -0
  781. package/dist/types/src/server/infrastructure/zod/rules/index.d.ts +3 -0
  782. package/dist/types/src/server/infrastructure/zod/rules/index.d.ts.map +1 -0
  783. package/dist/types/src/server/infrastructure/zod/rules/og-locale.d.ts +2 -0
  784. package/dist/types/src/server/infrastructure/zod/rules/og-locale.d.ts.map +1 -0
  785. package/dist/types/src/server/infrastructure/zod/rules/unique.d.ts +15 -0
  786. package/dist/types/src/server/infrastructure/zod/rules/unique.d.ts.map +1 -0
  787. package/dist/types/src/server/infrastructure/zod/schemas/file.d.ts +18 -0
  788. package/dist/types/src/server/infrastructure/zod/schemas/file.d.ts.map +1 -0
  789. package/dist/types/src/server/infrastructure/zod/schemas/index.d.ts +4 -0
  790. package/dist/types/src/server/infrastructure/zod/schemas/index.d.ts.map +1 -0
  791. package/dist/types/src/server/infrastructure/zod/schemas/schemas.d.ts +35 -0
  792. package/dist/types/src/server/infrastructure/zod/schemas/schemas.d.ts.map +1 -0
  793. package/dist/types/src/server/infrastructure/zod/schemas/toc-item.d.ts +9 -0
  794. package/dist/types/src/server/infrastructure/zod/schemas/toc-item.d.ts.map +1 -0
  795. package/dist/types/src/server/interfaces/actions/action-context.d.ts +53 -0
  796. package/dist/types/src/server/interfaces/actions/action-context.d.ts.map +1 -0
  797. package/dist/types/src/server/interfaces/actions/auth/change-password/change-password-validator.d.ts +7 -0
  798. package/dist/types/src/server/interfaces/actions/auth/change-password/change-password-validator.d.ts.map +1 -0
  799. package/dist/types/src/server/interfaces/actions/auth/change-password/create-change-password-action.d.ts +8 -0
  800. package/dist/types/src/server/interfaces/actions/auth/change-password/create-change-password-action.d.ts.map +1 -0
  801. package/dist/types/src/server/interfaces/actions/auth/change-password/index.d.ts +2 -0
  802. package/dist/types/src/server/interfaces/actions/auth/change-password/index.d.ts.map +1 -0
  803. package/dist/types/src/server/interfaces/actions/auth/email-unverifired/create-email-unverifired-action.d.ts +8 -0
  804. package/dist/types/src/server/interfaces/actions/auth/email-unverifired/create-email-unverifired-action.d.ts.map +1 -0
  805. package/dist/types/src/server/interfaces/actions/auth/email-unverifired/email-unverifired-validator.d.ts +5 -0
  806. package/dist/types/src/server/interfaces/actions/auth/email-unverifired/email-unverifired-validator.d.ts.map +1 -0
  807. package/dist/types/src/server/interfaces/actions/auth/email-unverifired/index.d.ts +2 -0
  808. package/dist/types/src/server/interfaces/actions/auth/email-unverifired/index.d.ts.map +1 -0
  809. package/dist/types/src/server/interfaces/actions/auth/forgot-password/create-forgot-password-action.d.ts +8 -0
  810. package/dist/types/src/server/interfaces/actions/auth/forgot-password/create-forgot-password-action.d.ts.map +1 -0
  811. package/dist/types/src/server/interfaces/actions/auth/forgot-password/forgot-password-validator.d.ts +5 -0
  812. package/dist/types/src/server/interfaces/actions/auth/forgot-password/forgot-password-validator.d.ts.map +1 -0
  813. package/dist/types/src/server/interfaces/actions/auth/forgot-password/index.d.ts +2 -0
  814. package/dist/types/src/server/interfaces/actions/auth/forgot-password/index.d.ts.map +1 -0
  815. package/dist/types/src/server/interfaces/actions/auth/index.d.ts +9 -0
  816. package/dist/types/src/server/interfaces/actions/auth/index.d.ts.map +1 -0
  817. package/dist/types/src/server/interfaces/actions/auth/reset-password/create-reset-password-action.d.ts +8 -0
  818. package/dist/types/src/server/interfaces/actions/auth/reset-password/create-reset-password-action.d.ts.map +1 -0
  819. package/dist/types/src/server/interfaces/actions/auth/reset-password/index.d.ts +2 -0
  820. package/dist/types/src/server/interfaces/actions/auth/reset-password/index.d.ts.map +1 -0
  821. package/dist/types/src/server/interfaces/actions/auth/reset-password/reset-password-validator.d.ts +7 -0
  822. package/dist/types/src/server/interfaces/actions/auth/reset-password/reset-password-validator.d.ts.map +1 -0
  823. package/dist/types/src/server/interfaces/actions/auth/sign-in/create-sign-in-action.d.ts +12 -0
  824. package/dist/types/src/server/interfaces/actions/auth/sign-in/create-sign-in-action.d.ts.map +1 -0
  825. package/dist/types/src/server/interfaces/actions/auth/sign-in/index.d.ts +2 -0
  826. package/dist/types/src/server/interfaces/actions/auth/sign-in/index.d.ts.map +1 -0
  827. package/dist/types/src/server/interfaces/actions/auth/sign-in/sign-in-validator.d.ts +8 -0
  828. package/dist/types/src/server/interfaces/actions/auth/sign-in/sign-in-validator.d.ts.map +1 -0
  829. package/dist/types/src/server/interfaces/actions/auth/sign-out/create-sign-out-action.d.ts +3 -0
  830. package/dist/types/src/server/interfaces/actions/auth/sign-out/create-sign-out-action.d.ts.map +1 -0
  831. package/dist/types/src/server/interfaces/actions/auth/sign-out/index.d.ts +2 -0
  832. package/dist/types/src/server/interfaces/actions/auth/sign-out/index.d.ts.map +1 -0
  833. package/dist/types/src/server/interfaces/actions/auth/verify/create-verify-action.d.ts +5 -0
  834. package/dist/types/src/server/interfaces/actions/auth/verify/create-verify-action.d.ts.map +1 -0
  835. package/dist/types/src/server/interfaces/actions/auth/verify/index.d.ts +2 -0
  836. package/dist/types/src/server/interfaces/actions/auth/verify/index.d.ts.map +1 -0
  837. package/dist/types/src/server/interfaces/actions/auth/verify-email/create-verify-email-action.d.ts +10 -0
  838. package/dist/types/src/server/interfaces/actions/auth/verify-email/create-verify-email-action.d.ts.map +1 -0
  839. package/dist/types/src/server/interfaces/actions/auth/verify-email/index.d.ts +2 -0
  840. package/dist/types/src/server/interfaces/actions/auth/verify-email/index.d.ts.map +1 -0
  841. package/dist/types/src/server/interfaces/actions/auth/verify-email/verify-email-validator.d.ts +6 -0
  842. package/dist/types/src/server/interfaces/actions/auth/verify-email/verify-email-validator.d.ts.map +1 -0
  843. package/dist/types/src/server/interfaces/actions/index.d.ts +4 -0
  844. package/dist/types/src/server/interfaces/actions/index.d.ts.map +1 -0
  845. package/dist/types/src/server/interfaces/actions/resources/admin/commands/create/admin-create-validator.d.ts +49 -0
  846. package/dist/types/src/server/interfaces/actions/resources/admin/commands/create/admin-create-validator.d.ts.map +1 -0
  847. package/dist/types/src/server/interfaces/actions/resources/admin/commands/create/create-admin-create-action.d.ts +10 -0
  848. package/dist/types/src/server/interfaces/actions/resources/admin/commands/create/create-admin-create-action.d.ts.map +1 -0
  849. package/dist/types/src/server/interfaces/actions/resources/admin/commands/delete/create-admin-delete-action.d.ts +5 -0
  850. package/dist/types/src/server/interfaces/actions/resources/admin/commands/delete/create-admin-delete-action.d.ts.map +1 -0
  851. package/dist/types/src/server/interfaces/actions/resources/admin/commands/index.d.ts +4 -0
  852. package/dist/types/src/server/interfaces/actions/resources/admin/commands/index.d.ts.map +1 -0
  853. package/dist/types/src/server/interfaces/actions/resources/admin/commands/update/admin-update-validator.d.ts +48 -0
  854. package/dist/types/src/server/interfaces/actions/resources/admin/commands/update/admin-update-validator.d.ts.map +1 -0
  855. package/dist/types/src/server/interfaces/actions/resources/admin/commands/update/create-admin-update-action.d.ts +11 -0
  856. package/dist/types/src/server/interfaces/actions/resources/admin/commands/update/create-admin-update-action.d.ts.map +1 -0
  857. package/dist/types/src/server/interfaces/actions/resources/admin/index.d.ts +3 -0
  858. package/dist/types/src/server/interfaces/actions/resources/admin/index.d.ts.map +1 -0
  859. package/dist/types/src/server/interfaces/actions/resources/admin/queries/create-admin-find-full-action.d.ts +8 -0
  860. package/dist/types/src/server/interfaces/actions/resources/admin/queries/create-admin-find-full-action.d.ts.map +1 -0
  861. package/dist/types/src/server/interfaces/actions/resources/admin/queries/create-admin-find-list-cards-action.d.ts +11 -0
  862. package/dist/types/src/server/interfaces/actions/resources/admin/queries/create-admin-find-list-cards-action.d.ts.map +1 -0
  863. package/dist/types/src/server/interfaces/actions/resources/admin/queries/index.d.ts +3 -0
  864. package/dist/types/src/server/interfaces/actions/resources/admin/queries/index.d.ts.map +1 -0
  865. package/dist/types/src/server/interfaces/actions/resources/admin-refresh-token/commands/delete/create-admin-refresh-token-delete-action.d.ts +3 -0
  866. package/dist/types/src/server/interfaces/actions/resources/admin-refresh-token/commands/delete/create-admin-refresh-token-delete-action.d.ts.map +1 -0
  867. package/dist/types/src/server/interfaces/actions/resources/admin-refresh-token/commands/index.d.ts +2 -0
  868. package/dist/types/src/server/interfaces/actions/resources/admin-refresh-token/commands/index.d.ts.map +1 -0
  869. package/dist/types/src/server/interfaces/actions/resources/admin-refresh-token/index.d.ts +3 -0
  870. package/dist/types/src/server/interfaces/actions/resources/admin-refresh-token/index.d.ts.map +1 -0
  871. package/dist/types/src/server/interfaces/actions/resources/admin-refresh-token/queries/create-admin-refresh-token-find-full-action.d.ts +8 -0
  872. package/dist/types/src/server/interfaces/actions/resources/admin-refresh-token/queries/create-admin-refresh-token-find-full-action.d.ts.map +1 -0
  873. package/dist/types/src/server/interfaces/actions/resources/admin-refresh-token/queries/index.d.ts +2 -0
  874. package/dist/types/src/server/interfaces/actions/resources/admin-refresh-token/queries/index.d.ts.map +1 -0
  875. package/dist/types/src/server/interfaces/actions/resources/file/commands/create/create-file-create-action.d.ts +13 -0
  876. package/dist/types/src/server/interfaces/actions/resources/file/commands/create/create-file-create-action.d.ts.map +1 -0
  877. package/dist/types/src/server/interfaces/actions/resources/file/commands/create/file-create-validator.d.ts +31 -0
  878. package/dist/types/src/server/interfaces/actions/resources/file/commands/create/file-create-validator.d.ts.map +1 -0
  879. package/dist/types/src/server/interfaces/actions/resources/file/commands/create-many/create-file-create-many-action.d.ts +10 -0
  880. package/dist/types/src/server/interfaces/actions/resources/file/commands/create-many/create-file-create-many-action.d.ts.map +1 -0
  881. package/dist/types/src/server/interfaces/actions/resources/file/commands/create-many/file-create-many-validator.d.ts +64 -0
  882. package/dist/types/src/server/interfaces/actions/resources/file/commands/create-many/file-create-many-validator.d.ts.map +1 -0
  883. package/dist/types/src/server/interfaces/actions/resources/file/commands/index.d.ts +8 -0
  884. package/dist/types/src/server/interfaces/actions/resources/file/commands/index.d.ts.map +1 -0
  885. package/dist/types/src/server/interfaces/actions/resources/file/commands/purge-many/create-file-purge-many-action.d.ts +7 -0
  886. package/dist/types/src/server/interfaces/actions/resources/file/commands/purge-many/create-file-purge-many-action.d.ts.map +1 -0
  887. package/dist/types/src/server/interfaces/actions/resources/file/commands/purge-many/file-purge-many-validator.d.ts +5 -0
  888. package/dist/types/src/server/interfaces/actions/resources/file/commands/purge-many/file-purge-many-validator.d.ts.map +1 -0
  889. package/dist/types/src/server/interfaces/actions/resources/file/commands/restore-many/create-file-restore-many-action.d.ts +7 -0
  890. package/dist/types/src/server/interfaces/actions/resources/file/commands/restore-many/create-file-restore-many-action.d.ts.map +1 -0
  891. package/dist/types/src/server/interfaces/actions/resources/file/commands/restore-many/file-create-restore-validator.d.ts +5 -0
  892. package/dist/types/src/server/interfaces/actions/resources/file/commands/restore-many/file-create-restore-validator.d.ts.map +1 -0
  893. package/dist/types/src/server/interfaces/actions/resources/file/commands/soft-delete/create-file-soft-delete-action.d.ts +5 -0
  894. package/dist/types/src/server/interfaces/actions/resources/file/commands/soft-delete/create-file-soft-delete-action.d.ts.map +1 -0
  895. package/dist/types/src/server/interfaces/actions/resources/file/commands/soft-delete-many/create-file-soft-delete-many-action.d.ts +7 -0
  896. package/dist/types/src/server/interfaces/actions/resources/file/commands/soft-delete-many/create-file-soft-delete-many-action.d.ts.map +1 -0
  897. package/dist/types/src/server/interfaces/actions/resources/file/commands/soft-delete-many/file-soft-delete-many-validator.d.ts +5 -0
  898. package/dist/types/src/server/interfaces/actions/resources/file/commands/soft-delete-many/file-soft-delete-many-validator.d.ts.map +1 -0
  899. package/dist/types/src/server/interfaces/actions/resources/file/commands/update/create-file-update-action.d.ts +14 -0
  900. package/dist/types/src/server/interfaces/actions/resources/file/commands/update/create-file-update-action.d.ts.map +1 -0
  901. package/dist/types/src/server/interfaces/actions/resources/file/commands/update/file-update-validator.d.ts +30 -0
  902. package/dist/types/src/server/interfaces/actions/resources/file/commands/update/file-update-validator.d.ts.map +1 -0
  903. package/dist/types/src/server/interfaces/actions/resources/file/index.d.ts +3 -0
  904. package/dist/types/src/server/interfaces/actions/resources/file/index.d.ts.map +1 -0
  905. package/dist/types/src/server/interfaces/actions/resources/file/querires/create-file-find-full-action.d.ts +7 -0
  906. package/dist/types/src/server/interfaces/actions/resources/file/querires/create-file-find-full-action.d.ts.map +1 -0
  907. package/dist/types/src/server/interfaces/actions/resources/file/querires/create-file-find-list-cards-action.d.ts +16 -0
  908. package/dist/types/src/server/interfaces/actions/resources/file/querires/create-file-find-list-cards-action.d.ts.map +1 -0
  909. package/dist/types/src/server/interfaces/actions/resources/file/querires/index.d.ts +3 -0
  910. package/dist/types/src/server/interfaces/actions/resources/file/querires/index.d.ts.map +1 -0
  911. package/dist/types/src/server/interfaces/actions/resources/folder/commands/create/create-folder-create-action.d.ts +13 -0
  912. package/dist/types/src/server/interfaces/actions/resources/folder/commands/create/create-folder-create-action.d.ts.map +1 -0
  913. package/dist/types/src/server/interfaces/actions/resources/folder/commands/create/folder-create-validator.d.ts +9 -0
  914. package/dist/types/src/server/interfaces/actions/resources/folder/commands/create/folder-create-validator.d.ts.map +1 -0
  915. package/dist/types/src/server/interfaces/actions/resources/folder/commands/delete/create-folder-delete-action.d.ts +5 -0
  916. package/dist/types/src/server/interfaces/actions/resources/folder/commands/delete/create-folder-delete-action.d.ts.map +1 -0
  917. package/dist/types/src/server/interfaces/actions/resources/folder/commands/index.d.ts +4 -0
  918. package/dist/types/src/server/interfaces/actions/resources/folder/commands/index.d.ts.map +1 -0
  919. package/dist/types/src/server/interfaces/actions/resources/folder/commands/update/create-folder-update-action.d.ts +14 -0
  920. package/dist/types/src/server/interfaces/actions/resources/folder/commands/update/create-folder-update-action.d.ts.map +1 -0
  921. package/dist/types/src/server/interfaces/actions/resources/folder/commands/update/folder-update-validator.d.ts +9 -0
  922. package/dist/types/src/server/interfaces/actions/resources/folder/commands/update/folder-update-validator.d.ts.map +1 -0
  923. package/dist/types/src/server/interfaces/actions/resources/folder/index.d.ts +3 -0
  924. package/dist/types/src/server/interfaces/actions/resources/folder/index.d.ts.map +1 -0
  925. package/dist/types/src/server/interfaces/actions/resources/folder/queries/create-folder-find-full-action.d.ts +9 -0
  926. package/dist/types/src/server/interfaces/actions/resources/folder/queries/create-folder-find-full-action.d.ts.map +1 -0
  927. package/dist/types/src/server/interfaces/actions/resources/folder/queries/create-folder-find-list-cards-action.d.ts +12 -0
  928. package/dist/types/src/server/interfaces/actions/resources/folder/queries/create-folder-find-list-cards-action.d.ts.map +1 -0
  929. package/dist/types/src/server/interfaces/actions/resources/folder/queries/index.d.ts +3 -0
  930. package/dist/types/src/server/interfaces/actions/resources/folder/queries/index.d.ts.map +1 -0
  931. package/dist/types/src/server/interfaces/actions/resources/index.d.ts +7 -0
  932. package/dist/types/src/server/interfaces/actions/resources/index.d.ts.map +1 -0
  933. package/dist/types/src/server/interfaces/actions/resources/post/commands/create/create-post-create-action.d.ts +24 -0
  934. package/dist/types/src/server/interfaces/actions/resources/post/commands/create/create-post-create-action.d.ts.map +1 -0
  935. package/dist/types/src/server/interfaces/actions/resources/post/commands/create/post-create-validator.d.ts +410 -0
  936. package/dist/types/src/server/interfaces/actions/resources/post/commands/create/post-create-validator.d.ts.map +1 -0
  937. package/dist/types/src/server/interfaces/actions/resources/post/commands/delete/create-post-delete-action.d.ts +5 -0
  938. package/dist/types/src/server/interfaces/actions/resources/post/commands/delete/create-post-delete-action.d.ts.map +1 -0
  939. package/dist/types/src/server/interfaces/actions/resources/post/commands/index.d.ts +4 -0
  940. package/dist/types/src/server/interfaces/actions/resources/post/commands/index.d.ts.map +1 -0
  941. package/dist/types/src/server/interfaces/actions/resources/post/commands/update/create-post-update-action.d.ts +25 -0
  942. package/dist/types/src/server/interfaces/actions/resources/post/commands/update/create-post-update-action.d.ts.map +1 -0
  943. package/dist/types/src/server/interfaces/actions/resources/post/commands/update/post-update-validator.d.ts +411 -0
  944. package/dist/types/src/server/interfaces/actions/resources/post/commands/update/post-update-validator.d.ts.map +1 -0
  945. package/dist/types/src/server/interfaces/actions/resources/post/index.d.ts +3 -0
  946. package/dist/types/src/server/interfaces/actions/resources/post/index.d.ts.map +1 -0
  947. package/dist/types/src/server/interfaces/actions/resources/post/queries/create-post-find-action.d.ts +14 -0
  948. package/dist/types/src/server/interfaces/actions/resources/post/queries/create-post-find-action.d.ts.map +1 -0
  949. package/dist/types/src/server/interfaces/actions/resources/post/queries/create-post-find-full-action.d.ts +14 -0
  950. package/dist/types/src/server/interfaces/actions/resources/post/queries/create-post-find-full-action.d.ts.map +1 -0
  951. package/dist/types/src/server/interfaces/actions/resources/post/queries/create-post-find-list-cards-action.d.ts +33 -0
  952. package/dist/types/src/server/interfaces/actions/resources/post/queries/create-post-find-list-cards-action.d.ts.map +1 -0
  953. package/dist/types/src/server/interfaces/actions/resources/post/queries/create-post-find-many-action.d.ts +11 -0
  954. package/dist/types/src/server/interfaces/actions/resources/post/queries/create-post-find-many-action.d.ts.map +1 -0
  955. package/dist/types/src/server/interfaces/actions/resources/post/queries/index.d.ts +5 -0
  956. package/dist/types/src/server/interfaces/actions/resources/post/queries/index.d.ts.map +1 -0
  957. package/dist/types/src/server/interfaces/actions/resources/seo-metadata/commands/index.d.ts +2 -0
  958. package/dist/types/src/server/interfaces/actions/resources/seo-metadata/commands/index.d.ts.map +1 -0
  959. package/dist/types/src/server/interfaces/actions/resources/seo-metadata/commands/upsert/create-seo-metadata-upsert-action.d.ts +8 -0
  960. package/dist/types/src/server/interfaces/actions/resources/seo-metadata/commands/upsert/create-seo-metadata-upsert-action.d.ts.map +1 -0
  961. package/dist/types/src/server/interfaces/actions/resources/seo-metadata/commands/upsert/seo-metadata-upsert-validator.d.ts +126 -0
  962. package/dist/types/src/server/interfaces/actions/resources/seo-metadata/commands/upsert/seo-metadata-upsert-validator.d.ts.map +1 -0
  963. package/dist/types/src/server/interfaces/actions/resources/seo-metadata/index.d.ts +2 -0
  964. package/dist/types/src/server/interfaces/actions/resources/seo-metadata/index.d.ts.map +1 -0
  965. package/dist/types/src/server/interfaces/apis/api-context.d.ts +24 -0
  966. package/dist/types/src/server/interfaces/apis/api-context.d.ts.map +1 -0
  967. package/dist/types/src/server/interfaces/apis/file-upload/file-upload-api.d.ts +13 -0
  968. package/dist/types/src/server/interfaces/apis/file-upload/file-upload-api.d.ts.map +1 -0
  969. package/dist/types/src/server/interfaces/apis/file-upload/index.d.ts +2 -0
  970. package/dist/types/src/server/interfaces/apis/file-upload/index.d.ts.map +1 -0
  971. package/dist/types/src/server/interfaces/apis/file-upload/validator.d.ts +21 -0
  972. package/dist/types/src/server/interfaces/apis/file-upload/validator.d.ts.map +1 -0
  973. package/dist/types/src/server/interfaces/apis/index.d.ts +4 -0
  974. package/dist/types/src/server/interfaces/apis/index.d.ts.map +1 -0
  975. package/dist/types/src/server/interfaces/apis/multi-files-upload/index.d.ts +2 -0
  976. package/dist/types/src/server/interfaces/apis/multi-files-upload/index.d.ts.map +1 -0
  977. package/dist/types/src/server/interfaces/apis/multi-files-upload/multi-files-upload-api.d.ts +24 -0
  978. package/dist/types/src/server/interfaces/apis/multi-files-upload/multi-files-upload-api.d.ts.map +1 -0
  979. package/dist/types/src/server/interfaces/apis/multi-files-upload/validator.d.ts +21 -0
  980. package/dist/types/src/server/interfaces/apis/multi-files-upload/validator.d.ts.map +1 -0
  981. package/dist/types/src/server/interfaces/execution/create-execute-action.d.ts +23 -0
  982. package/dist/types/src/server/interfaces/execution/create-execute-action.d.ts.map +1 -0
  983. package/dist/types/src/server/interfaces/execution/create-execute-api.d.ts +11 -0
  984. package/dist/types/src/server/interfaces/execution/create-execute-api.d.ts.map +1 -0
  985. package/dist/types/src/server/interfaces/execution/create-run-action.d.ts +12 -0
  986. package/dist/types/src/server/interfaces/execution/create-run-action.d.ts.map +1 -0
  987. package/dist/types/src/server/interfaces/execution/index.d.ts +4 -0
  988. package/dist/types/src/server/interfaces/execution/index.d.ts.map +1 -0
  989. package/dist/types/src/server/interfaces/execution/normalize-error.d.ts +10 -0
  990. package/dist/types/src/server/interfaces/execution/normalize-error.d.ts.map +1 -0
  991. package/dist/types/src/server/interfaces/index.d.ts +5 -0
  992. package/dist/types/src/server/interfaces/index.d.ts.map +1 -0
  993. package/dist/types/src/server/interfaces/middlewares/auth/create-auth-middleware.d.ts +17 -0
  994. package/dist/types/src/server/interfaces/middlewares/auth/create-auth-middleware.d.ts.map +1 -0
  995. package/dist/types/src/server/interfaces/middlewares/auth/create-verify-access-token.d.ts +17 -0
  996. package/dist/types/src/server/interfaces/middlewares/auth/create-verify-access-token.d.ts.map +1 -0
  997. package/dist/types/src/server/interfaces/middlewares/auth/create-verify-refresh-token.d.ts +18 -0
  998. package/dist/types/src/server/interfaces/middlewares/auth/create-verify-refresh-token.d.ts.map +1 -0
  999. package/dist/types/src/server/interfaces/middlewares/auth/index.d.ts +4 -0
  1000. package/dist/types/src/server/interfaces/middlewares/auth/index.d.ts.map +1 -0
  1001. package/dist/types/src/server/interfaces/middlewares/index.d.ts +2 -0
  1002. package/dist/types/src/server/interfaces/middlewares/index.d.ts.map +1 -0
  1003. package/dist/types/src/server/server-error.d.ts +18 -0
  1004. package/dist/types/src/server/server-error.d.ts.map +1 -0
  1005. package/dist/types/src/shared/blob-file/classify-file-type.d.ts +2 -0
  1006. package/dist/types/src/shared/blob-file/classify-file-type.d.ts.map +1 -0
  1007. package/dist/types/src/shared/blob-file/format-file-size.d.ts +2 -0
  1008. package/dist/types/src/shared/blob-file/format-file-size.d.ts.map +1 -0
  1009. package/dist/types/src/shared/blob-file/get-media-info/get-audio-info.d.ts +4 -0
  1010. package/dist/types/src/shared/blob-file/get-media-info/get-audio-info.d.ts.map +1 -0
  1011. package/dist/types/src/shared/blob-file/get-media-info/get-image-info.d.ts +5 -0
  1012. package/dist/types/src/shared/blob-file/get-media-info/get-image-info.d.ts.map +1 -0
  1013. package/dist/types/src/shared/blob-file/get-media-info/get-media-info.d.ts +8 -0
  1014. package/dist/types/src/shared/blob-file/get-media-info/get-media-info.d.ts.map +1 -0
  1015. package/dist/types/src/shared/blob-file/get-media-info/get-video-info.d.ts +6 -0
  1016. package/dist/types/src/shared/blob-file/get-media-info/get-video-info.d.ts.map +1 -0
  1017. package/dist/types/src/shared/blob-file/get-media-info/index.d.ts +2 -0
  1018. package/dist/types/src/shared/blob-file/get-media-info/index.d.ts.map +1 -0
  1019. package/dist/types/src/shared/blob-file/index.d.ts +6 -0
  1020. package/dist/types/src/shared/blob-file/index.d.ts.map +1 -0
  1021. package/dist/types/src/shared/blob-file/mime-to-extension.d.ts +2 -0
  1022. package/dist/types/src/shared/blob-file/mime-to-extension.d.ts.map +1 -0
  1023. package/dist/{types-0oS1A2K5.d.ts → types/src/shared/blob-file/types.d.ts} +2 -3
  1024. package/dist/types/src/shared/blob-file/types.d.ts.map +1 -0
  1025. package/dist/types/src/shared/form/index.d.ts +3 -0
  1026. package/dist/types/src/shared/form/index.d.ts.map +1 -0
  1027. package/dist/types/src/shared/form/normalizers/datetime-to-db.d.ts +2 -0
  1028. package/dist/types/src/shared/form/normalizers/datetime-to-db.d.ts.map +1 -0
  1029. package/dist/types/src/shared/form/normalizers/datetime-to-ui.d.ts +2 -0
  1030. package/dist/types/src/shared/form/normalizers/datetime-to-ui.d.ts.map +1 -0
  1031. package/dist/types/src/shared/form/normalizers/index.d.ts +5 -0
  1032. package/dist/types/src/shared/form/normalizers/index.d.ts.map +1 -0
  1033. package/dist/types/src/shared/form/normalizers/json-array-to-db.d.ts +2 -0
  1034. package/dist/types/src/shared/form/normalizers/json-array-to-db.d.ts.map +1 -0
  1035. package/dist/types/src/shared/form/normalizers/json-array-to-ui.d.ts +2 -0
  1036. package/dist/types/src/shared/form/normalizers/json-array-to-ui.d.ts.map +1 -0
  1037. package/dist/{types-BUmWwzpD.d.ts → types/src/shared/form/types.d.ts} +7 -8
  1038. package/dist/types/src/shared/form/types.d.ts.map +1 -0
  1039. package/dist/types/src/shared/index.d.ts +8 -0
  1040. package/dist/types/src/shared/index.d.ts.map +1 -0
  1041. package/dist/types/src/shared/result/index.d.ts +3 -0
  1042. package/dist/types/src/shared/result/index.d.ts.map +1 -0
  1043. package/dist/types/src/shared/result/result.d.ts +23 -0
  1044. package/dist/types/src/shared/result/result.d.ts.map +1 -0
  1045. package/dist/types/src/shared/result/types.d.ts +19 -0
  1046. package/dist/types/src/shared/result/types.d.ts.map +1 -0
  1047. package/dist/types/src/shared/seo-metadata/build-article-metadata.d.ts +8 -0
  1048. package/dist/types/src/shared/seo-metadata/build-article-metadata.d.ts.map +1 -0
  1049. package/dist/types/src/shared/seo-metadata/build-website-metadata.d.ts +7 -0
  1050. package/dist/types/src/shared/seo-metadata/build-website-metadata.d.ts.map +1 -0
  1051. package/dist/types/src/shared/seo-metadata/index.d.ts +5 -0
  1052. package/dist/types/src/shared/seo-metadata/index.d.ts.map +1 -0
  1053. package/dist/types/src/shared/seo-metadata/serialize-json-ld.d.ts +2 -0
  1054. package/dist/types/src/shared/seo-metadata/serialize-json-ld.d.ts.map +1 -0
  1055. package/dist/types/src/shared/seo-metadata/standards.d.ts +5 -0
  1056. package/dist/types/src/shared/seo-metadata/standards.d.ts.map +1 -0
  1057. package/dist/types/src/shared/seo-metadata/types.d.ts +11 -0
  1058. package/dist/types/src/shared/seo-metadata/types.d.ts.map +1 -0
  1059. package/dist/types/src/shared/seo-metadata/utils/build-alternate-map.d.ts +3 -0
  1060. package/dist/types/src/shared/seo-metadata/utils/build-alternate-map.d.ts.map +1 -0
  1061. package/dist/types/src/shared/seo-metadata/utils/build-og-image.d.ts +3 -0
  1062. package/dist/types/src/shared/seo-metadata/utils/build-og-image.d.ts.map +1 -0
  1063. package/dist/types/src/shared/seo-metadata/utils/ensure-og-type.d.ts +3 -0
  1064. package/dist/types/src/shared/seo-metadata/utils/ensure-og-type.d.ts.map +1 -0
  1065. package/dist/types/src/shared/seo-metadata/utils/ensure-twitter-card.d.ts +3 -0
  1066. package/dist/types/src/shared/seo-metadata/utils/ensure-twitter-card.d.ts.map +1 -0
  1067. package/dist/types/src/shared/seo-metadata/utils/sanitize-string-array.d.ts +2 -0
  1068. package/dist/types/src/shared/seo-metadata/utils/sanitize-string-array.d.ts.map +1 -0
  1069. package/dist/types/src/shared/seo-metadata/utils/to-iso-time.d.ts +2 -0
  1070. package/dist/types/src/shared/seo-metadata/utils/to-iso-time.d.ts.map +1 -0
  1071. package/dist/types/src/shared/translation/create-build-translations.d.ts +12 -0
  1072. package/dist/types/src/shared/translation/create-build-translations.d.ts.map +1 -0
  1073. package/dist/types/src/shared/translation/find-translation.d.ts +3 -0
  1074. package/dist/types/src/shared/translation/find-translation.d.ts.map +1 -0
  1075. package/dist/types/src/shared/translation/index.d.ts +3 -0
  1076. package/dist/types/src/shared/translation/index.d.ts.map +1 -0
  1077. package/dist/types/src/shared/units.d.ts +10 -0
  1078. package/dist/types/src/shared/units.d.ts.map +1 -0
  1079. package/dist/types/src/shared/utils/ensure-array.d.ts +2 -0
  1080. package/dist/types/src/shared/utils/ensure-array.d.ts.map +1 -0
  1081. package/dist/types/src/shared/utils/format-date-time.d.ts +2 -0
  1082. package/dist/types/src/shared/utils/format-date-time.d.ts.map +1 -0
  1083. package/dist/types/src/shared/utils/index.d.ts +4 -0
  1084. package/dist/types/src/shared/utils/index.d.ts.map +1 -0
  1085. package/dist/types/src/shared/utils/join-url.d.ts +2 -0
  1086. package/dist/types/src/shared/utils/join-url.d.ts.map +1 -0
  1087. package/dist/types/src/storage/r2/index.d.ts +2 -0
  1088. package/dist/types/src/storage/r2/index.d.ts.map +1 -0
  1089. package/dist/types/src/storage/r2/r2.service.d.ts +11 -0
  1090. package/dist/types/src/storage/r2/r2.service.d.ts.map +1 -0
  1091. package/dist/types/src/storage/sftp/index.d.ts +3 -0
  1092. package/dist/types/src/storage/sftp/index.d.ts.map +1 -0
  1093. package/dist/types/src/storage/sftp/sftp-pool.d.ts +10 -0
  1094. package/dist/types/src/storage/sftp/sftp-pool.d.ts.map +1 -0
  1095. package/dist/types/src/storage/sftp/sftp.service.d.ts +12 -0
  1096. package/dist/types/src/storage/sftp/sftp.service.d.ts.map +1 -0
  1097. package/dist/{types-J25u1G6t.d.ts → types/src/storage/types.d.ts} +3 -5
  1098. package/dist/types/src/storage/types.d.ts.map +1 -0
  1099. package/dist/types/src/storage/utils.d.ts +8 -0
  1100. package/dist/types/src/storage/utils.d.ts.map +1 -0
  1101. package/package.json +16 -6
  1102. package/dist/chunk-5LKI7KHR.js +0 -99
  1103. package/dist/chunk-PXWRSEQ7.js +0 -233
  1104. package/dist/chunk-YLFBYJTE.js +0 -1837
  1105. package/dist/chunk-YYDELEHA.js +0 -511
  1106. package/dist/client/index.d.ts +0 -650
  1107. package/dist/client/index.js +0 -2462
  1108. package/dist/client/shadcn/index.d.ts +0 -110
  1109. package/dist/client/shadcn/index.js +0 -1
  1110. package/dist/create-reset-password-action-C-B3uh5m.d.ts +0 -930
  1111. package/dist/index.d.ts +0 -428
  1112. package/dist/index.js +0 -3
  1113. package/dist/server/index.d.ts +0 -1553
  1114. package/dist/server/index.js +0 -4385
  1115. package/dist/sidebar-CBC8_O5A.d.ts +0 -94
  1116. package/dist/storage/r2/index.d.ts +0 -13
  1117. package/dist/storage/sftp/index.d.ts +0 -20
  1118. package/dist/types-BGsFazJr.d.ts +0 -360
@@ -1,4385 +0,0 @@
1
- import { ADMIN_ROLES, isFileLocked, isFolderLocked, ROOT_FOLDER_ID, ROOT_FOLDER } from '../chunk-5LKI7KHR.js';
2
- import { SIZE, result, datetimeToDb, jsonArrayToDb, mimeToExtension, classifyFileType, TWITTER_CARD_ARRAY, OG_TYPE_ARRAY } from '../chunk-YYDELEHA.js';
3
- import jwt from 'jsonwebtoken';
4
- import argon2 from 'argon2';
5
- import crypto, { timingSafeEqual } from 'crypto';
6
- import KeyvRedis from '@keyv/redis';
7
- import Keyv from 'keyv';
8
- import { z, ZodError } from 'zod';
9
- import nodemailer from 'nodemailer';
10
- import { readFile } from 'fs/promises';
11
- import path from 'path';
12
- import { ulid } from 'ulid';
13
- import { NextResponse } from 'next/server';
14
- import path2 from 'path/posix';
15
-
16
- function createJwtService({
17
- defaultSecret,
18
- ...options
19
- }) {
20
- function sign({
21
- payload = {},
22
- secret = defaultSecret,
23
- expiresIn = 60 * 60
24
- }) {
25
- return jwt.sign(payload, secret, {
26
- algorithm: "HS256",
27
- expiresIn,
28
- ...options
29
- });
30
- }
31
- function verify({
32
- token,
33
- secret = defaultSecret
34
- }) {
35
- const payload = jwt.verify(token, secret, {
36
- algorithms: ["HS256"],
37
- ...options
38
- });
39
- if (typeof payload === "string") {
40
- throw new TypeError("Invalid JWT payload");
41
- }
42
- return payload;
43
- }
44
- return {
45
- sign,
46
- verify
47
- };
48
- }
49
- var DEFAULT_OPTIONS = {
50
- type: argon2.argon2id,
51
- memoryCost: 19456,
52
- // ~19MB
53
- timeCost: 2,
54
- parallelism: 1
55
- };
56
- function createArgon2Service() {
57
- async function hash(password) {
58
- return await argon2.hash(password, DEFAULT_OPTIONS);
59
- }
60
- async function verify(digest, password) {
61
- return await argon2.verify(digest, password);
62
- }
63
- return {
64
- hash,
65
- verify
66
- };
67
- }
68
- function createCryptoService({
69
- defaultSecret
70
- }) {
71
- const SECRET = crypto.createHash("sha256").update(defaultSecret).digest();
72
- const ALGORITHM = "aes-256-gcm";
73
- const IV_LENGTH = 12;
74
- function generateToken() {
75
- return crypto.randomBytes(32).toString("base64url");
76
- }
77
- function hash(value) {
78
- return crypto.createHash("sha256").update(value).digest("hex");
79
- }
80
- function hashBuffer(value) {
81
- return crypto.createHash("sha256").update(value).digest();
82
- }
83
- function encrypt(data) {
84
- const iv = crypto.randomBytes(IV_LENGTH);
85
- const cipher = crypto.createCipheriv(ALGORITHM, SECRET, iv);
86
- const encrypted = Buffer.concat([cipher.update(data), cipher.final()]);
87
- const tag = cipher.getAuthTag();
88
- return [
89
- iv.toString("hex"),
90
- encrypted.toString("hex"),
91
- tag.toString("hex")
92
- ].join(":");
93
- }
94
- function decrypt(data) {
95
- const parts = data.split(":");
96
- if (parts.length !== 3 || !parts.every(Boolean)) {
97
- throw new Error("Invalid encrypted payload");
98
- }
99
- const [ivHex, encryptedHex, tagHex] = parts;
100
- const iv = Buffer.from(ivHex, "hex");
101
- const encrypted = Buffer.from(encryptedHex, "hex");
102
- const tag = Buffer.from(tagHex, "hex");
103
- const decipher = crypto.createDecipheriv(ALGORITHM, SECRET, iv);
104
- decipher.setAuthTag(tag);
105
- const decrypted = Buffer.concat([
106
- decipher.update(encrypted),
107
- decipher.final()
108
- ]);
109
- return decrypted.toString("utf8");
110
- }
111
- function sign({
112
- value,
113
- expireSeconds,
114
- createdAt
115
- }) {
116
- const payload = `${value}|${expireSeconds}|${createdAt ?? Date.now()}`;
117
- const signature = crypto.createHmac("sha256", SECRET).update(payload).digest("hex");
118
- const signed = `${payload}|${signature}`;
119
- return { signed, signature };
120
- }
121
- return {
122
- generateToken,
123
- hash,
124
- hashBuffer,
125
- encrypt,
126
- decrypt,
127
- sign
128
- };
129
- }
130
- var DEFAULT_OPTIONS2 = {
131
- httpOnly: true,
132
- secure: process.env["NODE_ENV"] === "production",
133
- sameSite: "strict",
134
- path: "/"
135
- };
136
- function createCookieService(nextCookies, cryptoService) {
137
- async function set({
138
- name,
139
- value,
140
- expireSeconds
141
- }) {
142
- const cookieStore = await nextCookies();
143
- cookieStore.set(name, value, { ...DEFAULT_OPTIONS2, maxAge: expireSeconds });
144
- }
145
- async function setSignedCookie({
146
- name,
147
- value,
148
- expireSeconds
149
- }) {
150
- const createdAt = Date.now();
151
- const { signed } = cryptoService.sign({
152
- value,
153
- expireSeconds,
154
- createdAt
155
- });
156
- await set({ name, value: signed, expireSeconds });
157
- }
158
- async function get({ name }) {
159
- const cookieStore = await nextCookies();
160
- const cookieValue = cookieStore.get(name)?.value;
161
- return cookieValue;
162
- }
163
- async function getSignedCookie({ name }) {
164
- const signed = await get({ name });
165
- const value = verifySignedCookie({ signed });
166
- return value;
167
- }
168
- function verifySignedCookie({ signed }) {
169
- if (!signed) throw new Error("Invalid cookie");
170
- const parts = signed.split("|");
171
- if (parts.length !== 4) throw new Error("Invalid cookie");
172
- const [value, expireSecondsStr, createdAtStr, signature] = parts;
173
- const expireSeconds = Number.parseInt(expireSecondsStr, 10);
174
- const createdAt = Number.parseInt(createdAtStr, 10);
175
- if (Number.isNaN(expireSeconds) || Number.isNaN(createdAt)) {
176
- throw new TypeError("Invalid cookie");
177
- }
178
- const now = Date.now();
179
- if (now > createdAt + expireSeconds * 1e3) {
180
- throw new Error("Cookie expired");
181
- }
182
- const { signature: generatedSignature } = cryptoService.sign({
183
- value,
184
- expireSeconds,
185
- createdAt
186
- });
187
- const sig = Buffer.from(signature);
188
- const gen = Buffer.from(generatedSignature);
189
- if (sig.length !== gen.length || !timingSafeEqual(sig, gen)) {
190
- throw new Error("Invalid cookie signature");
191
- }
192
- return value;
193
- }
194
- async function deleteCokkie({ name }) {
195
- const cookieStore = await nextCookies();
196
- cookieStore.delete(name);
197
- }
198
- return {
199
- set,
200
- setSignedCookie,
201
- get,
202
- getSignedCookie,
203
- verifySignedCookie,
204
- delete: deleteCokkie
205
- };
206
- }
207
-
208
- // src/server/infrastructure/cache/cache-key-delimiter.ts
209
- var CACHE_KEY_DELIMITER = "|";
210
-
211
- // src/server/infrastructure/cache/create-cache.ts
212
- function createCache({
213
- redisUrl,
214
- namespace,
215
- keyDelimiter = CACHE_KEY_DELIMITER
216
- }) {
217
- const redisStore = new KeyvRedis(redisUrl, {
218
- keyPrefixSeparator: keyDelimiter
219
- });
220
- return new Keyv({
221
- store: redisStore,
222
- namespace,
223
- useKeyPrefix: false
224
- });
225
- }
226
-
227
- // src/server/infrastructure/cache/normalize-cache-key.ts
228
- var sanitize = (k) => k.replaceAll(/[\u200B-\u200D\uFEFF]/g, "").replaceAll(/[\r\n]/g, "").trim();
229
- var normalizeCacheKey = (key, delimiter = CACHE_KEY_DELIMITER) => {
230
- if (!key) return null;
231
- if (Array.isArray(key)) {
232
- if (key.length === 0) return null;
233
- const normalized = key.map((k) => {
234
- if (k === null) return "__null";
235
- if (k === void 0) return "__undefined";
236
- if (typeof k === "boolean") return k ? "__true" : "__false";
237
- return sanitize(String(k));
238
- });
239
- return normalized.join(delimiter);
240
- }
241
- if (typeof key === "boolean") return key ? "__true" : "__false";
242
- return String(key);
243
- };
244
-
245
- // src/server/infrastructure/cache/create-cache-result.ts
246
- var DAY = 1e3 * 60 * 60 * 24;
247
- function createCacheResult(cache2, logger) {
248
- return async function cacheResult({
249
- key: rawKey,
250
- ttl = DAY,
251
- load
252
- }) {
253
- const key = normalizeCacheKey(rawKey);
254
- if (!key) {
255
- logger.error("Cache skipped due to invalid key", {
256
- rawKey,
257
- scope: "cacheResult"
258
- });
259
- return load();
260
- }
261
- try {
262
- const cached = await cache2.get(key);
263
- if (cached !== void 0) {
264
- return cached;
265
- }
266
- const data = await load();
267
- if (data !== void 0) {
268
- await cache2.set(key, data, ttl);
269
- }
270
- return data;
271
- } catch (error) {
272
- logger.error("Cache failure, falling back to loader", {
273
- key,
274
- error,
275
- scope: "cacheResult"
276
- });
277
- return load();
278
- }
279
- };
280
- }
281
-
282
- // src/server/infrastructure/cache/create-ip-rate-limiter.ts
283
- var DEFAULT_MAX_ATTEMPTS = 10;
284
- var DEFAULT_TIME_WINDOW = 60;
285
- var lua = `
286
- local current = redis.call('INCR', KEYS[1])
287
- if current == 1 then
288
- redis.call('EXPIRE', KEYS[1], ARGV[1])
289
- end
290
- return current
291
- `;
292
- function createIpRateLimiter({
293
- appName,
294
- cache: cache2,
295
- headers
296
- }) {
297
- return async function ipRateLimiter({
298
- key: rawKey,
299
- maxAttempts = DEFAULT_MAX_ATTEMPTS,
300
- timeWindow = DEFAULT_TIME_WINDOW
301
- }) {
302
- const secondaryStore = cache2.store;
303
- const redis = await secondaryStore.getClient();
304
- if (!redis) return true;
305
- const headersStore = await headers();
306
- const ip = headersStore.get("cf-connecting-ip")?.trim() || headersStore.get("x-forwarded-for")?.split(",")[0]?.trim() || "unknown";
307
- const key = normalizeCacheKey([
308
- appName,
309
- "ip-rate-limiter",
310
- ...Array.isArray(rawKey) ? rawKey : [rawKey],
311
- ip
312
- ]);
313
- const currentRaw = await redis.eval(lua, {
314
- keys: [key],
315
- arguments: [timeWindow.toString()]
316
- });
317
- const current = typeof currentRaw === "number" ? currentRaw : Number(currentRaw);
318
- return current <= maxAttempts;
319
- };
320
- }
321
-
322
- // src/server/infrastructure/zod/rules/bcp47.ts
323
- function bcp47(locale) {
324
- if (typeof locale !== "string") return false;
325
- const BCP47_REGEX = new RegExp(
326
- "^[a-zA-Z]{2,3}(?:-[A-Z][a-z]{3})?" + // optional region
327
- String.raw`(?:-(?:[A-Z]{2}|\d{3}))?` + // optional variants
328
- String.raw`(?:-(?:[a-zA-Z0-9]{5,8}|\d[a-zA-Z0-9]{3}))*` + // optional extensions
329
- "(?:-(?:[0-9A-WY-Za-wy-z]-[a-zA-Z0-9]{2,8}(?:-[a-zA-Z0-9]{2,8})*))*(?:-x(?:-[a-zA-Z0-9]{1,8})+)?$"
330
- );
331
- return BCP47_REGEX.test(locale);
332
- }
333
-
334
- // src/server/infrastructure/zod/rules/exist.ts
335
- function createExist(prisma) {
336
- return async function exist(value, options) {
337
- if (!value) return false;
338
- const column = options.column || "id";
339
- const query = `
340
- SELECT COUNT(*) AS count
341
- FROM ${options.table}
342
- WHERE ${column} = $1
343
- `;
344
- try {
345
- const result2 = await prisma.$queryRawUnsafe(
346
- query,
347
- value
348
- );
349
- const count = Number(result2[0]?.count || 0);
350
- return count > 0;
351
- } catch (error) {
352
- console.error("Exist check failed:", error);
353
- return false;
354
- }
355
- };
356
- }
357
-
358
- // src/server/infrastructure/zod/rules/og-locale.ts
359
- function ogLocale(locale) {
360
- if (typeof locale !== "string") return false;
361
- const OG_LOCALE_REGEX = /^[a-z]{2}_[A-Z]{2}$/;
362
- return OG_LOCALE_REGEX.test(locale);
363
- }
364
-
365
- // src/server/infrastructure/zod/rules/unique.ts
366
- function createUnique(prisma) {
367
- return async function unique(value, options) {
368
- if (!value) return true;
369
- let query = `
370
- SELECT COUNT(*) AS count
371
- FROM ${options.table}
372
- WHERE ${options.column} = $1
373
- `;
374
- const params = [value];
375
- const appendCondition = (op, sc) => {
376
- const paramIndex = params.length + 1;
377
- const cast = sc.cast ? `::"${sc.cast}"` : "";
378
- query += ` AND ${sc.name} ${op} $${paramIndex}${cast}`;
379
- params.push(sc.value);
380
- };
381
- if (options.scope) {
382
- options.scope.forEach((sc) => appendCondition("=", sc));
383
- }
384
- if (options.excludeSelf) {
385
- appendCondition("!=", options.excludeSelf);
386
- }
387
- try {
388
- const result2 = await prisma.$queryRawUnsafe(
389
- query,
390
- ...params
391
- );
392
- return Number(result2[0]?.count || 0) === 0;
393
- } catch (error) {
394
- console.error("Unique check failed:", error);
395
- return false;
396
- }
397
- };
398
- }
399
-
400
- // src/server/infrastructure/zod/create-zod.ts
401
- function createZod({
402
- unique,
403
- exist
404
- }) {
405
- const stringProto = z.string().constructor.prototype;
406
- const emailProto = z.email().constructor.prototype;
407
- if (!stringProto.unique) {
408
- Object.defineProperty(stringProto, "unique", {
409
- configurable: true,
410
- writable: false,
411
- value: function(options) {
412
- return this.refine(async (v) => unique(v, options), {
413
- params: { i18nKey: "validator.unique" }
414
- });
415
- }
416
- });
417
- }
418
- if (!stringProto.exist) {
419
- Object.defineProperty(stringProto, "exist", {
420
- configurable: true,
421
- writable: false,
422
- value: function(options) {
423
- return this.refine(async (v) => exist(v, options), {
424
- params: { i18nKey: "validator.exist" }
425
- });
426
- }
427
- });
428
- }
429
- if (!stringProto.bcp47) {
430
- Object.defineProperty(stringProto, "bcp47", {
431
- configurable: true,
432
- writable: false,
433
- value: function() {
434
- return this.refine((v) => bcp47(v), {
435
- params: { i18nKey: "validator.bcp47" }
436
- });
437
- }
438
- });
439
- }
440
- if (!stringProto.ogLocale) {
441
- Object.defineProperty(stringProto, "ogLocale", {
442
- configurable: true,
443
- writable: false,
444
- value: function() {
445
- return this.refine((v) => ogLocale(v), {
446
- params: { i18nKey: "validator.og-locale" }
447
- });
448
- }
449
- });
450
- }
451
- if (!emailProto.unique) {
452
- Object.defineProperty(emailProto, "unique", {
453
- configurable: true,
454
- writable: false,
455
- value: function(options) {
456
- return this.refine(async (v) => unique(v, options), {
457
- params: { i18nKey: "validator.unique" }
458
- });
459
- }
460
- });
461
- }
462
- return z;
463
- }
464
-
465
- // src/server/infrastructure/zod/schemas/schemas.ts
466
- function createSchemas({
467
- z: z2,
468
- localeArray,
469
- exist
470
- }) {
471
- const trimmedString = () => z2.string().trim();
472
- const MAX_NUMBER = 2147483647;
473
- const MAX_STRING = 1e5;
474
- const localeSet = new Set(localeArray);
475
- function text() {
476
- return trimmedString().max(MAX_STRING);
477
- }
478
- function positiveNumber() {
479
- return z2.preprocess((val) => {
480
- if (val == null || val === "") return;
481
- const num = Number(typeof val === "string" ? val.trim() : val);
482
- return Number.isNaN(num) ? void 0 : num;
483
- }, z2.number().min(0).max(MAX_NUMBER));
484
- }
485
- function url() {
486
- return z2.preprocess((val) => {
487
- if (typeof val === "string" && val.trim() === "" || val === null)
488
- return null;
489
- return val;
490
- }, z2.url().max(2048).nullable());
491
- }
492
- function email() {
493
- return z2.email().max(254).toLowerCase();
494
- }
495
- function password() {
496
- return trimmedString().min(6).max(255);
497
- }
498
- function isoString() {
499
- return trimmedString().regex(
500
- /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/
501
- );
502
- }
503
- function array(schema) {
504
- return z2.array(schema).max(100).transform(
505
- (arr) => arr.filter((v) => v != null)
506
- );
507
- }
508
- function id() {
509
- return trimmedString().length(26).regex(/^[0-9A-Z]{26}$/);
510
- }
511
- function key() {
512
- return trimmedString().max(1024);
513
- }
514
- function sha256Hash() {
515
- return trimmedString().length(64).regex(/^[a-f0-9]{64}$/);
516
- }
517
- function slug() {
518
- return trimmedString().regex(/^$|^[\p{L}0-9-_]+$/u).max(100);
519
- }
520
- function pathSegment() {
521
- return trimmedString().min(1).regex(/^(?!\.\.?$)[^\u0000-\u001F/\\]+$/u).max(255);
522
- }
523
- function locale() {
524
- return trimmedString().refine((val) => localeSet.has(val), {
525
- error: "Invalid locale"
526
- });
527
- }
528
- function singleItem(options) {
529
- return z2.object({
530
- id: id().refine((v) => exist(v, options), {
531
- error: "Resource does not exist"
532
- })
533
- }).nullable();
534
- }
535
- function multiItems(options) {
536
- return array(
537
- z2.object({
538
- id: id().refine((v) => exist(v, options), {
539
- error: "Resource does not exist"
540
- })
541
- })
542
- );
543
- }
544
- return {
545
- z: z2,
546
- // base
547
- text,
548
- positiveNumber,
549
- url,
550
- email,
551
- password,
552
- isoString,
553
- array,
554
- // resource related
555
- id,
556
- key,
557
- sha256Hash,
558
- slug,
559
- pathSegment,
560
- locale,
561
- // item
562
- singleItem,
563
- multiItems
564
- };
565
- }
566
-
567
- // src/server/infrastructure/zod/schemas/file.ts
568
- function createFileSchema({
569
- z: z2,
570
- maxSizeInMb
571
- }) {
572
- return function fileSchema({
573
- size = maxSizeInMb * SIZE.MB,
574
- extensions = []
575
- } = {}) {
576
- return z2.instanceof(File, { error: "Invalid file" }).refine((file) => file.size <= size, {
577
- error: `File is too large, max ${size / SIZE.MB}MB`
578
- }).refine(
579
- (file) => {
580
- if (extensions.length === 0) return true;
581
- return extensions.some(
582
- (ext) => file.name.toLocaleLowerCase().endsWith(ext)
583
- );
584
- },
585
- { error: `Only ${extensions.join(", ")} files are allowed` }
586
- ).transform((file) => file);
587
- };
588
- }
589
- function createMultiFileSchema({
590
- z: z2,
591
- fileSchema,
592
- maxSizeInMb
593
- }) {
594
- return function multiFilesSchema({
595
- size = maxSizeInMb * SIZE.MB,
596
- extensions = []
597
- } = {}) {
598
- return z2.array(fileSchema({ size, extensions }));
599
- };
600
- }
601
-
602
- // src/server/infrastructure/zod/schemas/toc-item.ts
603
- function createTocItemSchema({
604
- z: z2,
605
- schemas
606
- }) {
607
- const tocItem = z2.lazy(
608
- () => z2.object({
609
- text: schemas.text(),
610
- id: schemas.text(),
611
- level: z2.union([
612
- z2.literal(2),
613
- z2.literal(3),
614
- z2.literal(4),
615
- z2.literal(5),
616
- z2.literal(6)
617
- ]),
618
- children: z2.array(tocItem).default([])
619
- })
620
- );
621
- return tocItem;
622
- }
623
- function createTransporter({
624
- host,
625
- port,
626
- user,
627
- pass
628
- }) {
629
- return nodemailer.createTransport({
630
- host,
631
- port,
632
- auth: {
633
- user,
634
- pass
635
- }
636
- });
637
- }
638
- function createSendEmail({
639
- transporter,
640
- config
641
- }) {
642
- return async function sendEmail(options) {
643
- return await transporter.sendMail({
644
- from: `${config.fromName} <${config.fromAddress}>`,
645
- replyTo: `${config.replyToName} <${config.replyToaddress}>`,
646
- ...options
647
- });
648
- };
649
- }
650
- var TEMPLATE_DIR = path.resolve(process.cwd(), "emails");
651
- var LAYOUT_PATH = path.join(TEMPLATE_DIR, "layout.html");
652
- var isDev = process.env.NODE_ENV !== "production";
653
- var cache = /* @__PURE__ */ new Map();
654
- async function readTemplate(filePath) {
655
- if (!isDev && cache.has(filePath)) {
656
- return cache.get(filePath);
657
- }
658
- try {
659
- const html = await readFile(filePath, "utf8");
660
- if (!isDev) cache.set(filePath, html);
661
- return html;
662
- } catch (error) {
663
- throw new Error(`Email template file not found: ${filePath}`, {
664
- cause: error
665
- });
666
- }
667
- }
668
- function applyReplacements(html, replacements, logger) {
669
- return html.replace(/\{\{\{(.*?)\}\}\}/g, (_, raw) => {
670
- const key = raw.trim();
671
- const value = replacements[key];
672
- if (value == null) {
673
- logger.warn({ msg: "Email template variable missing", variable: key });
674
- return "";
675
- }
676
- return value;
677
- });
678
- }
679
- function createRenderEmailTemplate({
680
- siteName,
681
- webUrl,
682
- logoUrl,
683
- logger
684
- }) {
685
- return async function renderEmailTemplate(templateKey, replacements = {}) {
686
- try {
687
- const contentPath = path.join(TEMPLATE_DIR, `${templateKey}.html`);
688
- const vars = {
689
- SITE_NAME: siteName,
690
- WEB_URL: webUrl,
691
- LOGO_URL: logoUrl,
692
- ...replacements
693
- };
694
- const layoutHtml = await readTemplate(LAYOUT_PATH);
695
- const contentHtml = await readTemplate(contentPath);
696
- const merged = layoutHtml.replaceAll("{{{content}}}", contentHtml);
697
- return applyReplacements(merged, vars, logger);
698
- } catch (error) {
699
- logger.error({
700
- msg: "Email template render failed",
701
- templateKey,
702
- templateDir: TEMPLATE_DIR,
703
- error
704
- });
705
- throw new Error(`Email template error: ${templateKey}`, { cause: error });
706
- }
707
- };
708
- }
709
-
710
- // src/server/infrastructure/database/utils/connect.ts
711
- var ids = (items) => items.map(({ id }) => ({ id }));
712
- function connectOne(item) {
713
- return item ? { connect: { id: item.id } } : {};
714
- }
715
- function connectMany(items) {
716
- return { connect: ids(items) };
717
- }
718
- function updateOne(item) {
719
- return item ? { connect: { id: item.id } } : { disconnect: true };
720
- }
721
- function updateMany(items) {
722
- return { set: ids(items) };
723
- }
724
-
725
- // src/server/infrastructure/database/admin/command/create-admin-command-repository.ts
726
- function createAdminCommandRepository(prisma) {
727
- async function create({
728
- // core
729
- role,
730
- email,
731
- passwordHash,
732
- // better seo
733
- socialLinks,
734
- // ------------------------------------
735
- // relations
736
- // ------------------------------------
737
- // File
738
- avatarImage,
739
- // ------------------------------------
740
- // translation
741
- // ------------------------------------
742
- translations
743
- }) {
744
- const created = await prisma.admin.create({
745
- data: {
746
- // core
747
- role,
748
- email,
749
- passwordHash,
750
- // better seo
751
- socialLinks,
752
- // ------------------------------------------------------------------------
753
- // relations
754
- // ------------------------------------------------------------------------
755
- // File
756
- avatarImage: connectOne(avatarImage),
757
- // ------------------------------------------------------------------------
758
- // translation
759
- // ------------------------------------------------------------------------
760
- translations: { create: translations }
761
- }
762
- });
763
- return created;
764
- }
765
- async function update({
766
- id,
767
- // core
768
- role,
769
- email,
770
- // better seo
771
- socialLinks,
772
- // ------------------------------------
773
- // relations
774
- // ------------------------------------
775
- // File
776
- avatarImage,
777
- // ------------------------------------
778
- // translation
779
- // ------------------------------------
780
- translations,
781
- // ------------------------------------
782
- // timestamps
783
- // ------------------------------------
784
- emailVerifiedAt
785
- }) {
786
- const updated = await prisma.admin.update({
787
- where: { id },
788
- data: {
789
- // core
790
- role,
791
- ...email !== void 0 ? { email } : {},
792
- // better seo
793
- socialLinks,
794
- // ------------------------------------------------------------------------
795
- // relations
796
- // ------------------------------------------------------------------------
797
- // File
798
- avatarImage: updateOne(avatarImage),
799
- // ------------------------------------------------------------------------
800
- // translation
801
- // ------------------------------------------------------------------------
802
- translations: {
803
- upsert: translations.map((t) => ({
804
- where: { adminId_locale: { adminId: id, locale: t.locale } },
805
- update: t,
806
- create: t
807
- }))
808
- },
809
- // ------------------------------------------------------------------------
810
- // timestamps
811
- // ------------------------------------------------------------------------
812
- emailVerifiedAt
813
- }
814
- });
815
- return updated;
816
- }
817
- async function _delete({ id }) {
818
- const deleted = await prisma.admin.delete({
819
- where: { id }
820
- });
821
- return deleted;
822
- }
823
- return {
824
- create,
825
- update,
826
- delete: _delete
827
- };
828
- }
829
-
830
- // src/server/infrastructure/database/constants.ts
831
- var ORDER_BY = [
832
- { updatedAt: "desc" },
833
- { createdAt: "desc" },
834
- { id: "asc" }
835
- ];
836
- var ADMIN_ORDER_BY = [
837
- { role: "asc" },
838
- ...ORDER_BY
839
- ];
840
- var POST_ORDER_BY = [
841
- { index: "asc" },
842
- ...ORDER_BY
843
- ];
844
-
845
- // src/server/infrastructure/database/utils/create-pagination.ts
846
- function createPagination(page, pageSize) {
847
- if (!page || !pageSize) return {};
848
- return {
849
- skip: (page - 1) * pageSize,
850
- take: pageSize
851
- };
852
- }
853
-
854
- // src/server/infrastructure/database/utils/create-search.ts
855
- function buildContainsOr(fields, value) {
856
- return fields.map((field) => ({
857
- [field]: { contains: value, mode: "insensitive" }
858
- }));
859
- }
860
- function buildTranslationSearch(locale, fields, value) {
861
- return {
862
- translations: {
863
- some: { locale, OR: buildContainsOr(fields, value) }
864
- }
865
- };
866
- }
867
- function createSearch({
868
- locale,
869
- searchString,
870
- rootFields = [],
871
- translationFields = []
872
- }) {
873
- if (!searchString) return {};
874
- const conditions = [];
875
- if (rootFields.length > 0) {
876
- conditions.push(...buildContainsOr(rootFields, searchString));
877
- }
878
- if (translationFields.length > 0 && locale) {
879
- conditions.push(
880
- buildTranslationSearch(locale, translationFields, searchString)
881
- );
882
- }
883
- return conditions.length > 0 ? { OR: conditions } : {};
884
- }
885
-
886
- // src/server/infrastructure/database/admin/include.ts
887
- var ADMIN_FULL_INCLUDE = {
888
- // ---------------------------
889
- // relations: AdminRefreshToken
890
- // ---------------------------
891
- adminRefreshTokens: true,
892
- // ---------------------------
893
- // relations: File
894
- // ---------------------------
895
- avatarImage: { include: { translations: true } },
896
- // ---------------------------
897
- // relations: Post
898
- // ---------------------------
899
- posts: true,
900
- // ---------------------------
901
- // translation
902
- // ---------------------------
903
- translations: true
904
- };
905
-
906
- // src/server/infrastructure/database/admin/query/create-admin-query-repository.ts
907
- var OMIT_PASSWORD = { omit: { passwordHash: true } };
908
- function buildWhere(params) {
909
- if (params.id) return { id: params.id };
910
- if (params.email) return { email: params.email };
911
- return;
912
- }
913
- function createAdminQueryRepository(prisma) {
914
- async function findListCards({
915
- locale,
916
- // search
917
- searchString,
918
- role,
919
- adminIds,
920
- // pagination
921
- page,
922
- pageSize
923
- }) {
924
- const where = {
925
- // search
926
- ...createSearch({
927
- ...searchString !== void 0 ? { searchString } : {},
928
- locale,
929
- translationFields: ["name"]
930
- }),
931
- // role
932
- ...role !== ADMIN_ROLES.SUPER_ADMIN ? { role: { notIn: [ADMIN_ROLES.SUPER_ADMIN] } } : {},
933
- // Specified ids
934
- ...adminIds?.length ? { id: { in: adminIds } } : {}
935
- };
936
- const [items, total] = await prisma.$transaction([
937
- prisma.admin.findMany({
938
- where,
939
- orderBy: ADMIN_ORDER_BY,
940
- include: ADMIN_FULL_INCLUDE,
941
- ...createPagination(page, pageSize),
942
- ...OMIT_PASSWORD
943
- }),
944
- prisma.admin.count({ where })
945
- ]);
946
- return { items, total };
947
- }
948
- async function find(params) {
949
- const where = buildWhere(params);
950
- if (!where) return null;
951
- return prisma.admin.findUnique({
952
- where,
953
- ...OMIT_PASSWORD
954
- });
955
- }
956
- async function findFull(params) {
957
- const where = buildWhere(params);
958
- if (!where) return null;
959
- return prisma.admin.findUnique({
960
- where,
961
- include: ADMIN_FULL_INCLUDE,
962
- ...OMIT_PASSWORD
963
- });
964
- }
965
- async function findWithPasswordHash(params) {
966
- const where = buildWhere(params);
967
- if (!where) return null;
968
- return prisma.admin.findUnique({
969
- where
970
- });
971
- }
972
- return {
973
- findListCards,
974
- find,
975
- findFull,
976
- findWithPasswordHash
977
- };
978
- }
979
-
980
- // src/server/infrastructure/database/admin-refresh-token/command/create-admin-refresh-token-command-repository.ts
981
- function createAdminRefreshTokenCommandRepository(prisma) {
982
- async function create({
983
- adminId,
984
- ...params
985
- }) {
986
- const created = await prisma.adminRefreshToken.create({
987
- data: {
988
- ...params,
989
- admin: { connect: { id: adminId } },
990
- deviceInfo: params.deviceInfo
991
- }
992
- });
993
- return created;
994
- }
995
- async function _delete({ id, tokenHash }) {
996
- const where = id ? { id } : tokenHash ? { tokenHash } : void 0;
997
- if (where) {
998
- await prisma.adminRefreshToken.delete({
999
- where
1000
- });
1001
- }
1002
- }
1003
- async function deleteManyByExpired() {
1004
- const { count } = await prisma.adminRefreshToken.deleteMany({
1005
- where: { expiresAt: { lt: /* @__PURE__ */ new Date() } }
1006
- });
1007
- return count;
1008
- }
1009
- return {
1010
- create,
1011
- delete: _delete,
1012
- deleteManyByExpired
1013
- };
1014
- }
1015
-
1016
- // src/server/infrastructure/database/admin-refresh-token/query/create-admin-refresh-token-query-repository.ts
1017
- function createAdminRefreshTokenQueryRepository(prisma) {
1018
- async function findManyByAdminId({
1019
- adminId
1020
- }) {
1021
- return prisma.adminRefreshToken.findMany({
1022
- where: { adminId },
1023
- orderBy: [{ createdAt: "desc" }, { id: "asc" }]
1024
- });
1025
- }
1026
- async function findByToken({
1027
- tokenHash
1028
- }) {
1029
- return prisma.adminRefreshToken.findUnique({
1030
- where: { tokenHash }
1031
- });
1032
- }
1033
- return {
1034
- findManyByAdminId,
1035
- findByToken
1036
- };
1037
- }
1038
-
1039
- // src/server/infrastructure/database/file/include.ts
1040
- var FILE_FULL_INCLUDE = {
1041
- // ---------------------------
1042
- // relations: Folder
1043
- // ---------------------------
1044
- folder: true,
1045
- // ---------------------------
1046
- // relations: Admin
1047
- // ---------------------------
1048
- adminAsAvatarImage: true,
1049
- // ---------------------------
1050
- // relations: Post
1051
- // ---------------------------
1052
- postsAsCoverImage: true,
1053
- postsAsContentImage: true,
1054
- // ---------------------------
1055
- // --- custom fields
1056
- // ---------------------------
1057
- postsAsImages1: true,
1058
- postsAsImages2: true,
1059
- postsAsImage1: true,
1060
- postsAsImage2: true,
1061
- postsAsImage3: true,
1062
- postsAsImage4: true,
1063
- // ---------------------------
1064
- // translation
1065
- // ---------------------------
1066
- translations: true
1067
- };
1068
-
1069
- // src/server/infrastructure/database/file/command/create-file-command-repository.ts
1070
- function createFileCommandRepository(prisma) {
1071
- async function create({
1072
- // core
1073
- key,
1074
- checksum,
1075
- // meta
1076
- fileMeta,
1077
- // media info
1078
- width,
1079
- height,
1080
- duration,
1081
- // ------------------------------------
1082
- // relations
1083
- // ------------------------------------
1084
- // Folder
1085
- folder,
1086
- // ------------------------------------
1087
- // translation
1088
- // ------------------------------------
1089
- translations
1090
- }) {
1091
- const extension = mimeToExtension(fileMeta.type);
1092
- const created = await prisma.file.create({
1093
- data: {
1094
- // core
1095
- key,
1096
- checksum,
1097
- // media info
1098
- ...width !== void 0 ? { width } : {},
1099
- ...height !== void 0 ? { height } : {},
1100
- ...duration !== void 0 ? { duration } : {},
1101
- // derived
1102
- originalName: fileMeta.name || "unknown",
1103
- size: fileMeta.size ?? 0,
1104
- extension,
1105
- mimeType: fileMeta.type || "unknown",
1106
- type: classifyFileType(fileMeta.type, extension),
1107
- // ------------------------------------------------------------------------
1108
- // relations
1109
- // ------------------------------------------------------------------------
1110
- // Folder
1111
- folder: connectOne(folder),
1112
- // ------------------------------------------------------------------------
1113
- // translation
1114
- // ------------------------------------------------------------------------
1115
- translations: {
1116
- create: translations.map((t) => ({
1117
- ...t,
1118
- name: t.name ?? fileMeta.name ?? "unknown"
1119
- }))
1120
- }
1121
- },
1122
- include: FILE_FULL_INCLUDE
1123
- });
1124
- return created;
1125
- }
1126
- async function update({
1127
- file,
1128
- // Original file (File)
1129
- id,
1130
- // core
1131
- key,
1132
- checksum,
1133
- // meta
1134
- fileMeta,
1135
- // media info
1136
- width,
1137
- height,
1138
- duration,
1139
- // ------------------------------------
1140
- // relations
1141
- // ------------------------------------
1142
- // Folder
1143
- folder,
1144
- // ------------------------------------
1145
- // translation
1146
- // ------------------------------------
1147
- translations
1148
- }) {
1149
- const extension = mimeToExtension(fileMeta.type);
1150
- const updated = await prisma.file.update({
1151
- where: { id: file.id },
1152
- data: {
1153
- // core
1154
- key,
1155
- checksum,
1156
- // media info
1157
- ...width !== void 0 ? { width } : {},
1158
- ...height !== void 0 ? { height } : {},
1159
- ...duration !== void 0 ? { duration } : {},
1160
- // derived
1161
- size: fileMeta.size ?? file.size,
1162
- extension: fileMeta ? extension : file.extension,
1163
- mimeType: fileMeta.type || file.mimeType,
1164
- type: fileMeta.type ? classifyFileType(fileMeta.type, extension) : file.type,
1165
- // ------------------------------------------------------------------------
1166
- // relations
1167
- // ------------------------------------------------------------------------
1168
- // Folder
1169
- folder: updateOne(folder),
1170
- // ------------------------------------------------------------------------
1171
- // translation
1172
- // ------------------------------------------------------------------------
1173
- translations: {
1174
- upsert: translations.map((t) => ({
1175
- where: { fileId_locale: { fileId: id, locale: t.locale } },
1176
- update: t,
1177
- create: t
1178
- }))
1179
- }
1180
- }
1181
- });
1182
- return updated;
1183
- }
1184
- async function softDelete({ id }) {
1185
- const updated = await prisma.file.update({
1186
- where: { id, isLocked: false },
1187
- data: { deletedAt: /* @__PURE__ */ new Date() }
1188
- });
1189
- return updated;
1190
- }
1191
- async function softDeleteMany({ ids: ids2 }) {
1192
- const { count } = await prisma.file.updateMany({
1193
- where: { id: { in: ids2 }, isLocked: false },
1194
- data: { deletedAt: /* @__PURE__ */ new Date() }
1195
- });
1196
- return count;
1197
- }
1198
- async function restoreMany({ ids: ids2 }) {
1199
- const { count } = await prisma.file.updateMany({
1200
- where: { id: { in: ids2 } },
1201
- data: { deletedAt: null }
1202
- });
1203
- return count;
1204
- }
1205
- async function _delete({ id }) {
1206
- const deleted = await prisma.file.delete({
1207
- where: { id }
1208
- });
1209
- return deleted;
1210
- }
1211
- return {
1212
- create,
1213
- update,
1214
- softDelete,
1215
- softDeleteMany,
1216
- restoreMany,
1217
- delete: _delete
1218
- };
1219
- }
1220
-
1221
- // src/server/infrastructure/database/utils/build-file-usage.ts
1222
- function buildFileUsage(isLocked) {
1223
- const relations = [
1224
- "adminAsAvatarImage",
1225
- "postsAsCoverImage",
1226
- "postsAsContentImage",
1227
- "postsAsImages1",
1228
- "postsAsImages2",
1229
- "postsAsImage1",
1230
- "postsAsImage2",
1231
- "postsAsImage3",
1232
- "postsAsImage4"
1233
- ];
1234
- if (isLocked === void 0 || isLocked === null) return {};
1235
- const condition = relations.map((r) => ({
1236
- [r]: { [isLocked ? "some" : "none"]: {} }
1237
- }));
1238
- return isLocked ? { OR: condition } : { AND: condition };
1239
- }
1240
-
1241
- // src/server/infrastructure/database/file/query/create-file-query-repository.ts
1242
- function createFileQueryRepository(prisma) {
1243
- async function findListCards({
1244
- locale,
1245
- // pagination
1246
- page,
1247
- pageSize,
1248
- // search
1249
- searchString,
1250
- type,
1251
- folderId,
1252
- isLocked,
1253
- isDeleted = false,
1254
- fileIds
1255
- }) {
1256
- const where = {
1257
- // search
1258
- ...createSearch({
1259
- ...searchString !== void 0 ? { searchString } : {},
1260
- locale,
1261
- translationFields: ["name"]
1262
- }),
1263
- // type
1264
- ...type ? { type } : {},
1265
- // state: isLocked
1266
- ...buildFileUsage(isLocked),
1267
- // state: deleteAt
1268
- deletedAt: isDeleted ? { not: null } : null,
1269
- // Find deleted files in trash page
1270
- // relations: Folder
1271
- ...folderId ? { folderId: folderId === ROOT_FOLDER_ID ? null : folderId } : {},
1272
- // Specified ids
1273
- ...fileIds ? { id: { in: fileIds } } : {}
1274
- };
1275
- const [items, total] = await prisma.$transaction([
1276
- prisma.file.findMany({
1277
- where,
1278
- orderBy: [...ORDER_BY],
1279
- include: FILE_FULL_INCLUDE,
1280
- ...createPagination(page, pageSize)
1281
- }),
1282
- prisma.file.count({ where })
1283
- ]);
1284
- return { items, total };
1285
- }
1286
- async function findManyByIds({
1287
- ids: ids2
1288
- }) {
1289
- return prisma.file.findMany({
1290
- where: { id: { in: ids2 } },
1291
- include: FILE_FULL_INCLUDE
1292
- });
1293
- }
1294
- async function findFull({ id }) {
1295
- return prisma.file.findUnique({
1296
- where: { id },
1297
- include: FILE_FULL_INCLUDE
1298
- });
1299
- }
1300
- return {
1301
- findListCards,
1302
- findManyByIds,
1303
- findFull
1304
- };
1305
- }
1306
-
1307
- // src/server/infrastructure/database/folder/command/create-folder-command-repository.ts
1308
- function createFolderCommandRepository(prisma) {
1309
- async function create({
1310
- // core
1311
- key,
1312
- name,
1313
- // ------------------------------------
1314
- // relations
1315
- // ------------------------------------
1316
- // Folder
1317
- parentFolder
1318
- }) {
1319
- const created = await prisma.folder.create({
1320
- data: {
1321
- // core
1322
- key,
1323
- name,
1324
- // ------------------------------------------------------------------------
1325
- // relations
1326
- // ------------------------------------------------------------------------
1327
- // Folder
1328
- parentFolder: connectOne(parentFolder)
1329
- }
1330
- });
1331
- return created;
1332
- }
1333
- async function update({
1334
- id,
1335
- // core
1336
- key,
1337
- name,
1338
- // ------------------------------------
1339
- // relations
1340
- // ------------------------------------
1341
- // Folder
1342
- parentFolder
1343
- }) {
1344
- const updated = await prisma.folder.update({
1345
- where: { id },
1346
- data: {
1347
- // core
1348
- key,
1349
- name,
1350
- // ------------------------------------------------------------------------
1351
- // relations
1352
- // ------------------------------------------------------------------------
1353
- // Folder
1354
- parentFolder: updateOne(parentFolder)
1355
- }
1356
- });
1357
- return updated;
1358
- }
1359
- async function _delete({ id }) {
1360
- const deleted = await prisma.folder.delete({
1361
- where: { id }
1362
- });
1363
- return deleted;
1364
- }
1365
- return {
1366
- create,
1367
- update,
1368
- delete: _delete
1369
- };
1370
- }
1371
-
1372
- // src/server/infrastructure/database/folder/include.ts
1373
- var FOLDER_FULL_INCLUDE = {
1374
- // ---------------------------
1375
- // relations: Folder
1376
- // ---------------------------
1377
- parentFolder: { include: { subFolders: true, files: true } },
1378
- subFolders: true,
1379
- // ---------------------------
1380
- // relations: File
1381
- // ---------------------------
1382
- files: true
1383
- };
1384
-
1385
- // src/server/infrastructure/database/folder/query/create-folder-query-repository.ts
1386
- function buildWhere2(params) {
1387
- if (params.id) return { id: params.id };
1388
- if (params.key) return { key: params.key };
1389
- return;
1390
- }
1391
- function createFolderQueryRepository(prisma) {
1392
- async function findListCards({
1393
- // search
1394
- searchString,
1395
- parentFolderId,
1396
- folderIds,
1397
- // pagination
1398
- page,
1399
- pageSize
1400
- }) {
1401
- const where = {
1402
- // search
1403
- ...searchString ? { name: { contains: searchString, mode: "insensitive" } } : {},
1404
- // relations: Folder
1405
- ...parentFolderId ? parentFolderId === ROOT_FOLDER_ID ? { parentFolderId: null } : { parentFolderId } : {},
1406
- // Specified ids
1407
- ...folderIds ? { id: { in: folderIds } } : {}
1408
- };
1409
- const [items, total] = await prisma.$transaction([
1410
- prisma.folder.findMany({
1411
- where,
1412
- orderBy: [...ORDER_BY],
1413
- include: FOLDER_FULL_INCLUDE,
1414
- ...createPagination(page, pageSize)
1415
- }),
1416
- prisma.folder.count({ where })
1417
- ]);
1418
- return { items, total };
1419
- }
1420
- async function findFull(params) {
1421
- const where = buildWhere2(params);
1422
- if (!where) return null;
1423
- return prisma.folder.findUnique({
1424
- where,
1425
- include: FOLDER_FULL_INCLUDE
1426
- });
1427
- }
1428
- return {
1429
- findListCards,
1430
- findFull
1431
- };
1432
- }
1433
- function createPostCommandRepository(prisma) {
1434
- async function create({
1435
- slug,
1436
- type,
1437
- // ------------------------------------
1438
- // relations
1439
- // ------------------------------------
1440
- // Admin
1441
- author,
1442
- // Post
1443
- topicId,
1444
- parents,
1445
- tags,
1446
- relatedPosts,
1447
- // File
1448
- coverImage,
1449
- contentImageIds,
1450
- // ------------------------------------
1451
- // --- custom fields
1452
- // ------------------------------------
1453
- // multi images
1454
- images1,
1455
- images2,
1456
- // single images
1457
- image1,
1458
- image2,
1459
- image3,
1460
- image4,
1461
- // ------------------------------------
1462
- // translation
1463
- // ------------------------------------
1464
- translations,
1465
- // rest
1466
- ...params
1467
- }) {
1468
- const id = ulid();
1469
- const created = await prisma.post.create({
1470
- data: {
1471
- ...params,
1472
- id,
1473
- type,
1474
- // ------------------------------------------------------------------------
1475
- // states
1476
- // ------------------------------------------------------------------------
1477
- slug: slug?.trim() || id,
1478
- // Use id when slug is null or empty string
1479
- // ------------------------------------------------------------------------
1480
- // relations
1481
- // ------------------------------------------------------------------------
1482
- // Admin
1483
- author: connectOne(author),
1484
- // Post
1485
- topic: connectOne(topicId ? { id: topicId } : null),
1486
- parents: connectMany(parents),
1487
- tags: connectMany(tags),
1488
- relatedPosts: connectMany(relatedPosts),
1489
- // File
1490
- coverImage: connectOne(coverImage),
1491
- contentImages: connectMany(contentImageIds.map((id2) => ({ id: id2 }))),
1492
- // ------------------------------------------------------------------------
1493
- // --- custom fields
1494
- // ------------------------------------------------------------------------
1495
- // multi images
1496
- images1: connectMany(images1),
1497
- images2: connectMany(images2),
1498
- // single images
1499
- image1: connectOne(image1),
1500
- image2: connectOne(image2),
1501
- image3: connectOne(image3),
1502
- image4: connectOne(image4),
1503
- // ------------------------------------------------------------------------
1504
- // translation
1505
- // ------------------------------------------------------------------------
1506
- translations: {
1507
- create: translations.map((t) => ({
1508
- ...t,
1509
- externalLinks: t.externalLinks,
1510
- faq: t.faq,
1511
- toc: t.toc
1512
- }))
1513
- }
1514
- }
1515
- });
1516
- return created;
1517
- }
1518
- async function update({
1519
- id,
1520
- slug,
1521
- type,
1522
- // ------------------------------------
1523
- // relations
1524
- // ------------------------------------
1525
- // Admin
1526
- author,
1527
- // Post
1528
- topicId,
1529
- parents,
1530
- tags,
1531
- relatedPosts,
1532
- // File
1533
- coverImage,
1534
- contentImageIds,
1535
- // ------------------------------------
1536
- // --- custom fields
1537
- // ------------------------------------
1538
- // multi images
1539
- images1,
1540
- images2,
1541
- // single images
1542
- image1,
1543
- image2,
1544
- image3,
1545
- image4,
1546
- // ------------------------------------
1547
- // translation
1548
- // ------------------------------------
1549
- translations,
1550
- // rest
1551
- ...params
1552
- }) {
1553
- const updated = await prisma.post.update({
1554
- where: { id },
1555
- data: {
1556
- ...params,
1557
- type,
1558
- // ------------------------------------------------------------------------
1559
- // states
1560
- // ------------------------------------------------------------------------
1561
- slug: slug?.trim() || id,
1562
- // Use id when slug is null or empty string
1563
- // ------------------------------------------------------------------------
1564
- // relations
1565
- // ------------------------------------------------------------------------
1566
- // Admin
1567
- author: updateOne(author),
1568
- // Post
1569
- topic: updateOne(topicId ? { id: topicId } : null),
1570
- parents: updateMany(parents),
1571
- tags: updateMany(tags),
1572
- relatedPosts: updateMany(relatedPosts),
1573
- // File
1574
- coverImage: updateOne(coverImage),
1575
- contentImages: updateMany(contentImageIds.map((id2) => ({ id: id2 }))),
1576
- // ------------------------------------------------------------------------
1577
- // --- custom fields
1578
- // ------------------------------------------------------------------------
1579
- // multi images
1580
- images1: updateMany(images1),
1581
- images2: updateMany(images2),
1582
- // single images
1583
- image1: updateOne(image1),
1584
- image2: updateOne(image2),
1585
- image3: updateOne(image3),
1586
- image4: updateOne(image4),
1587
- // ------------------------------------------------------------------------
1588
- // translation
1589
- // ------------------------------------------------------------------------
1590
- translations: {
1591
- upsert: translations.map((t) => ({
1592
- where: { postId_locale: { postId: id, locale: t.locale } },
1593
- update: {
1594
- ...t,
1595
- externalLinks: t.externalLinks,
1596
- faq: t.faq,
1597
- toc: t.toc
1598
- },
1599
- create: {
1600
- ...t,
1601
- externalLinks: t.externalLinks,
1602
- faq: t.faq,
1603
- toc: t.toc
1604
- }
1605
- }))
1606
- }
1607
- }
1608
- });
1609
- return updated;
1610
- }
1611
- async function _delete({ id }) {
1612
- const deleted = await prisma.post.delete({
1613
- where: { id }
1614
- });
1615
- return deleted;
1616
- }
1617
- return {
1618
- create,
1619
- update,
1620
- delete: _delete
1621
- };
1622
- }
1623
-
1624
- // src/server/infrastructure/database/post/include.ts
1625
- var POST_LIST_CARD_INCLUDE = {
1626
- // ---------------------------
1627
- // relations: Post
1628
- // ---------------------------
1629
- topic: { include: { translations: true } },
1630
- // Use as post, category
1631
- postsInTopic: true,
1632
- // Use as topic
1633
- children: true,
1634
- // Use as category
1635
- taggedPosts: true,
1636
- // Use as tag
1637
- // ---------------------------
1638
- // relations: File
1639
- // ---------------------------
1640
- coverImage: true,
1641
- // ---------------------------
1642
- // translation
1643
- // ---------------------------
1644
- translations: true
1645
- };
1646
- var POST_FULL_INCLUDE = {
1647
- // ---------------------------
1648
- // relations: Admin
1649
- // ---------------------------
1650
- author: { include: { translations: true }, omit: { passwordHash: true } },
1651
- // ---------------------------
1652
- // relations: Post
1653
- // ---------------------------
1654
- topic: { include: POST_LIST_CARD_INCLUDE },
1655
- postsInTopic: { include: POST_LIST_CARD_INCLUDE },
1656
- parents: { include: POST_LIST_CARD_INCLUDE },
1657
- children: { include: POST_LIST_CARD_INCLUDE },
1658
- tags: { include: POST_LIST_CARD_INCLUDE },
1659
- taggedPosts: { include: POST_LIST_CARD_INCLUDE },
1660
- relatedPosts: { include: POST_LIST_CARD_INCLUDE },
1661
- referencingPosts: { include: POST_LIST_CARD_INCLUDE },
1662
- // ---------------------------
1663
- // relations: File
1664
- // ---------------------------
1665
- coverImage: { include: { translations: true } },
1666
- // ---------------------------
1667
- // relations: File
1668
- // ---------------------------
1669
- seoMetadatas: true,
1670
- // ---------------------------
1671
- // --- custom fields
1672
- // ---------------------------
1673
- images1: { include: { translations: true } },
1674
- images2: { include: { translations: true } },
1675
- image1: { include: { translations: true } },
1676
- image2: { include: { translations: true } },
1677
- image3: { include: { translations: true } },
1678
- image4: { include: { translations: true } },
1679
- // ---------------------------
1680
- // translation
1681
- // ---------------------------
1682
- translations: true
1683
- };
1684
-
1685
- // src/server/infrastructure/database/post/query/create-post-query-repository.ts
1686
- function buildWhere3(params) {
1687
- if (params.id) return { id: params.id };
1688
- if (params.type && params.slug)
1689
- return { type: params.type, slug: params.slug };
1690
- return;
1691
- }
1692
- function createPostQueryRepository(prisma) {
1693
- async function findListCards({
1694
- locale,
1695
- // search
1696
- searchString,
1697
- // type
1698
- type,
1699
- // states
1700
- isActive,
1701
- isIndexActive,
1702
- isSlugActive,
1703
- isFeatured,
1704
- isShownOnHome,
1705
- state1,
1706
- state2,
1707
- state3,
1708
- state4,
1709
- state5,
1710
- state6,
1711
- state7,
1712
- state8,
1713
- state9,
1714
- state10,
1715
- // relations
1716
- topicId,
1717
- topicSlug,
1718
- categoryId,
1719
- categorySlug,
1720
- // specified ids
1721
- postIds,
1722
- excludeIds,
1723
- // pagination
1724
- page,
1725
- pageSize
1726
- }) {
1727
- const where = {
1728
- // search
1729
- ...createSearch({
1730
- ...searchString ? { searchString } : {},
1731
- locale,
1732
- rootFields: ["slug"],
1733
- translationFields: [
1734
- "title",
1735
- "subtitle",
1736
- "summary",
1737
- "description",
1738
- "content"
1739
- ]
1740
- }),
1741
- // type
1742
- ...type ? { type } : {},
1743
- // states
1744
- ...isActive ? { isActive: true } : {},
1745
- ...isIndexActive ? { isIndexActive: true } : {},
1746
- ...isSlugActive ? { isSlugActive: true } : {},
1747
- ...isFeatured ? { isFeatured: true } : {},
1748
- ...isShownOnHome ? { isShownOnHome: true } : {},
1749
- ...state1 ? { state1: true } : {},
1750
- ...state2 ? { state2: true } : {},
1751
- ...state3 ? { state3: true } : {},
1752
- ...state4 ? { state4: true } : {},
1753
- ...state5 ? { state5: true } : {},
1754
- ...state6 ? { state6: true } : {},
1755
- ...state7 ? { state7: true } : {},
1756
- ...state8 ? { state8: true } : {},
1757
- ...state9 ? { state9: true } : {},
1758
- ...state10 ? { state10: true } : {},
1759
- // relations
1760
- ...topicId ? { topicId } : {},
1761
- ...topicSlug ? { topic: { slug: topicSlug } } : {},
1762
- ...categoryId ? { parents: { some: { id: categoryId } } } : {},
1763
- ...categorySlug ? { parents: { some: { slug: categorySlug } } } : {},
1764
- // Specified ids
1765
- ...postIds?.length || excludeIds?.length ? {
1766
- id: {
1767
- ...postIds ? { in: postIds } : {},
1768
- ...excludeIds ? { notIn: excludeIds } : {}
1769
- }
1770
- } : {}
1771
- };
1772
- const [items, total] = await prisma.$transaction([
1773
- prisma.post.findMany({
1774
- where,
1775
- orderBy: POST_ORDER_BY,
1776
- include: POST_LIST_CARD_INCLUDE,
1777
- ...createPagination(page, pageSize)
1778
- }),
1779
- prisma.post.count({ where })
1780
- ]);
1781
- return { items, total };
1782
- }
1783
- async function find({
1784
- isActive,
1785
- ...rest
1786
- }) {
1787
- const where = buildWhere3(rest);
1788
- if (!where) return null;
1789
- return prisma.post.findFirst({
1790
- where: { ...where, ...isActive ? { isActive } : {} },
1791
- include: { translations: true }
1792
- });
1793
- }
1794
- async function findMany({
1795
- type,
1796
- topicId
1797
- }) {
1798
- return prisma.post.findMany({
1799
- where: { type, ...topicId ? { topicId } : {} },
1800
- orderBy: POST_ORDER_BY,
1801
- include: { translations: true }
1802
- });
1803
- }
1804
- async function findFull({
1805
- // states
1806
- isActive,
1807
- // relations
1808
- topicSlug,
1809
- ...rest
1810
- }) {
1811
- const where = buildWhere3(rest);
1812
- if (!where) return { post: void 0, prev: void 0, next: void 0 };
1813
- const baseWhere = {
1814
- // states
1815
- ...isActive ? { isActive } : {},
1816
- // relations
1817
- ...topicSlug ? { topic: { slug: topicSlug } } : {}
1818
- };
1819
- const post = await prisma.post.findFirst({
1820
- where: { ...baseWhere, ...where },
1821
- include: POST_FULL_INCLUDE
1822
- });
1823
- if (!post) return { post: void 0, prev: void 0, next: void 0 };
1824
- const next = await prisma.post.findFirst({
1825
- where: {
1826
- ...baseWhere,
1827
- ...rest.type !== void 0 ? { type: rest.type } : {}
1828
- },
1829
- orderBy: POST_ORDER_BY,
1830
- cursor: { id: post.id },
1831
- skip: 1,
1832
- take: 1,
1833
- include: POST_LIST_CARD_INCLUDE
1834
- });
1835
- const reversedOrder = POST_ORDER_BY.map((o) => {
1836
- const key = Object.keys(o)[0];
1837
- return { [key]: o[key] === "asc" ? "desc" : "asc" };
1838
- });
1839
- const prev = await prisma.post.findFirst({
1840
- where: {
1841
- ...baseWhere,
1842
- ...rest.type !== void 0 ? { type: rest.type } : {}
1843
- },
1844
- orderBy: reversedOrder,
1845
- cursor: { id: post.id },
1846
- skip: 1,
1847
- take: 1,
1848
- include: POST_LIST_CARD_INCLUDE
1849
- });
1850
- return {
1851
- post,
1852
- prev,
1853
- next
1854
- };
1855
- }
1856
- return {
1857
- findListCards,
1858
- findMany,
1859
- find,
1860
- findFull
1861
- };
1862
- }
1863
-
1864
- // src/server/infrastructure/database/seo-metadata/command/create-seo-metadata-command-repository.ts
1865
- function createSeoMetadataCommandRepository(prisma) {
1866
- async function upsert({
1867
- // ------------------------------------
1868
- // relations
1869
- // ------------------------------------
1870
- // Post
1871
- postId,
1872
- // ------------------------------------
1873
- // translation
1874
- // ------------------------------------
1875
- translations
1876
- }) {
1877
- await prisma.post.update({
1878
- where: { id: postId },
1879
- data: {
1880
- seoMetadatas: {
1881
- upsert: translations.map((t) => ({
1882
- where: { postId_locale: { postId, locale: t.locale } },
1883
- update: { ...t, alternate: t.alternate },
1884
- create: { ...t, alternate: t.alternate }
1885
- }))
1886
- }
1887
- }
1888
- });
1889
- }
1890
- return {
1891
- upsert
1892
- };
1893
- }
1894
-
1895
- // src/server/server-error.ts
1896
- var ServerError = class _ServerError extends Error {
1897
- i18nKey;
1898
- statusCode;
1899
- constructor({
1900
- message,
1901
- i18nKey,
1902
- statusCode
1903
- }) {
1904
- super(message);
1905
- this.name = this.constructor.name;
1906
- if (i18nKey) this.i18nKey = i18nKey;
1907
- if (statusCode) this.statusCode = statusCode;
1908
- }
1909
- /** 401 Unauthorized */
1910
- static unauthorized() {
1911
- return new _ServerError({ i18nKey: "error.unauthorized", statusCode: 401 });
1912
- }
1913
- /** 403 Forbidden */
1914
- static forbidden() {
1915
- return new _ServerError({ i18nKey: "error.forbidden", statusCode: 403 });
1916
- }
1917
- /** 404 Not found */
1918
- static notFound() {
1919
- return new _ServerError({ i18nKey: "error.not-found", statusCode: 404 });
1920
- }
1921
- /** 500 Internal Server Error */
1922
- static internalServerError() {
1923
- return new _ServerError({
1924
- i18nKey: "error.internal-server-error",
1925
- statusCode: 500
1926
- });
1927
- }
1928
- };
1929
-
1930
- // src/server/interfaces/execution/normalize-error.ts
1931
- var normalizeError = (error, translator) => {
1932
- if (error instanceof ZodError) {
1933
- const errors = error.issues.map((issue) => {
1934
- let message = issue.message;
1935
- if (issue.code === "custom" && issue.params?.["i18nKey"]) {
1936
- message = translator.t(issue.params["i18nKey"]);
1937
- }
1938
- return {
1939
- field: issue.path.join("."),
1940
- // e.path: string[] e.g. ["name", "email"]
1941
- message,
1942
- code: issue.code
1943
- };
1944
- });
1945
- return { message: "Validation faild", errors, statusCode: 422 };
1946
- }
1947
- if (error instanceof ServerError) {
1948
- const message = translator.t(
1949
- error.i18nKey ?? "error.internal-server-error"
1950
- );
1951
- return { message, statusCode: error.statusCode ?? 500 };
1952
- }
1953
- return {
1954
- message: error instanceof Error ? error.message : JSON.stringify(error),
1955
- statusCode: 500,
1956
- isInternal: true
1957
- };
1958
- };
1959
-
1960
- // src/server/interfaces/execution/create-execute-action.ts
1961
- function createExecuteAction({
1962
- initI18n,
1963
- cacheResult,
1964
- cache: cache2,
1965
- logger
1966
- }) {
1967
- return async function executeAction(fn, options = {}) {
1968
- const translator = await initI18n();
1969
- const withCache = options.type === "query" && options.key;
1970
- try {
1971
- const { data, i18nKey, message, meta } = withCache ? await cacheResult({
1972
- key: options.key,
1973
- ...options.ttl ? { ttl: options.ttl } : {},
1974
- load: async () => fn(translator)
1975
- }) : await fn(translator);
1976
- if (options.type === "command") await cache2.clear();
1977
- const finalMessage = i18nKey ? translator.t(i18nKey) : message;
1978
- return result.success({
1979
- ...finalMessage ? { message: finalMessage } : {},
1980
- ...data !== void 0 ? { data } : {},
1981
- ...meta ? { meta } : {}
1982
- });
1983
- } catch (error) {
1984
- const { message, errors, isInternal } = normalizeError(error, translator);
1985
- logger.error({ message, errors });
1986
- return result.error({
1987
- message: isInternal ? "Internal server error" : message,
1988
- ...errors !== void 0 ? { errors } : {}
1989
- });
1990
- }
1991
- };
1992
- }
1993
- function createExecuteApi({ initI18n, logger }) {
1994
- return async function serverApi(fn) {
1995
- const translator = await initI18n();
1996
- try {
1997
- return await fn(translator);
1998
- } catch (error) {
1999
- const { message, errors, statusCode, isInternal } = normalizeError(
2000
- error,
2001
- translator
2002
- );
2003
- logger.error({ message, errors });
2004
- return NextResponse.json(
2005
- result.error({
2006
- message: isInternal ? "Internal server error" : message,
2007
- ...errors ? { errors } : {}
2008
- }),
2009
- { status: statusCode }
2010
- );
2011
- }
2012
- };
2013
- }
2014
-
2015
- // src/server/interfaces/execution/create-run-action.ts
2016
- function createRunAction({ logger }) {
2017
- return async function runAction(action, options) {
2018
- const { shouldRun, onSuccess, onError } = options || {};
2019
- if (shouldRun) {
2020
- const shouldProceed = await shouldRun();
2021
- if (shouldProceed === false) {
2022
- return {};
2023
- }
2024
- }
2025
- try {
2026
- const response = await action();
2027
- if (response.success) {
2028
- const data = response.data ?? {};
2029
- onSuccess?.(data);
2030
- return data;
2031
- }
2032
- throw new Error(response.message);
2033
- } catch (error) {
2034
- logger.error({ error });
2035
- onError?.(error);
2036
- return {};
2037
- }
2038
- };
2039
- }
2040
-
2041
- // src/server/interfaces/middlewares/auth/create-auth-middleware.ts
2042
- function createAuthMiddleware({
2043
- adminRefreshTokenCommandRepository,
2044
- authUseCases,
2045
- verifyAccessToken,
2046
- verifyRefreshToken,
2047
- headers
2048
- }) {
2049
- const authMiddleware = {
2050
- async authenticate() {
2051
- const verifiedAccessToken = await verifyAccessToken();
2052
- if (verifiedAccessToken) return verifiedAccessToken.admin;
2053
- const verifiedRefreshToken = await verifyRefreshToken();
2054
- if (!verifiedRefreshToken) throw ServerError.unauthorized();
2055
- const { adminRefreshToken, admin } = verifiedRefreshToken;
2056
- await adminRefreshTokenCommandRepository.delete({
2057
- id: adminRefreshToken.id
2058
- });
2059
- await authUseCases.refreshTokens({
2060
- admin,
2061
- deviceInfo: adminRefreshToken.deviceInfo,
2062
- ip: (await headers()).get("x-forwarded-for") || "unknown"
2063
- });
2064
- return admin;
2065
- }
2066
- };
2067
- return authMiddleware;
2068
- }
2069
-
2070
- // src/server/interfaces/middlewares/auth/create-verify-access-token.ts
2071
- function createVerifyAccessToken({
2072
- adminQueryRepository,
2073
- jwtService,
2074
- cryptoService,
2075
- cookieService,
2076
- config
2077
- }) {
2078
- return async function verifyAccessToken() {
2079
- try {
2080
- const token = await cookieService.getSignedCookie({
2081
- name: config.accessTokenName
2082
- });
2083
- const payload = jwtService.verify({
2084
- token,
2085
- secret: cryptoService.hash(config.accessTokenSecret)
2086
- });
2087
- const admin = await adminQueryRepository.findFull({
2088
- id: payload["id"]
2089
- });
2090
- return admin ? { admin } : null;
2091
- } catch {
2092
- return null;
2093
- }
2094
- };
2095
- }
2096
-
2097
- // src/server/interfaces/middlewares/auth/create-verify-refresh-token.ts
2098
- function createVerifyRefreshToken({
2099
- adminQueryRepository,
2100
- adminRefreshTokenQueryRepository,
2101
- cryptoService,
2102
- cookieService,
2103
- config
2104
- }) {
2105
- return async function verifyRefreshToken() {
2106
- try {
2107
- const token = await cookieService.getSignedCookie({
2108
- name: config.refreshTokenName
2109
- });
2110
- const adminRefreshToken = await adminRefreshTokenQueryRepository.findByToken({
2111
- tokenHash: cryptoService.hash(token)
2112
- });
2113
- if (!adminRefreshToken) return null;
2114
- const admin = await adminQueryRepository.findFull({
2115
- id: adminRefreshToken.adminId
2116
- });
2117
- return admin ? { adminRefreshToken, admin } : null;
2118
- } catch {
2119
- return null;
2120
- }
2121
- };
2122
- }
2123
-
2124
- // src/server/interfaces/actions/auth/sign-in/sign-in-validator.ts
2125
- var signInValidator = (schemas) => schemas.z.object({
2126
- email: schemas.email(),
2127
- password: schemas.password()
2128
- });
2129
-
2130
- // src/server/interfaces/actions/auth/sign-in/create-sign-in-action.ts
2131
- function createSignInAction(ctx) {
2132
- return async function signInAction({
2133
- formData,
2134
- deviceInfo
2135
- }) {
2136
- const {
2137
- repositories: {
2138
- adminQueryRepository,
2139
- adminRefreshTokenCommandRepository
2140
- },
2141
- useCases: { authUseCases },
2142
- action: { executeAction, ipRateLimiter },
2143
- http: { headers },
2144
- schemas: { schemas }
2145
- } = ctx;
2146
- return executeAction(
2147
- async () => {
2148
- await ipRateLimiter({ key: ["sign-in"] });
2149
- const { email, password } = await signInValidator(schemas).parseAsync(formData);
2150
- const verified = await authUseCases.verifyCredentials({
2151
- email,
2152
- password
2153
- });
2154
- const admin = await adminQueryRepository.findFull({
2155
- id: verified.id
2156
- });
2157
- if (!admin) throw ServerError.notFound();
2158
- await authUseCases.refreshTokens({
2159
- admin,
2160
- deviceInfo,
2161
- ip: (await headers()).get("x-forwarded-for") || "unknown"
2162
- });
2163
- await adminRefreshTokenCommandRepository.deleteManyByExpired();
2164
- return {
2165
- i18nKey: "ok.sign-in-ok",
2166
- data: { admin }
2167
- };
2168
- },
2169
- { type: "command" }
2170
- );
2171
- };
2172
- }
2173
-
2174
- // src/server/interfaces/actions/auth/sign-out/create-sign-out-action.ts
2175
- function createSignOutAction(ctx) {
2176
- const {
2177
- services: { cryptoService, cookieService },
2178
- repositories: { adminRefreshTokenCommandRepository },
2179
- action: { executeAction },
2180
- config: { accessTokenName, refreshTokenName }
2181
- } = ctx;
2182
- return async function signOutAction() {
2183
- return executeAction(
2184
- async () => {
2185
- let token;
2186
- try {
2187
- token = await cookieService.getSignedCookie({
2188
- name: refreshTokenName
2189
- });
2190
- } catch {
2191
- }
2192
- if (token) {
2193
- await adminRefreshTokenCommandRepository.delete({
2194
- tokenHash: cryptoService.hash(token)
2195
- });
2196
- }
2197
- await cookieService.delete({ name: accessTokenName });
2198
- await cookieService.delete({ name: refreshTokenName });
2199
- return {
2200
- i18nKey: "ok.sign-out-ok"
2201
- };
2202
- },
2203
- { type: "command" }
2204
- );
2205
- };
2206
- }
2207
-
2208
- // src/server/interfaces/actions/auth/verify/create-verify-action.ts
2209
- function createVerifyAction(ctx) {
2210
- const {
2211
- middlewares: { authMiddleware },
2212
- action: { executeAction, ipRateLimiter }
2213
- } = ctx;
2214
- return async function verifyAction() {
2215
- return executeAction(async () => {
2216
- await ipRateLimiter({ key: ["verify"], maxAttempts: 60 });
2217
- const admin = await authMiddleware.authenticate();
2218
- return {
2219
- data: { admin }
2220
- };
2221
- });
2222
- };
2223
- }
2224
-
2225
- // src/server/interfaces/actions/auth/change-password/change-password-validator.ts
2226
- var changePasswordValidator = (schemas) => schemas.z.object({
2227
- password: schemas.password(),
2228
- newPassword: schemas.password(),
2229
- newPasswordConfirm: schemas.password()
2230
- }).superRefine((data, ctx) => {
2231
- if (data.newPassword !== data.newPasswordConfirm) {
2232
- ctx.addIssue({
2233
- code: "custom",
2234
- params: { i18nKey: "validator.password-confirm" },
2235
- path: ["newPassword"]
2236
- });
2237
- ctx.addIssue({
2238
- code: "custom",
2239
- params: { i18nKey: "validator.password-confirm" },
2240
- path: ["newPasswordConfirm"]
2241
- });
2242
- }
2243
- });
2244
-
2245
- // src/server/interfaces/actions/auth/change-password/create-change-password-action.ts
2246
- function createChangePasswordAction(ctx) {
2247
- return async function changePasswordAction({
2248
- formData
2249
- }) {
2250
- const {
2251
- action: { executeAction, ipRateLimiter },
2252
- useCases: { authUseCases },
2253
- middlewares: { authMiddleware },
2254
- schemas: { schemas }
2255
- } = ctx;
2256
- return executeAction(
2257
- async () => {
2258
- await ipRateLimiter({ key: ["change-password"] });
2259
- const { email } = await authMiddleware.authenticate();
2260
- const { password, newPassword } = await changePasswordValidator(schemas).parseAsync(formData);
2261
- await authUseCases.verifyCredentials({ email, password });
2262
- await authUseCases.updatePassword({ email, password: newPassword });
2263
- return {
2264
- i18nKey: "ok.change-password-ok"
2265
- };
2266
- },
2267
- { type: "command" }
2268
- );
2269
- };
2270
- }
2271
-
2272
- // src/server/interfaces/actions/auth/verify-email/verify-email-validator.ts
2273
- var verifyEmailValidator = (schemas) => schemas.z.object({
2274
- email: schemas.email(),
2275
- emailVerificationToken: schemas.z.string().trim().max(1e3)
2276
- });
2277
-
2278
- // src/server/interfaces/actions/auth/verify-email/create-verify-email-action.ts
2279
- function createVerifyEmailAction(ctx) {
2280
- return async function verifyEmailAction({
2281
- formData
2282
- }) {
2283
- const {
2284
- repositories: { adminQueryRepository },
2285
- useCases: { authUseCases },
2286
- action: { executeAction, ipRateLimiter },
2287
- schemas: { schemas }
2288
- } = ctx;
2289
- return executeAction(
2290
- async () => {
2291
- await ipRateLimiter({ key: ["verify-email"] });
2292
- const { email, emailVerificationToken } = await verifyEmailValidator(schemas).parseAsync(formData);
2293
- const admin = await adminQueryRepository.find({ email });
2294
- if (!admin) throw new ServerError({ i18nKey: "error.email-not-found" });
2295
- await authUseCases.verifyEmailAndUpdate({
2296
- token: emailVerificationToken || "",
2297
- admin
2298
- });
2299
- return {
2300
- i18nKey: "ok.verify-email-ok",
2301
- data: { admin }
2302
- };
2303
- },
2304
- { type: "command" }
2305
- );
2306
- };
2307
- }
2308
-
2309
- // src/server/interfaces/actions/auth/email-unverifired/email-unverifired-validator.ts
2310
- var emailUnverifiedValidator = (schemas) => schemas.z.object({
2311
- email: schemas.email()
2312
- });
2313
-
2314
- // src/server/interfaces/actions/auth/email-unverifired/create-email-unverifired-action.ts
2315
- function createEmailUnverifiedAction(ctx) {
2316
- return async function emailUnverifiedAction({
2317
- formData
2318
- }) {
2319
- const {
2320
- repositories: { adminQueryRepository },
2321
- action: { executeAction, ipRateLimiter },
2322
- emails: { emailVerificationEmail },
2323
- schemas: { schemas }
2324
- } = ctx;
2325
- return executeAction(
2326
- async (translator) => {
2327
- await ipRateLimiter({
2328
- key: ["email-unverified"],
2329
- maxAttempts: 2,
2330
- timeWindow: 60
2331
- });
2332
- const { email } = await emailUnverifiedValidator(schemas).parseAsync(formData);
2333
- const admin = await adminQueryRepository.find({ email });
2334
- if (!admin) throw new ServerError({ i18nKey: "error.email-not-found" });
2335
- void emailVerificationEmail.send({ translator, admin });
2336
- return {
2337
- i18nKey: "ok.email-unverified-ok"
2338
- };
2339
- },
2340
- { type: "command" }
2341
- );
2342
- };
2343
- }
2344
-
2345
- // src/server/interfaces/actions/auth/forgot-password/forgot-password-validator.ts
2346
- var forgetPasswordValidator = (schemas) => schemas.z.object({
2347
- email: schemas.email()
2348
- });
2349
-
2350
- // src/server/interfaces/actions/auth/forgot-password/create-forgot-password-action.ts
2351
- function createForgotPasswordAction(ctx) {
2352
- return async function forgotPasswordAction({
2353
- formData
2354
- }) {
2355
- const {
2356
- repositories: { adminQueryRepository },
2357
- action: { executeAction, ipRateLimiter },
2358
- emails: { forgotPasswordEmail },
2359
- schemas: { schemas }
2360
- } = ctx;
2361
- return executeAction(
2362
- async (translator) => {
2363
- await ipRateLimiter({
2364
- key: ["forget-password"],
2365
- maxAttempts: 2,
2366
- timeWindow: 60
2367
- });
2368
- const { email } = await forgetPasswordValidator(schemas).parseAsync(formData);
2369
- const admin = await adminQueryRepository.find({ email });
2370
- if (!admin) throw new ServerError({ i18nKey: "error.email-not-found" });
2371
- void forgotPasswordEmail.send({ translator, admin });
2372
- return {
2373
- i18nKey: "ok.forgot-password-ok"
2374
- };
2375
- },
2376
- { type: "command" }
2377
- );
2378
- };
2379
- }
2380
-
2381
- // src/server/interfaces/actions/auth/reset-password/reset-password-validator.ts
2382
- var resetPasswordValidator = (schemas) => schemas.z.object({
2383
- passwordResetToken: schemas.z.string().trim().max(1e3),
2384
- newPassword: schemas.password(),
2385
- newPasswordConfirm: schemas.password()
2386
- }).superRefine((data, ctx) => {
2387
- if (data.newPassword !== data.newPasswordConfirm) {
2388
- ctx.addIssue({
2389
- code: "custom",
2390
- message: "custom.password-confirm",
2391
- path: ["newPassword"]
2392
- });
2393
- ctx.addIssue({
2394
- code: "custom",
2395
- message: "custom.password-confirm",
2396
- path: ["newPasswordConfirm"]
2397
- });
2398
- }
2399
- });
2400
-
2401
- // src/server/interfaces/actions/auth/reset-password/create-reset-password-action.ts
2402
- function createResetPasswordAction(ctx) {
2403
- return async function ResetPasswordAction({
2404
- formData
2405
- }) {
2406
- const {
2407
- useCases: { authUseCases },
2408
- action: { executeAction, ipRateLimiter },
2409
- schemas: { schemas }
2410
- } = ctx;
2411
- return executeAction(
2412
- async () => {
2413
- await ipRateLimiter({ key: ["reset-password"] });
2414
- const { newPassword, passwordResetToken } = await resetPasswordValidator(schemas).parseAsync(formData);
2415
- const decoded = authUseCases.verifyPasswordResetToken({
2416
- token: passwordResetToken
2417
- });
2418
- await authUseCases.updatePassword({
2419
- email: decoded.email,
2420
- password: newPassword
2421
- });
2422
- return {
2423
- i18nKey: "ok.reset-password-ok"
2424
- };
2425
- },
2426
- { type: "command" }
2427
- );
2428
- };
2429
- }
2430
-
2431
- // src/server/interfaces/actions/resources/admin/commands/create/admin-create-validator.ts
2432
- var adminCreateValidator = (schemas) => schemas.z.object({
2433
- // core
2434
- role: schemas.z.enum(Object.values(ADMIN_ROLES)),
2435
- email: schemas.email().unique({ table: "admins", column: "email" }),
2436
- password: schemas.password(),
2437
- // better seo
2438
- socialLinks: schemas.array(schemas.url()),
2439
- // ----------------------------------------------------------------------------
2440
- // relations
2441
- // ----------------------------------------------------------------------------
2442
- // File
2443
- avatarImage: schemas.z.object({ id: schemas.id().exist({ table: "files" }) }).nullable(),
2444
- // ----------------------------------------------------------------------------
2445
- // translation
2446
- // ----------------------------------------------------------------------------
2447
- translations: schemas.array(
2448
- schemas.z.object({
2449
- // core
2450
- locale: schemas.locale(),
2451
- // text
2452
- name: schemas.text().nullable(),
2453
- // better seo
2454
- authorName: schemas.text().nullable(),
2455
- description: schemas.text().nullable(),
2456
- jobTitle: schemas.text().nullable(),
2457
- url: schemas.url().nullable(),
2458
- worksFor: schemas.text().nullable(),
2459
- knowsAbout: schemas.array(schemas.text()),
2460
- homeLocation: schemas.text().nullable(),
2461
- nationality: schemas.text().nullable()
2462
- })
2463
- )
2464
- });
2465
-
2466
- // src/server/interfaces/actions/resources/admin/commands/create/create-admin-create-action.ts
2467
- function createAdminCreateAction(ctx) {
2468
- const {
2469
- services: { argon2Service },
2470
- repositories: { adminCommandRepository },
2471
- middlewares: { authMiddleware },
2472
- action: { executeAction },
2473
- emails: { emailVerificationEmail },
2474
- schemas: { schemas }
2475
- } = ctx;
2476
- return async function adminCreateAction({
2477
- formData
2478
- }) {
2479
- return executeAction(
2480
- async (translator) => {
2481
- await authMiddleware.authenticate();
2482
- const {
2483
- role,
2484
- email,
2485
- password,
2486
- socialLinks,
2487
- avatarImage,
2488
- translations
2489
- } = await adminCreateValidator(schemas).parseAsync(formData);
2490
- const passwordHash = await argon2Service.hash(password);
2491
- const created = await adminCommandRepository.create({
2492
- role,
2493
- email,
2494
- passwordHash,
2495
- socialLinks,
2496
- avatarImage,
2497
- translations
2498
- });
2499
- void emailVerificationEmail.send({ translator, admin: created });
2500
- return {
2501
- i18nKey: "ok.admins-store-ok",
2502
- data: { admin: created }
2503
- };
2504
- },
2505
- { type: "command" }
2506
- );
2507
- };
2508
- }
2509
-
2510
- // src/server/interfaces/actions/resources/admin/commands/update/admin-update-validator.ts
2511
- var adminUpdateValidator = (schemas, id) => schemas.z.object({
2512
- // core
2513
- role: schemas.z.enum(Object.values(ADMIN_ROLES)),
2514
- email: schemas.email().unique({
2515
- table: "admins",
2516
- column: "email",
2517
- excludeSelf: { name: "id", value: id }
2518
- }).optional(),
2519
- // better seo
2520
- socialLinks: schemas.array(schemas.url()),
2521
- // ----------------------------------------------------------------------------
2522
- // relations
2523
- // ----------------------------------------------------------------------------
2524
- // File
2525
- avatarImage: schemas.z.object({ id: schemas.id().exist({ table: "files" }) }).nullable(),
2526
- // ----------------------------------------------------------------------------
2527
- // translation
2528
- // ----------------------------------------------------------------------------
2529
- translations: schemas.array(
2530
- schemas.z.object({
2531
- // core
2532
- locale: schemas.locale(),
2533
- // text
2534
- name: schemas.text().nullable(),
2535
- // better seo
2536
- authorName: schemas.text().nullable(),
2537
- description: schemas.text().nullable(),
2538
- jobTitle: schemas.text().nullable(),
2539
- url: schemas.url().nullable(),
2540
- worksFor: schemas.text().nullable(),
2541
- knowsAbout: schemas.array(schemas.text()),
2542
- homeLocation: schemas.text().nullable(),
2543
- nationality: schemas.text().nullable()
2544
- })
2545
- )
2546
- });
2547
-
2548
- // src/server/interfaces/actions/resources/admin/commands/update/create-admin-update-action.ts
2549
- function createAdminUpdateAction(ctx) {
2550
- const {
2551
- repositories: { adminQueryRepository, adminCommandRepository },
2552
- middlewares: { authMiddleware },
2553
- action: { executeAction },
2554
- emails: { emailVerificationEmail },
2555
- schemas: { schemas }
2556
- } = ctx;
2557
- return async function adminUpdateAction({
2558
- id,
2559
- formData
2560
- }) {
2561
- return executeAction(
2562
- async (translator) => {
2563
- const currentAdmin = await authMiddleware.authenticate();
2564
- const targetAdmin = await adminQueryRepository.findFull({ id });
2565
- if (!targetAdmin) throw ServerError.notFound();
2566
- const isSelf = currentAdmin.id === targetAdmin.id;
2567
- const canModifyOthers = currentAdmin.role === ADMIN_ROLES.SUPER_ADMIN;
2568
- if (!isSelf && !canModifyOthers) throw ServerError.forbidden();
2569
- const { role, email, socialLinks, avatarImage, translations } = await adminUpdateValidator(schemas, targetAdmin.id).parseAsync(
2570
- formData
2571
- );
2572
- const isUpdatingEmail = email !== targetAdmin.email;
2573
- if (isUpdatingEmail) {
2574
- void emailVerificationEmail.send({
2575
- translator,
2576
- admin: targetAdmin,
2577
- ...email ? { newEmail: email } : {}
2578
- });
2579
- }
2580
- const updatedAdmin = await adminCommandRepository.update({
2581
- id: targetAdmin.id,
2582
- role,
2583
- ...email !== void 0 ? { email } : {},
2584
- socialLinks,
2585
- avatarImage,
2586
- translations,
2587
- emailVerifiedAt: !isUpdatingEmail ? targetAdmin.emailVerifiedAt : null
2588
- // Clear emailVerifiedAt if updating a new email
2589
- });
2590
- return {
2591
- i18nKey: !isUpdatingEmail ? "ok.update-ok" : "ok.admins-update-email-ok",
2592
- data: { admin: updatedAdmin }
2593
- };
2594
- },
2595
- { type: "command" }
2596
- );
2597
- };
2598
- }
2599
-
2600
- // src/server/interfaces/actions/resources/admin/commands/delete/create-admin-delete-action.ts
2601
- function createAdminDeleteAction(ctx) {
2602
- const {
2603
- repositories: { adminQueryRepository, adminCommandRepository },
2604
- middlewares: { authMiddleware },
2605
- action: { executeAction }
2606
- } = ctx;
2607
- return async function adminDeleteAction({ targetId }) {
2608
- return executeAction(
2609
- async () => {
2610
- await authMiddleware.authenticate();
2611
- const targetAdmin = await adminQueryRepository.findFull({
2612
- id: targetId
2613
- });
2614
- if (!targetAdmin) throw ServerError.notFound();
2615
- if (targetAdmin.role === ADMIN_ROLES.SUPER_ADMIN) {
2616
- throw new ServerError({ i18nKey: "error.admins-destroy-forbidden" });
2617
- }
2618
- await adminCommandRepository.delete({ id: targetId });
2619
- return {
2620
- i18nKey: "ok.destroy-ok"
2621
- };
2622
- },
2623
- { type: "command" }
2624
- );
2625
- };
2626
- }
2627
-
2628
- // src/server/interfaces/actions/resources/admin/queries/create-admin-find-full-action.ts
2629
- function createAdminFindFullAction(ctx) {
2630
- const {
2631
- repositories: { adminQueryRepository },
2632
- middlewares: { authMiddleware },
2633
- action: { executeAction }
2634
- } = ctx;
2635
- return async function adminFindFullAction(params) {
2636
- return executeAction(
2637
- async () => {
2638
- await authMiddleware.authenticate();
2639
- const admin = await adminQueryRepository.findFull(params);
2640
- if (!admin) throw ServerError.notFound();
2641
- return {
2642
- data: { admin }
2643
- };
2644
- },
2645
- {
2646
- type: "query",
2647
- key: ["admin", "findFullAction", params.id, params.email]
2648
- }
2649
- );
2650
- };
2651
- }
2652
-
2653
- // src/server/interfaces/actions/resources/admin/queries/create-admin-find-list-cards-action.ts
2654
- function createAdminFindListCardsAction(ctx) {
2655
- const {
2656
- repositories: { adminQueryRepository },
2657
- middlewares: { authMiddleware },
2658
- action: { executeAction }
2659
- } = ctx;
2660
- return async function adminFindFullAction(params) {
2661
- return executeAction(
2662
- async ({ locale }) => {
2663
- const { role } = await authMiddleware.authenticate();
2664
- const { items, total } = await adminQueryRepository.findListCards({
2665
- ...params,
2666
- locale,
2667
- role
2668
- });
2669
- return {
2670
- data: { items, total }
2671
- };
2672
- },
2673
- {
2674
- type: "query",
2675
- key: [
2676
- "admin",
2677
- "findListCardsAction",
2678
- params.searchString,
2679
- ...params.adminIds ?? [],
2680
- params.page,
2681
- params.pageSize
2682
- ]
2683
- }
2684
- );
2685
- };
2686
- }
2687
-
2688
- // src/server/interfaces/actions/resources/admin-refresh-token/commands/delete/create-admin-refresh-token-delete-action.ts
2689
- function createAdminRefreshTokenDeleteAction(ctx) {
2690
- const {
2691
- repositories: {
2692
- adminRefreshTokenQueryRepository,
2693
- adminRefreshTokenCommandRepository
2694
- },
2695
- middlewares: { authMiddleware },
2696
- action: { executeAction }
2697
- } = ctx;
2698
- return async function adminRefreshTokenDeleteAction(tokenHash) {
2699
- return executeAction(
2700
- async () => {
2701
- const currentAdmin = await authMiddleware.authenticate();
2702
- const targetAdminRefreshToken = await adminRefreshTokenQueryRepository.findByToken({
2703
- tokenHash
2704
- });
2705
- if (!targetAdminRefreshToken) throw ServerError.notFound();
2706
- const isSelf = currentAdmin.id === targetAdminRefreshToken.adminId;
2707
- const canModifyOthers = currentAdmin.role === ADMIN_ROLES.SUPER_ADMIN;
2708
- if (!isSelf && !canModifyOthers) throw ServerError.forbidden();
2709
- await adminRefreshTokenCommandRepository.delete({
2710
- id: targetAdminRefreshToken.id
2711
- });
2712
- return {
2713
- i18nKey: "ok.destroy-ok"
2714
- };
2715
- },
2716
- { type: "command" }
2717
- );
2718
- };
2719
- }
2720
-
2721
- // src/server/interfaces/actions/resources/admin-refresh-token/queries/create-admin-refresh-token-find-full-action.ts
2722
- function createAdminRefreshTokenFindManyAction(ctx) {
2723
- const {
2724
- services: { cryptoService, cookieService },
2725
- repositories: { adminRefreshTokenQueryRepository },
2726
- middlewares: { authMiddleware },
2727
- action: { executeAction },
2728
- config: { refreshTokenName }
2729
- } = ctx;
2730
- return async function adminRefreshTokenFindManyAction({
2731
- adminId
2732
- }) {
2733
- return executeAction(
2734
- async () => {
2735
- await authMiddleware.authenticate();
2736
- const token = await cookieService.getSignedCookie({
2737
- name: refreshTokenName
2738
- });
2739
- const currentToken = await adminRefreshTokenQueryRepository.findByToken(
2740
- { tokenHash: cryptoService.hash(token) }
2741
- );
2742
- if (!currentToken) throw ServerError.notFound();
2743
- const adminRefreshTokens = await adminRefreshTokenQueryRepository.findManyByAdminId({
2744
- adminId
2745
- });
2746
- return {
2747
- data: {
2748
- adminRefreshTokens,
2749
- currentToken
2750
- }
2751
- };
2752
- },
2753
- {
2754
- type: "query",
2755
- key: ["admin-refresh-token", "findManyAction", adminId]
2756
- }
2757
- );
2758
- };
2759
- }
2760
-
2761
- // src/server/interfaces/actions/resources/file/commands/create/file-create-validator.ts
2762
- var fileCreateValidator = (schemas) => schemas.z.object({
2763
- key: schemas.key(),
2764
- checksum: schemas.sha256Hash(),
2765
- // file meta
2766
- fileMeta: schemas.z.object({
2767
- type: schemas.text(),
2768
- size: schemas.positiveNumber(),
2769
- name: schemas.text()
2770
- }),
2771
- // media info
2772
- width: schemas.positiveNumber().nullable().optional(),
2773
- height: schemas.positiveNumber().nullable().optional(),
2774
- duration: schemas.positiveNumber().nullable().optional(),
2775
- // ----------------------------------------------------------------------------
2776
- // relations
2777
- // ----------------------------------------------------------------------------
2778
- folder: schemas.z.object({
2779
- id: schemas.id().exist({ table: "folders", column: "id" })
2780
- }).nullable().optional(),
2781
- // Use in [file] pages
2782
- folderKey: schemas.key().exist({ table: "folders", column: "key" }).optional(),
2783
- // Use in Simple Upload
2784
- // ----------------------------------------------------------------------------
2785
- // translation
2786
- // ----------------------------------------------------------------------------
2787
- translations: schemas.array(
2788
- schemas.z.object({
2789
- // core
2790
- locale: schemas.locale(),
2791
- // text
2792
- name: schemas.text().nullable(),
2793
- alt: schemas.text().nullable()
2794
- })
2795
- )
2796
- });
2797
-
2798
- // src/server/interfaces/actions/resources/file/commands/create/create-file-create-action.ts
2799
- function createFileCreateAction(ctx) {
2800
- const {
2801
- repositories: { folderQueryRepository, fileCommandRepository },
2802
- middlewares: { authMiddleware },
2803
- action: { executeAction },
2804
- schemas: { schemas }
2805
- } = ctx;
2806
- return async function fileCreateAction({
2807
- formData
2808
- }) {
2809
- return executeAction(
2810
- async () => {
2811
- await authMiddleware.authenticate();
2812
- const {
2813
- key,
2814
- checksum,
2815
- fileMeta,
2816
- width,
2817
- height,
2818
- duration,
2819
- folder,
2820
- folderKey,
2821
- translations
2822
- } = await fileCreateValidator(schemas).parseAsync(formData);
2823
- let finalFolder = folder;
2824
- if (folderKey && !folder) {
2825
- finalFolder = await folderQueryRepository.findFull({
2826
- key: folderKey
2827
- });
2828
- }
2829
- const createdFile = await fileCommandRepository.create({
2830
- key,
2831
- checksum,
2832
- fileMeta,
2833
- ...width ? { width } : {},
2834
- ...height ? { height } : {},
2835
- ...duration ? { duration } : {},
2836
- ...finalFolder ? { folder: finalFolder } : {},
2837
- translations
2838
- });
2839
- return {
2840
- i18nKey: "ok.store-ok",
2841
- data: { file: createdFile }
2842
- };
2843
- },
2844
- { type: "command" }
2845
- );
2846
- };
2847
- }
2848
-
2849
- // src/server/interfaces/actions/resources/file/commands/update/file-update-validator.ts
2850
- var fileUpdateValidator = (schemas) => schemas.z.object({
2851
- // core
2852
- key: schemas.key().optional(),
2853
- checksum: schemas.sha256Hash().optional(),
2854
- // file meta
2855
- fileMeta: schemas.z.object({
2856
- type: schemas.text(),
2857
- size: schemas.positiveNumber(),
2858
- name: schemas.text()
2859
- }),
2860
- // media info
2861
- width: schemas.positiveNumber().nullable(),
2862
- height: schemas.positiveNumber().nullable(),
2863
- duration: schemas.positiveNumber().nullable(),
2864
- // ----------------------------------------------------------------------------
2865
- // relations
2866
- // ----------------------------------------------------------------------------
2867
- folder: schemas.z.object({
2868
- id: schemas.id().exist({ table: "folders", column: "id" })
2869
- }).nullable().optional(),
2870
- // ----------------------------------------------------------------------------
2871
- // translation
2872
- // ----------------------------------------------------------------------------
2873
- translations: schemas.array(
2874
- schemas.z.object({
2875
- // core
2876
- locale: schemas.locale(),
2877
- // text
2878
- name: schemas.text().nullable(),
2879
- alt: schemas.text().nullable()
2880
- })
2881
- )
2882
- });
2883
-
2884
- // src/server/interfaces/actions/resources/file/commands/update/create-file-update-action.ts
2885
- function createFileUpdateAction(ctx) {
2886
- const {
2887
- services: { storageService },
2888
- repositories: { fileQueryRepository, fileCommandRepository },
2889
- middlewares: { authMiddleware },
2890
- action: { executeAction },
2891
- schemas: { schemas }
2892
- } = ctx;
2893
- return async function fileUpdateAction({
2894
- id,
2895
- formData
2896
- }) {
2897
- return executeAction(
2898
- async () => {
2899
- await authMiddleware.authenticate();
2900
- const { checksum, width, height, duration, translations } = await fileUpdateValidator(schemas).parseAsync(formData);
2901
- const { folder, fileMeta, key: uploadedKey } = formData;
2902
- const foundFile = await fileQueryRepository.findFull({ id });
2903
- if (!foundFile) throw ServerError.notFound();
2904
- const oldKey = foundFile.key;
2905
- let newKey = oldKey;
2906
- const folderChanged = folder?.key !== foundFile.folder?.key;
2907
- if (uploadedKey) {
2908
- newKey = uploadedKey;
2909
- } else if (folderChanged) {
2910
- const folderKey = folder?.key ?? "";
2911
- newKey = path2.join(folderKey, path2.basename(oldKey));
2912
- await storageService.move({ fromKey: oldKey, toKey: newKey });
2913
- }
2914
- const updatedFile = await fileCommandRepository.update({
2915
- file: foundFile,
2916
- id,
2917
- key: newKey,
2918
- checksum: checksum ?? foundFile.checksum,
2919
- fileMeta,
2920
- width,
2921
- height,
2922
- duration,
2923
- folder,
2924
- translations
2925
- });
2926
- if (uploadedKey) {
2927
- await storageService.remove({ key: oldKey });
2928
- }
2929
- return {
2930
- i18nKey: "ok.update-ok",
2931
- data: { file: updatedFile }
2932
- };
2933
- },
2934
- { type: "command" }
2935
- );
2936
- };
2937
- }
2938
-
2939
- // node_modules/yocto-queue/index.js
2940
- var Node = class {
2941
- value;
2942
- next;
2943
- constructor(value) {
2944
- this.value = value;
2945
- }
2946
- };
2947
- var Queue = class {
2948
- #head;
2949
- #tail;
2950
- #size;
2951
- constructor() {
2952
- this.clear();
2953
- }
2954
- enqueue(value) {
2955
- const node = new Node(value);
2956
- if (this.#head) {
2957
- this.#tail.next = node;
2958
- this.#tail = node;
2959
- } else {
2960
- this.#head = node;
2961
- this.#tail = node;
2962
- }
2963
- this.#size++;
2964
- }
2965
- dequeue() {
2966
- const current = this.#head;
2967
- if (!current) {
2968
- return;
2969
- }
2970
- this.#head = this.#head.next;
2971
- this.#size--;
2972
- if (!this.#head) {
2973
- this.#tail = void 0;
2974
- }
2975
- return current.value;
2976
- }
2977
- peek() {
2978
- if (!this.#head) {
2979
- return;
2980
- }
2981
- return this.#head.value;
2982
- }
2983
- clear() {
2984
- this.#head = void 0;
2985
- this.#tail = void 0;
2986
- this.#size = 0;
2987
- }
2988
- get size() {
2989
- return this.#size;
2990
- }
2991
- *[Symbol.iterator]() {
2992
- let current = this.#head;
2993
- while (current) {
2994
- yield current.value;
2995
- current = current.next;
2996
- }
2997
- }
2998
- *drain() {
2999
- while (this.#head) {
3000
- yield this.dequeue();
3001
- }
3002
- }
3003
- };
3004
-
3005
- // node_modules/p-limit/index.js
3006
- function pLimit(concurrency) {
3007
- validateConcurrency(concurrency);
3008
- const queue = new Queue();
3009
- let activeCount = 0;
3010
- const resumeNext = () => {
3011
- if (activeCount < concurrency && queue.size > 0) {
3012
- activeCount++;
3013
- queue.dequeue()();
3014
- }
3015
- };
3016
- const next = () => {
3017
- activeCount--;
3018
- resumeNext();
3019
- };
3020
- const run = async (function_, resolve, arguments_) => {
3021
- const result2 = (async () => function_(...arguments_))();
3022
- resolve(result2);
3023
- try {
3024
- await result2;
3025
- } catch {
3026
- }
3027
- next();
3028
- };
3029
- const enqueue = (function_, resolve, arguments_) => {
3030
- new Promise((internalResolve) => {
3031
- queue.enqueue(internalResolve);
3032
- }).then(run.bind(void 0, function_, resolve, arguments_));
3033
- if (activeCount < concurrency) {
3034
- resumeNext();
3035
- }
3036
- };
3037
- const generator = (function_, ...arguments_) => new Promise((resolve) => {
3038
- enqueue(function_, resolve, arguments_);
3039
- });
3040
- Object.defineProperties(generator, {
3041
- activeCount: {
3042
- get: () => activeCount
3043
- },
3044
- pendingCount: {
3045
- get: () => queue.size
3046
- },
3047
- clearQueue: {
3048
- value() {
3049
- queue.clear();
3050
- }
3051
- },
3052
- concurrency: {
3053
- get: () => concurrency,
3054
- set(newConcurrency) {
3055
- validateConcurrency(newConcurrency);
3056
- concurrency = newConcurrency;
3057
- queueMicrotask(() => {
3058
- while (activeCount < concurrency && queue.size > 0) {
3059
- resumeNext();
3060
- }
3061
- });
3062
- }
3063
- },
3064
- map: {
3065
- async value(iterable, function_) {
3066
- const promises = Array.from(iterable, (value, index) => this(function_, value, index));
3067
- return Promise.all(promises);
3068
- }
3069
- }
3070
- });
3071
- return generator;
3072
- }
3073
- function validateConcurrency(concurrency) {
3074
- if (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {
3075
- throw new TypeError("Expected `concurrency` to be a number from 1 and up");
3076
- }
3077
- }
3078
-
3079
- // src/server/interfaces/actions/resources/file/commands/create-many/file-create-many-validator.ts
3080
- var fileCreateManyValidator = (schemas) => schemas.z.object({
3081
- uploadResults: schemas.array(
3082
- schemas.z.object({
3083
- // core
3084
- key: schemas.key(),
3085
- checksum: schemas.sha256Hash(),
3086
- // file meta
3087
- fileMeta: schemas.z.object({
3088
- type: schemas.text(),
3089
- size: schemas.positiveNumber(),
3090
- name: schemas.text()
3091
- }),
3092
- // media info
3093
- width: schemas.positiveNumber().nullable(),
3094
- height: schemas.positiveNumber().nullable(),
3095
- duration: schemas.positiveNumber().nullable(),
3096
- // ----------------------------------------------------------------------------
3097
- // translation
3098
- // ----------------------------------------------------------------------------
3099
- translations: schemas.array(
3100
- schemas.z.object({
3101
- // core
3102
- locale: schemas.locale(),
3103
- // text
3104
- name: schemas.text().nullable(),
3105
- alt: schemas.text().nullable()
3106
- })
3107
- )
3108
- })
3109
- ),
3110
- // ----------------------------------------------------------------------------
3111
- // relations
3112
- // ----------------------------------------------------------------------------
3113
- folder: schemas.z.object({ id: schemas.id().exist({ table: "folders", column: "id" }) }).nullable().optional()
3114
- });
3115
-
3116
- // src/server/interfaces/actions/resources/file/commands/create-many/create-file-create-many-action.ts
3117
- function createFileCreateManyAction(ctx) {
3118
- const {
3119
- repositories: { fileCommandRepository },
3120
- middlewares: { authMiddleware },
3121
- action: { executeAction },
3122
- schemas: { schemas }
3123
- } = ctx;
3124
- return async function fileCreateManyAction({
3125
- formData
3126
- }) {
3127
- return executeAction(
3128
- async () => {
3129
- await authMiddleware.authenticate();
3130
- const { uploadResults, folder } = await fileCreateManyValidator(schemas).parseAsync(formData);
3131
- const limit = pLimit(5);
3132
- await Promise.all(
3133
- uploadResults.map(
3134
- (file) => limit(async () => {
3135
- await fileCommandRepository.create({
3136
- key: file.key,
3137
- fileMeta: file.fileMeta,
3138
- checksum: file.checksum,
3139
- width: file.width,
3140
- height: file.height,
3141
- duration: file.duration,
3142
- ...folder !== void 0 ? { folder } : {},
3143
- translations: file.translations
3144
- });
3145
- })
3146
- )
3147
- );
3148
- return {
3149
- i18nKey: "ok.store-ok",
3150
- data: { count: uploadResults.length }
3151
- };
3152
- },
3153
- { type: "command" }
3154
- );
3155
- };
3156
- }
3157
-
3158
- // src/server/interfaces/actions/resources/file/commands/purge-many/file-purge-many-validator.ts
3159
- var filePurgeManyValidator = (schemas) => schemas.z.object({
3160
- ids: schemas.array(schemas.id().exist({ table: "files", column: "id" }))
3161
- });
3162
-
3163
- // src/server/interfaces/actions/resources/file/commands/purge-many/create-file-purge-many-action.ts
3164
- function createFilePurgeManyAction(ctx) {
3165
- const {
3166
- services: { storageService },
3167
- repositories: { fileQueryRepository, fileCommandRepository },
3168
- middlewares: { authMiddleware },
3169
- action: { executeAction },
3170
- schemas: { schemas }
3171
- } = ctx;
3172
- return async function filePurgeManyAction({
3173
- formData
3174
- }) {
3175
- return executeAction(
3176
- async () => {
3177
- await authMiddleware.authenticate();
3178
- const { ids: ids2 } = await filePurgeManyValidator(schemas).parseAsync(formData);
3179
- const foundFiles = await fileQueryRepository.findManyByIds({ ids: ids2 });
3180
- if (foundFiles.length === 0) throw ServerError.notFound();
3181
- if (foundFiles.some((file) => isFileLocked(file))) {
3182
- throw new ServerError({ i18nKey: "error.files-destroy-is-locked" });
3183
- }
3184
- const keys = foundFiles.map((file) => file.key);
3185
- await Promise.all(
3186
- keys.map(async (key) => await storageService.remove({ key }))
3187
- );
3188
- await Promise.all(
3189
- foundFiles.map(
3190
- async (file) => await fileCommandRepository.delete({ id: file.id })
3191
- )
3192
- );
3193
- return {
3194
- i18nKey: "ok.destroy-ok"
3195
- };
3196
- },
3197
- { type: "command" }
3198
- );
3199
- };
3200
- }
3201
-
3202
- // src/server/interfaces/actions/resources/file/commands/restore-many/file-create-restore-validator.ts
3203
- var fileRestoreManyValidator = (schemas) => schemas.z.object({
3204
- ids: schemas.array(schemas.id().exist({ table: "files", column: "id" }))
3205
- });
3206
-
3207
- // src/server/interfaces/actions/resources/file/commands/restore-many/create-file-restore-many-action.ts
3208
- function createFileRestoreManyAction(ctx) {
3209
- const {
3210
- repositories: { fileCommandRepository },
3211
- middlewares: { authMiddleware },
3212
- action: { executeAction },
3213
- schemas: { schemas }
3214
- } = ctx;
3215
- return async function fileRestoreManyAction({
3216
- formData
3217
- }) {
3218
- return executeAction(
3219
- async () => {
3220
- await authMiddleware.authenticate();
3221
- const { ids: ids2 } = await fileRestoreManyValidator(schemas).parseAsync(formData);
3222
- await fileCommandRepository.restoreMany({ ids: ids2 });
3223
- return {
3224
- i18nKey: "ok.restore-ok"
3225
- };
3226
- },
3227
- { type: "command" }
3228
- );
3229
- };
3230
- }
3231
-
3232
- // src/server/interfaces/actions/resources/file/commands/soft-delete/create-file-soft-delete-action.ts
3233
- function createFileSoftDeleteAction(ctx) {
3234
- const {
3235
- repositories: { fileQueryRepository, fileCommandRepository },
3236
- middlewares: { authMiddleware },
3237
- action: { executeAction }
3238
- } = ctx;
3239
- return async function fileSoftDeleteAction({ id }) {
3240
- return executeAction(
3241
- async () => {
3242
- await authMiddleware.authenticate();
3243
- const foundFile = await fileQueryRepository.findFull({ id });
3244
- if (!foundFile) throw ServerError.notFound();
3245
- if (isFileLocked(foundFile)) {
3246
- throw new ServerError({ i18nKey: "error.files-destroy-is-locked" });
3247
- }
3248
- await fileCommandRepository.softDelete({ id });
3249
- return {
3250
- i18nKey: "ok.destroy-ok"
3251
- };
3252
- },
3253
- { type: "command" }
3254
- );
3255
- };
3256
- }
3257
-
3258
- // src/server/interfaces/actions/resources/file/commands/soft-delete-many/file-soft-delete-many-validator.ts
3259
- var fileSoftDeleteManyValidator = (schemas) => schemas.z.object({
3260
- ids: schemas.array(schemas.id().exist({ table: "files", column: "id" }))
3261
- });
3262
-
3263
- // src/server/interfaces/actions/resources/file/commands/soft-delete-many/create-file-soft-delete-many-action.ts
3264
- function createFileSoftDeleteManyAction(ctx) {
3265
- const {
3266
- repositories: { fileQueryRepository, fileCommandRepository },
3267
- middlewares: { authMiddleware },
3268
- action: { executeAction },
3269
- schemas: { schemas }
3270
- } = ctx;
3271
- return async function fileSoftDeleteManyAction({
3272
- formData
3273
- }) {
3274
- return executeAction(
3275
- async () => {
3276
- await authMiddleware.authenticate();
3277
- const { ids: ids2 } = await fileSoftDeleteManyValidator(schemas).parseAsync(formData);
3278
- const foundFiles = await fileQueryRepository.findManyByIds({ ids: ids2 });
3279
- if (foundFiles.length === 0) throw ServerError.notFound();
3280
- const lockedFiles = [];
3281
- const targetIds = [];
3282
- for (const file of foundFiles) {
3283
- if (isFileLocked(file)) {
3284
- lockedFiles.push(file.id);
3285
- } else {
3286
- targetIds.push(file.id);
3287
- }
3288
- }
3289
- const hasLockedFile = lockedFiles.length > 0;
3290
- const count = await fileCommandRepository.softDeleteMany({
3291
- ids: targetIds
3292
- });
3293
- if (count === 0) {
3294
- throw new ServerError({ i18nKey: "error.files-batch-destroy-no" });
3295
- }
3296
- return {
3297
- i18nKey: hasLockedFile ? "ok.files-batch-destroy-has-locked" : "ok.destroy-ok"
3298
- };
3299
- },
3300
- { type: "command" }
3301
- );
3302
- };
3303
- }
3304
-
3305
- // src/server/interfaces/actions/resources/file/querires/create-file-find-full-action.ts
3306
- function createFileFindFullAction(ctx) {
3307
- const {
3308
- repositories: { fileQueryRepository },
3309
- action: { executeAction }
3310
- } = ctx;
3311
- return async function FileFindFullAction(params) {
3312
- return executeAction(
3313
- async () => {
3314
- const file = await fileQueryRepository.findFull(params);
3315
- if (!file) throw ServerError.notFound();
3316
- return {
3317
- data: { file }
3318
- };
3319
- },
3320
- {
3321
- type: "query",
3322
- key: ["file", "findFullAction", params.id]
3323
- }
3324
- );
3325
- };
3326
- }
3327
-
3328
- // src/server/interfaces/actions/resources/file/querires/create-file-find-list-cards-action.ts
3329
- function createFileFindListCardsAction(ctx) {
3330
- const {
3331
- repositories: { fileQueryRepository },
3332
- middlewares: { authMiddleware },
3333
- action: { executeAction }
3334
- } = ctx;
3335
- return async function fileFindFullAction(params) {
3336
- return executeAction(
3337
- async ({ locale }) => {
3338
- await authMiddleware.authenticate();
3339
- const { items, total } = await fileQueryRepository.findListCards({
3340
- ...params,
3341
- locale
3342
- });
3343
- return {
3344
- data: { items, total }
3345
- };
3346
- },
3347
- {
3348
- type: "query",
3349
- key: [
3350
- "file",
3351
- "findListCardsAction",
3352
- params.searchString,
3353
- params.type,
3354
- params.isDeleted,
3355
- params.isLocked,
3356
- params.folderId,
3357
- ...params.fileIds ?? [],
3358
- params.page,
3359
- params.pageSize
3360
- ]
3361
- }
3362
- );
3363
- };
3364
- }
3365
-
3366
- // src/server/interfaces/actions/resources/folder/commands/create/folder-create-validator.ts
3367
- var folderCreateValidator = (schemas) => schemas.z.object({
3368
- // core
3369
- key: schemas.key().unique({ table: "folders", column: "key" }),
3370
- name: schemas.pathSegment(),
3371
- // ----------------------------------------------------------------------------
3372
- // relations
3373
- // ----------------------------------------------------------------------------
3374
- // Folder
3375
- parentFolder: schemas.z.object({ id: schemas.id().exist({ table: "folders", column: "id" }) }).nullable()
3376
- });
3377
-
3378
- // src/server/interfaces/actions/resources/folder/commands/create/create-folder-create-action.ts
3379
- function createFolderCreateAction(ctx) {
3380
- const {
3381
- repositories: { folderCommandRepository },
3382
- middlewares: { authMiddleware },
3383
- action: { executeAction },
3384
- schemas: { schemas }
3385
- } = ctx;
3386
- return async function folderCreateAction({
3387
- formData
3388
- }) {
3389
- return executeAction(
3390
- async () => {
3391
- await authMiddleware.authenticate();
3392
- const combinedKey = path2.join(
3393
- formData.parentFolder?.key ?? "",
3394
- formData.name
3395
- );
3396
- const { name } = await folderCreateValidator(schemas).parseAsync({
3397
- ...formData,
3398
- key: combinedKey
3399
- });
3400
- const createdFolder = await folderCommandRepository.create({
3401
- key: combinedKey,
3402
- name,
3403
- parentFolder: formData.parentFolder
3404
- });
3405
- return {
3406
- i18nKey: "ok.store-ok",
3407
- data: { folder: createdFolder }
3408
- };
3409
- },
3410
- { type: "command" }
3411
- );
3412
- };
3413
- }
3414
-
3415
- // src/server/interfaces/actions/resources/folder/commands/update/folder-update-validator.ts
3416
- var folderUpdateValidator = (schemas, id) => schemas.z.object({
3417
- // core
3418
- key: schemas.key().unique({
3419
- table: "folders",
3420
- column: "key",
3421
- excludeSelf: { name: "id", value: id }
3422
- }),
3423
- name: schemas.pathSegment(),
3424
- // ----------------------------------------------------------------------------
3425
- // relations
3426
- // ----------------------------------------------------------------------------
3427
- // Folder
3428
- parentFolder: schemas.z.object({ id: schemas.id().exist({ table: "folders", column: "id" }) }).nullable()
3429
- });
3430
-
3431
- // src/server/interfaces/actions/resources/folder/commands/update/create-folder-update-action.ts
3432
- function createFolderUpdateAction(ctx) {
3433
- const {
3434
- repositories: { folderCommandRepository },
3435
- middlewares: { authMiddleware },
3436
- action: { executeAction },
3437
- schemas: { schemas }
3438
- } = ctx;
3439
- return async function folderUpdateAction({
3440
- id,
3441
- formData
3442
- }) {
3443
- return executeAction(
3444
- async () => {
3445
- await authMiddleware.authenticate();
3446
- const combinedKey = path2.join(
3447
- formData.parentFolder?.key ?? "",
3448
- formData.name
3449
- );
3450
- const { name } = await folderUpdateValidator(schemas, id).parseAsync({
3451
- ...formData,
3452
- key: combinedKey
3453
- });
3454
- const updateddFolder = await folderCommandRepository.update({
3455
- id,
3456
- key: combinedKey,
3457
- name,
3458
- parentFolder: formData.parentFolder
3459
- });
3460
- return {
3461
- i18nKey: "ok.update-ok",
3462
- data: { folder: updateddFolder }
3463
- };
3464
- },
3465
- { type: "command" }
3466
- );
3467
- };
3468
- }
3469
-
3470
- // src/server/interfaces/actions/resources/folder/commands/delete/create-folder-delete-action.ts
3471
- function createFolderDeleteAction(ctx) {
3472
- const {
3473
- repositories: { folderQueryRepository, folderCommandRepository },
3474
- middlewares: { authMiddleware },
3475
- action: { executeAction }
3476
- } = ctx;
3477
- return async function folderDeleteAction({ id }) {
3478
- return executeAction(
3479
- async () => {
3480
- await authMiddleware.authenticate();
3481
- const foundFolder = await folderQueryRepository.findFull({ id });
3482
- if (!foundFolder) throw ServerError.notFound();
3483
- if (isFolderLocked(foundFolder)) {
3484
- throw ServerError.forbidden();
3485
- }
3486
- await folderCommandRepository.delete({ id });
3487
- return {
3488
- i18nKey: "ok.destroy-ok"
3489
- };
3490
- },
3491
- { type: "command" }
3492
- );
3493
- };
3494
- }
3495
-
3496
- // src/server/interfaces/actions/resources/folder/queries/create-folder-find-full-action.ts
3497
- function createFolderFindFullAction(ctx) {
3498
- const {
3499
- repositories: { folderQueryRepository, fileQueryRepository },
3500
- middlewares: { authMiddleware },
3501
- action: { executeAction }
3502
- } = ctx;
3503
- return async function folderFindFullAction(params) {
3504
- return executeAction(
3505
- async (translator) => {
3506
- await authMiddleware.authenticate();
3507
- const resolvedKey = params.key || ROOT_FOLDER_ID;
3508
- const identity = "id" in params ? params.id : resolvedKey;
3509
- const isAtRoot = identity === ROOT_FOLDER_ID;
3510
- let folder = ROOT_FOLDER;
3511
- if (isAtRoot) {
3512
- const { items: subFolders } = await folderQueryRepository.findListCards({
3513
- parentFolderId: ROOT_FOLDER_ID
3514
- });
3515
- folder.subFolders = subFolders;
3516
- const { items: files } = await fileQueryRepository.findListCards({
3517
- locale: translator.locale,
3518
- folderId: ROOT_FOLDER_ID
3519
- });
3520
- folder.files = files;
3521
- } else {
3522
- const found = await folderQueryRepository.findFull(params);
3523
- if (!found) throw ServerError.notFound();
3524
- folder = found;
3525
- }
3526
- return { data: { folder } };
3527
- },
3528
- {
3529
- type: "query",
3530
- key: ["file", "findFullAction", params.id, params.key]
3531
- }
3532
- );
3533
- };
3534
- }
3535
-
3536
- // src/server/interfaces/actions/resources/folder/queries/create-folder-find-list-cards-action.ts
3537
- function createFolderFindListCardsAction(ctx) {
3538
- const {
3539
- repositories: { folderQueryRepository },
3540
- middlewares: { authMiddleware },
3541
- action: { executeAction }
3542
- } = ctx;
3543
- return async function folderFindFullAction(params) {
3544
- return executeAction(
3545
- async () => {
3546
- await authMiddleware.authenticate();
3547
- const { items, total } = await folderQueryRepository.findListCards(params);
3548
- return {
3549
- data: { items, total }
3550
- };
3551
- },
3552
- {
3553
- type: "query",
3554
- key: [
3555
- "folder",
3556
- "findListCardsAction",
3557
- params.searchString,
3558
- params.parentFolderId,
3559
- ...params.folderIds ?? [],
3560
- params.page,
3561
- params.pageSize
3562
- ]
3563
- }
3564
- );
3565
- };
3566
- }
3567
-
3568
- // src/server/interfaces/actions/resources/post/commands/create/post-create-validator.ts
3569
- var postCreateValidator = ({
3570
- type,
3571
- topicId,
3572
- schemas,
3573
- tocItemSchema
3574
- }) => schemas.z.object({
3575
- type: schemas.text(),
3576
- // ----------------------------------------------------------------------------
3577
- // states
3578
- // ----------------------------------------------------------------------------
3579
- isLocked: schemas.z.boolean(),
3580
- isActive: schemas.z.boolean(),
3581
- isIndexActive: schemas.z.boolean(),
3582
- index: schemas.positiveNumber().nullable(),
3583
- isSlugActive: schemas.z.boolean(),
3584
- slug: schemas.slug().unique({
3585
- table: "posts",
3586
- column: "slug",
3587
- scope: [
3588
- { name: "type", value: type, cast: "PostType" },
3589
- ...topicId ? [{ name: "topic_id", value: topicId }] : []
3590
- // Use for: [post], [post:category]
3591
- ]
3592
- }).nullable(),
3593
- isFeatured: schemas.z.boolean(),
3594
- isShownOnHome: schemas.z.boolean(),
3595
- // ----------------------------------------------------------------------------
3596
- // relations
3597
- // ----------------------------------------------------------------------------
3598
- // Admin
3599
- author: schemas.singleItem({ table: "admins", column: "id" }).nullable(),
3600
- // Picked by modal
3601
- // Post
3602
- topicId: schemas.id().exist({ table: "posts", column: "id" }).nullable(),
3603
- parents: schemas.multiItems({ table: "posts", column: "id" }),
3604
- // Picked by modal
3605
- tags: schemas.multiItems({ table: "posts", column: "id" }),
3606
- // Picked by modal
3607
- relatedPosts: schemas.multiItems({ table: "posts", column: "id" }),
3608
- // Picked by modal
3609
- // File
3610
- coverImage: schemas.singleItem({ table: "files", column: "id" }),
3611
- // Picked by modal
3612
- contentImageIds: schemas.array(
3613
- schemas.id().exist({ table: "files", column: "id" })
3614
- ),
3615
- // -----------------------------------------------------------------------
3616
- // --- custom fields
3617
- // -----------------------------------------------------------------------
3618
- // states
3619
- state1: schemas.z.boolean(),
3620
- state2: schemas.z.boolean(),
3621
- state3: schemas.z.boolean(),
3622
- state4: schemas.z.boolean(),
3623
- state5: schemas.z.boolean(),
3624
- state6: schemas.z.boolean(),
3625
- state7: schemas.z.boolean(),
3626
- state8: schemas.z.boolean(),
3627
- state9: schemas.z.boolean(),
3628
- state10: schemas.z.boolean(),
3629
- // multi images
3630
- images1: schemas.multiItems({ table: "files", column: "id" }),
3631
- images2: schemas.multiItems({ table: "files", column: "id" }),
3632
- // single images
3633
- image1: schemas.singleItem({ table: "files", column: "id" }),
3634
- image2: schemas.singleItem({ table: "files", column: "id" }),
3635
- image3: schemas.singleItem({ table: "files", column: "id" }),
3636
- image4: schemas.singleItem({ table: "files", column: "id" }),
3637
- // text
3638
- text1: schemas.text().nullable(),
3639
- text2: schemas.text().nullable(),
3640
- text3: schemas.text().nullable(),
3641
- text4: schemas.text().nullable(),
3642
- text5: schemas.text().nullable(),
3643
- text6: schemas.text().nullable(),
3644
- text7: schemas.text().nullable(),
3645
- text8: schemas.text().nullable(),
3646
- text9: schemas.text().nullable(),
3647
- text10: schemas.text().nullable(),
3648
- // json array
3649
- data1: schemas.array(schemas.z.any()),
3650
- data2: schemas.array(schemas.z.any()),
3651
- data3: schemas.array(schemas.z.any()),
3652
- data4: schemas.array(schemas.z.any()),
3653
- // ----------------------------------------------------------------------------
3654
- // translation
3655
- // ----------------------------------------------------------------------------
3656
- translations: schemas.array(
3657
- schemas.z.object({
3658
- locale: schemas.locale(),
3659
- // text
3660
- title: schemas.text().nullable(),
3661
- subtitle: schemas.text().nullable(),
3662
- summary: schemas.text().nullable(),
3663
- description: schemas.text().nullable(),
3664
- content: schemas.text().nullable(),
3665
- // better seo
3666
- externalLinks: schemas.array(
3667
- schemas.z.object({
3668
- name: schemas.text(),
3669
- href: schemas.text()
3670
- })
3671
- ),
3672
- faq: schemas.array(
3673
- schemas.z.object({
3674
- question: schemas.text(),
3675
- answer: schemas.text()
3676
- })
3677
- ),
3678
- toc: schemas.array(tocItemSchema),
3679
- // extra
3680
- readTime: schemas.positiveNumber().nullable(),
3681
- wordCount: schemas.positiveNumber(),
3682
- // -------------------------------------------
3683
- // --- custom fields
3684
- // -------------------------------------------
3685
- // text
3686
- text1: schemas.text().nullable(),
3687
- text2: schemas.text().nullable(),
3688
- text3: schemas.text().nullable(),
3689
- text4: schemas.text().nullable(),
3690
- text5: schemas.text().nullable(),
3691
- text6: schemas.text().nullable(),
3692
- text7: schemas.text().nullable(),
3693
- text8: schemas.text().nullable(),
3694
- text9: schemas.text().nullable(),
3695
- text10: schemas.text().nullable(),
3696
- // json array
3697
- data1: schemas.array(schemas.z.any()),
3698
- data2: schemas.array(schemas.z.any()),
3699
- data3: schemas.array(schemas.z.any()),
3700
- data4: schemas.array(schemas.z.any())
3701
- })
3702
- )
3703
- }).transform((obj) => ({
3704
- ...obj,
3705
- // states
3706
- index: obj.isIndexActive ? obj.index : null,
3707
- slug: obj.isSlugActive ? obj.slug : null,
3708
- // translation
3709
- translations: obj.translations.map((t) => ({
3710
- ...t,
3711
- readTime: t.readTime !== 0 ? t.readTime : null
3712
- }))
3713
- }));
3714
-
3715
- // src/server/interfaces/actions/resources/post/commands/create/create-post-create-action.ts
3716
- function createPostCreateAction(ctx) {
3717
- const {
3718
- repositories: { postCommandRepository },
3719
- middlewares: { authMiddleware },
3720
- action: { executeAction },
3721
- schemas: { schemas, tocItemSchema }
3722
- } = ctx;
3723
- return async function postCreateAction({
3724
- formData
3725
- }) {
3726
- return executeAction(
3727
- async () => {
3728
- await authMiddleware.authenticate();
3729
- const validatedPayload = await postCreateValidator({
3730
- schemas,
3731
- tocItemSchema,
3732
- type: formData.type,
3733
- topicId: formData.topicId
3734
- }).parseAsync(formData);
3735
- const created = await postCommandRepository.create(validatedPayload);
3736
- return {
3737
- i18nKey: "ok.store-ok",
3738
- data: { post: created }
3739
- };
3740
- },
3741
- { type: "command" }
3742
- );
3743
- };
3744
- }
3745
-
3746
- // src/server/interfaces/actions/resources/post/commands/update/post-update-validator.ts
3747
- var postUpdateValidator = ({
3748
- id,
3749
- type,
3750
- topicId,
3751
- schemas,
3752
- tocItemSchema
3753
- }) => schemas.z.object({
3754
- type: schemas.text(),
3755
- // ----------------------------------------------------------------------------
3756
- // states
3757
- // ----------------------------------------------------------------------------
3758
- isLocked: schemas.z.boolean(),
3759
- isActive: schemas.z.boolean(),
3760
- isIndexActive: schemas.z.boolean(),
3761
- index: schemas.positiveNumber().nullable(),
3762
- isSlugActive: schemas.z.boolean(),
3763
- slug: schemas.slug().unique({
3764
- table: "posts",
3765
- column: "slug",
3766
- scope: [
3767
- { name: "type", value: type, cast: "PostType" },
3768
- ...topicId ? [{ name: "topic_id", value: topicId }] : []
3769
- // Use for: [post], [post:category]
3770
- ],
3771
- excludeSelf: { name: "id", value: id }
3772
- }).nullable(),
3773
- isFeatured: schemas.z.boolean(),
3774
- isShownOnHome: schemas.z.boolean(),
3775
- // ----------------------------------------------------------------------------
3776
- // relations
3777
- // ----------------------------------------------------------------------------
3778
- // Admin
3779
- author: schemas.singleItem({ table: "admins", column: "id" }),
3780
- // Picked by modal
3781
- // Post
3782
- topicId: schemas.id().exist({ table: "posts", column: "id" }).nullable(),
3783
- parents: schemas.multiItems({ table: "posts", column: "id" }),
3784
- // Picked by modal
3785
- tags: schemas.multiItems({ table: "posts", column: "id" }),
3786
- // Picked by modal
3787
- relatedPosts: schemas.multiItems({ table: "posts", column: "id" }),
3788
- // Picked by modal
3789
- // File
3790
- coverImage: schemas.singleItem({ table: "files", column: "id" }),
3791
- // Picked by modal
3792
- contentImageIds: schemas.array(
3793
- schemas.id().exist({ table: "files", column: "id" })
3794
- ),
3795
- // -----------------------------------------------------------------------
3796
- // --- custom fields
3797
- // -----------------------------------------------------------------------
3798
- // states
3799
- state1: schemas.z.boolean(),
3800
- state2: schemas.z.boolean(),
3801
- state3: schemas.z.boolean(),
3802
- state4: schemas.z.boolean(),
3803
- state5: schemas.z.boolean(),
3804
- state6: schemas.z.boolean(),
3805
- state7: schemas.z.boolean(),
3806
- state8: schemas.z.boolean(),
3807
- state9: schemas.z.boolean(),
3808
- state10: schemas.z.boolean(),
3809
- // multi images
3810
- images1: schemas.multiItems({ table: "files", column: "id" }),
3811
- images2: schemas.multiItems({ table: "files", column: "id" }),
3812
- // single images
3813
- image1: schemas.singleItem({ table: "files", column: "id" }),
3814
- image2: schemas.singleItem({ table: "files", column: "id" }),
3815
- image3: schemas.singleItem({ table: "files", column: "id" }),
3816
- image4: schemas.singleItem({ table: "files", column: "id" }),
3817
- // text
3818
- text1: schemas.text().nullable(),
3819
- text2: schemas.text().nullable(),
3820
- text3: schemas.text().nullable(),
3821
- text4: schemas.text().nullable(),
3822
- text5: schemas.text().nullable(),
3823
- text6: schemas.text().nullable(),
3824
- text7: schemas.text().nullable(),
3825
- text8: schemas.text().nullable(),
3826
- text9: schemas.text().nullable(),
3827
- text10: schemas.text().nullable(),
3828
- // json array
3829
- data1: schemas.array(schemas.z.any()),
3830
- data2: schemas.array(schemas.z.any()),
3831
- data3: schemas.array(schemas.z.any()),
3832
- data4: schemas.array(schemas.z.any()),
3833
- // ----------------------------------------------------------------------------
3834
- // translation
3835
- // ----------------------------------------------------------------------------
3836
- translations: schemas.array(
3837
- schemas.z.object({
3838
- locale: schemas.locale(),
3839
- // text
3840
- title: schemas.text().nullable(),
3841
- subtitle: schemas.text().nullable(),
3842
- summary: schemas.text().nullable(),
3843
- description: schemas.text().nullable(),
3844
- content: schemas.text().nullable(),
3845
- // better seo
3846
- externalLinks: schemas.array(
3847
- schemas.z.object({
3848
- name: schemas.text(),
3849
- href: schemas.text()
3850
- })
3851
- ),
3852
- faq: schemas.array(
3853
- schemas.z.object({
3854
- question: schemas.text(),
3855
- answer: schemas.text()
3856
- })
3857
- ),
3858
- toc: schemas.array(tocItemSchema),
3859
- // extra
3860
- readTime: schemas.positiveNumber().nullable(),
3861
- wordCount: schemas.positiveNumber(),
3862
- // -------------------------------------------
3863
- // --- custom fields
3864
- // -------------------------------------------
3865
- // text
3866
- text1: schemas.text().nullable(),
3867
- text2: schemas.text().nullable(),
3868
- text3: schemas.text().nullable(),
3869
- text4: schemas.text().nullable(),
3870
- text5: schemas.text().nullable(),
3871
- text6: schemas.text().nullable(),
3872
- text7: schemas.text().nullable(),
3873
- text8: schemas.text().nullable(),
3874
- text9: schemas.text().nullable(),
3875
- text10: schemas.text().nullable(),
3876
- // json array
3877
- data1: schemas.array(schemas.z.any()),
3878
- data2: schemas.array(schemas.z.any()),
3879
- data3: schemas.array(schemas.z.any()),
3880
- data4: schemas.array(schemas.z.any())
3881
- })
3882
- )
3883
- }).transform((obj) => ({
3884
- ...obj,
3885
- // states
3886
- index: obj.isIndexActive ? obj.index : null,
3887
- slug: obj.isSlugActive ? obj.slug : null,
3888
- // translation
3889
- translations: obj.translations.map((t) => ({
3890
- ...t,
3891
- readTime: t.readTime !== 0 ? t.readTime : null
3892
- }))
3893
- }));
3894
-
3895
- // src/server/interfaces/actions/resources/post/commands/update/create-post-update-action.ts
3896
- function createPostUpdateAction(ctx) {
3897
- const {
3898
- repositories: { postCommandRepository },
3899
- middlewares: { authMiddleware },
3900
- action: { executeAction },
3901
- schemas: { schemas, tocItemSchema }
3902
- } = ctx;
3903
- return async function postUpdateAction({
3904
- id,
3905
- formData
3906
- }) {
3907
- return executeAction(
3908
- async () => {
3909
- await authMiddleware.authenticate();
3910
- const validatedPayload = await postUpdateValidator({
3911
- id,
3912
- type: formData.type,
3913
- topicId: formData.topicId,
3914
- schemas,
3915
- tocItemSchema
3916
- }).parseAsync(formData);
3917
- const updatedPost = await postCommandRepository.update({
3918
- id,
3919
- ...validatedPayload
3920
- });
3921
- return {
3922
- i18nKey: "ok.update-ok",
3923
- data: { post: updatedPost }
3924
- };
3925
- },
3926
- { type: "command" }
3927
- );
3928
- };
3929
- }
3930
-
3931
- // src/server/interfaces/actions/resources/post/commands/delete/create-post-delete-action.ts
3932
- function createPostDeleteAction(ctx) {
3933
- const {
3934
- repositories: { postQueryRepository, postCommandRepository },
3935
- middlewares: { authMiddleware },
3936
- action: { executeAction }
3937
- } = ctx;
3938
- return async function postDeleteAction({ id }) {
3939
- return executeAction(
3940
- async () => {
3941
- await authMiddleware.authenticate();
3942
- const post = await postQueryRepository.find({ id });
3943
- if (!post) throw ServerError.notFound();
3944
- await postCommandRepository.delete({ id: post.id });
3945
- return {
3946
- i18nKey: "ok.destroy-ok"
3947
- };
3948
- },
3949
- { type: "command" }
3950
- );
3951
- };
3952
- }
3953
-
3954
- // src/server/interfaces/actions/resources/post/queries/create-post-find-action.ts
3955
- function createPostFindAction(ctx) {
3956
- const {
3957
- repositories: { postQueryRepository },
3958
- action: { executeAction }
3959
- } = ctx;
3960
- return async function postFindAction(params) {
3961
- return executeAction(
3962
- async () => {
3963
- const found = await postQueryRepository.find(params);
3964
- if (!found) throw ServerError.notFound();
3965
- return {
3966
- data: { post: found }
3967
- };
3968
- },
3969
- {
3970
- type: "query",
3971
- key: [
3972
- "post",
3973
- "findAction",
3974
- params.id,
3975
- params.type,
3976
- params.slug,
3977
- params.isActive,
3978
- params.topicSlug
3979
- ]
3980
- }
3981
- );
3982
- };
3983
- }
3984
-
3985
- // src/server/interfaces/actions/resources/post/queries/create-post-find-full-action.ts
3986
- function createPostFindFullAction(ctx) {
3987
- const {
3988
- repositories: { postQueryRepository },
3989
- action: { executeAction }
3990
- } = ctx;
3991
- return async function postFindFullAction(params) {
3992
- return executeAction(
3993
- async () => {
3994
- const found = await postQueryRepository.findFull(params);
3995
- if (!found) throw ServerError.notFound();
3996
- return {
3997
- data: found
3998
- };
3999
- },
4000
- {
4001
- type: "query",
4002
- key: [
4003
- "post",
4004
- "findFullAction",
4005
- params.id,
4006
- params.type,
4007
- params.slug,
4008
- params.isActive,
4009
- params.topicSlug
4010
- ]
4011
- }
4012
- );
4013
- };
4014
- }
4015
-
4016
- // src/server/interfaces/actions/resources/post/queries/create-post-find-list-cards-action.ts
4017
- function createPostFindListCardsAction(ctx) {
4018
- const {
4019
- repositories: { postQueryRepository },
4020
- action: { executeAction }
4021
- } = ctx;
4022
- return async function postFindFullAction(params) {
4023
- return executeAction(
4024
- async ({ locale }) => {
4025
- const { items, total } = await postQueryRepository.findListCards({
4026
- ...params,
4027
- locale
4028
- });
4029
- return {
4030
- data: { items, total }
4031
- };
4032
- },
4033
- {
4034
- type: "query",
4035
- key: [
4036
- "post",
4037
- "findListCardsAction",
4038
- params.searchString,
4039
- params.type,
4040
- params.isActive,
4041
- params.isIndexActive,
4042
- params.isSlugActive,
4043
- params.isFeatured,
4044
- params.isShownOnHome,
4045
- params.state1,
4046
- params.state2,
4047
- params.state3,
4048
- params.state4,
4049
- params.state5,
4050
- params.state6,
4051
- params.state7,
4052
- params.state8,
4053
- params.state9,
4054
- params.state10,
4055
- params.topicId,
4056
- params.topicSlug,
4057
- params.categoryId,
4058
- params.categorySlug,
4059
- ...params.postIds ?? [],
4060
- ...params.excludeIds ?? [],
4061
- params.page,
4062
- params.pageSize
4063
- ]
4064
- }
4065
- );
4066
- };
4067
- }
4068
-
4069
- // src/server/interfaces/actions/resources/post/queries/create-post-find-many-action.ts
4070
- function createPostFindManyAction(ctx) {
4071
- const {
4072
- repositories: { postQueryRepository },
4073
- action: { executeAction }
4074
- } = ctx;
4075
- return async function postFindManyAction(params) {
4076
- return executeAction(
4077
- async () => {
4078
- const found = await postQueryRepository.findMany(params);
4079
- return {
4080
- data: { posts: found }
4081
- };
4082
- },
4083
- {
4084
- type: "query",
4085
- key: ["post", "findManyAction", params.type, params.topicId]
4086
- }
4087
- );
4088
- };
4089
- }
4090
-
4091
- // src/server/interfaces/actions/resources/seo-metadata/commands/upsert/seo-metadata-upsert-validator.ts
4092
- var seoMetadataUpsertValidator = (schemas) => schemas.z.object({
4093
- // -----------------------------------------------------------------------
4094
- // relations
4095
- // -----------------------------------------------------------------------
4096
- // Post
4097
- postId: schemas.id().exist({ table: "posts", column: "id" }),
4098
- // ----------------------------------------------------------------------------
4099
- // translation
4100
- // ----------------------------------------------------------------------------
4101
- translations: schemas.array(
4102
- schemas.z.object({
4103
- // core
4104
- locale: schemas.locale(),
4105
- // ---------------------------------------------------
4106
- // Basic
4107
- // ---------------------------------------------------
4108
- title: schemas.text().nullable(),
4109
- description: schemas.text().nullable(),
4110
- // identity
4111
- author: schemas.text().nullable(),
4112
- // url
4113
- canonical: schemas.url().nullable(),
4114
- // URL
4115
- alternate: schemas.array(
4116
- schemas.z.object({
4117
- hreflang: schemas.text().bcp47(),
4118
- // BCP47
4119
- href: schemas.url()
4120
- // URL
4121
- })
4122
- ),
4123
- // robots
4124
- robots: schemas.text().nullable(),
4125
- // ---------------------------------------------------
4126
- // Basic
4127
- // ---------------------------------------------------
4128
- ogTitle: schemas.text().nullable(),
4129
- ogDescription: schemas.text().nullable(),
4130
- // url
4131
- ogUrl: schemas.url().nullable(),
4132
- // URL
4133
- // identity
4134
- ogType: schemas.z.enum(OG_TYPE_ARRAY).nullable(),
4135
- ogSiteName: schemas.text().nullable(),
4136
- // image
4137
- ogImage: schemas.url().nullable(),
4138
- // URL
4139
- ogImageAlt: schemas.text().nullable(),
4140
- ogImageType: schemas.text().nullable(),
4141
- ogImageWidth: schemas.z.number().nullable(),
4142
- ogImageHeight: schemas.z.number().nullable(),
4143
- // locale
4144
- ogLocale: schemas.text().ogLocale().nullable(),
4145
- // OG Locale
4146
- ogLocaleAlternate: schemas.array(schemas.text().ogLocale()),
4147
- // OG Locale
4148
- // article
4149
- ogArticlePublishedTime: schemas.isoString().nullable(),
4150
- // ISOString
4151
- ogArticleModifiedTime: schemas.isoString().nullable(),
4152
- // ISOString
4153
- ogArticleAuthor: schemas.text().nullable(),
4154
- ogArticleSection: schemas.text().nullable(),
4155
- ogArticleTag: schemas.array(schemas.text()),
4156
- // ---------------------------------------------------
4157
- // Twitter
4158
- // ---------------------------------------------------
4159
- twitterCard: schemas.z.enum(TWITTER_CARD_ARRAY).nullable(),
4160
- // identity
4161
- twitterSite: schemas.text().nullable(),
4162
- twitterCreator: schemas.text().nullable(),
4163
- // ---------------------------------------------------
4164
- // JSON-LD
4165
- // ---------------------------------------------------
4166
- jsonLd: schemas.array(schemas.z.any())
4167
- })
4168
- )
4169
- });
4170
-
4171
- // src/server/interfaces/actions/resources/seo-metadata/commands/upsert/create-seo-metadata-upsert-action.ts
4172
- function createSeoMetadataUpsertAction(ctx) {
4173
- const {
4174
- repositories: { seoMetadataCommandRepository },
4175
- middlewares: { authMiddleware },
4176
- action: { executeAction },
4177
- schemas: { schemas }
4178
- } = ctx;
4179
- return async function seoMetadataCreateAction({
4180
- formData
4181
- }) {
4182
- return executeAction(
4183
- async () => {
4184
- await authMiddleware.authenticate();
4185
- const normalizedPayload = {
4186
- ...formData,
4187
- translations: formData.translations.map((t) => {
4188
- t.ogArticlePublishedTime = datetimeToDb(t.ogArticlePublishedTime);
4189
- t.ogArticleModifiedTime = datetimeToDb(t.ogArticleModifiedTime);
4190
- t.jsonLd = jsonArrayToDb(t.jsonLd);
4191
- return t;
4192
- })
4193
- };
4194
- const validatedPayload = await seoMetadataUpsertValidator(schemas).parseAsync(
4195
- normalizedPayload
4196
- );
4197
- await seoMetadataCommandRepository.upsert(validatedPayload);
4198
- return {
4199
- i18nKey: "ok.update-ok"
4200
- };
4201
- },
4202
- { type: "command" }
4203
- );
4204
- };
4205
- }
4206
-
4207
- // src/server/applications/auth/create-auth-use-cases.ts
4208
- function createAuthUseCases({
4209
- prisma,
4210
- adminQueryRepository,
4211
- adminRefreshTokenCommandRepository,
4212
- jwtService,
4213
- argon2Service,
4214
- cryptoService,
4215
- cookieService,
4216
- config
4217
- }) {
4218
- async function verifyCredentials({
4219
- email,
4220
- password
4221
- }) {
4222
- const found = await adminQueryRepository.findWithPasswordHash({ email });
4223
- if (found) {
4224
- const isValid = await argon2Service.verify(found.passwordHash, password);
4225
- if (isValid) return found;
4226
- }
4227
- throw new ServerError({ i18nKey: "error.credentials-incorrect" });
4228
- }
4229
- async function updatePassword({
4230
- email,
4231
- password
4232
- }) {
4233
- const updatedAdmin = await prisma.admin.update({
4234
- where: { email },
4235
- data: { passwordHash: await argon2Service.hash(password) }
4236
- });
4237
- return updatedAdmin;
4238
- }
4239
- async function createRefreshToken({
4240
- admin,
4241
- deviceInfo,
4242
- ip
4243
- }) {
4244
- const token = cryptoService.generateToken();
4245
- const tokenHash = cryptoService.hash(token);
4246
- await adminRefreshTokenCommandRepository.create({
4247
- tokenHash,
4248
- ip,
4249
- deviceInfo,
4250
- expiresAt: new Date(Date.now() + config.refreshTokenTtl * 1e3),
4251
- adminId: admin.id,
4252
- email: admin.email
4253
- });
4254
- return token;
4255
- }
4256
- async function refreshTokens({
4257
- admin,
4258
- deviceInfo,
4259
- ip
4260
- }) {
4261
- const token = await createRefreshToken({ admin, deviceInfo, ip });
4262
- await cookieService.setSignedCookie({
4263
- name: config.refreshTokenName,
4264
- value: token,
4265
- expireSeconds: config.refreshTokenTtl
4266
- });
4267
- const accessToken = jwtService.sign({
4268
- payload: { id: admin.id },
4269
- secret: cryptoService.hash(config.accessTokenSecret),
4270
- expiresIn: config.accessTokenTtl
4271
- });
4272
- await cookieService.setSignedCookie({
4273
- name: config.accessTokenName,
4274
- value: accessToken,
4275
- expireSeconds: config.accessTokenTtl
4276
- });
4277
- }
4278
- function signPasswordResetToken({ admin }) {
4279
- const payload = { email: admin.email };
4280
- const passwordResetToken = jwtService.sign({
4281
- payload,
4282
- secret: config.resetPasswordSecret,
4283
- expiresIn: config.resetPasswordTtl
4284
- });
4285
- return passwordResetToken;
4286
- }
4287
- function verifyPasswordResetToken({ token }) {
4288
- const payload = jwtService.verify({
4289
- token,
4290
- secret: config.resetPasswordSecret
4291
- });
4292
- return payload;
4293
- }
4294
- function signEmailVerificationToken() {
4295
- const emailVerificationToken = jwtService.sign({
4296
- payload: {},
4297
- secret: config.verifyEmailSecret,
4298
- expiresIn: config.verifyEmailTtl
4299
- });
4300
- return emailVerificationToken;
4301
- }
4302
- async function verifyEmailAndUpdate({
4303
- token,
4304
- admin
4305
- }) {
4306
- jwtService.verify({
4307
- token,
4308
- secret: config.verifyEmailSecret
4309
- });
4310
- const updatedAdmin = await prisma.admin.update({
4311
- where: { email: admin.email },
4312
- data: { emailVerifiedAt: /* @__PURE__ */ new Date() }
4313
- });
4314
- return updatedAdmin;
4315
- }
4316
- return {
4317
- verifyCredentials,
4318
- updatePassword,
4319
- createRefreshToken,
4320
- refreshTokens,
4321
- // reset password
4322
- signPasswordResetToken,
4323
- verifyPasswordResetToken,
4324
- // verify email
4325
- signEmailVerificationToken,
4326
- verifyEmailAndUpdate
4327
- };
4328
- }
4329
-
4330
- // src/server/applications/emails/create-email-verification-email.ts
4331
- function createEmailVerificationEmail({
4332
- renderEmailTemplate,
4333
- sendEmail,
4334
- authUseCases,
4335
- webUrl
4336
- }) {
4337
- async function generateHtml(replacements) {
4338
- return await renderEmailTemplate("auth/verify-email", replacements);
4339
- }
4340
- async function send({ translator, admin, newEmail }) {
4341
- const email = newEmail ?? admin.email;
4342
- const emailVerificationToken = authUseCases.signEmailVerificationToken();
4343
- const emailVerificationUrl = `${webUrl}/cms/verify-email?email=${email}&emailVerificationToken=${emailVerificationToken}`;
4344
- const html = await generateHtml({
4345
- emailVerificationUrl
4346
- });
4347
- return sendEmail({
4348
- to: email,
4349
- subject: translator.t("email.verify-email.text"),
4350
- html
4351
- });
4352
- }
4353
- return {
4354
- generateHtml,
4355
- send
4356
- };
4357
- }
4358
-
4359
- // src/server/applications/emails/create-forgot-password-email.ts
4360
- function createForgotPasswordEmail({
4361
- renderEmailTemplate,
4362
- sendEmail,
4363
- authUseCases,
4364
- webUrl
4365
- }) {
4366
- async function generateHtml(replacements) {
4367
- return await renderEmailTemplate("auth/forgot-password", replacements);
4368
- }
4369
- async function send({ translator, admin }) {
4370
- const passwordResetToken = authUseCases.signPasswordResetToken({ admin });
4371
- const passwordResetUrl = `${webUrl}/cms/reset-password?passwordResetToken=${passwordResetToken}`;
4372
- const html = await generateHtml({ passwordResetUrl });
4373
- return sendEmail({
4374
- to: admin.email,
4375
- subject: translator.t("email.forgot-password.text"),
4376
- html
4377
- });
4378
- }
4379
- return {
4380
- generateHtml,
4381
- send
4382
- };
4383
- }
4384
-
4385
- export { ADMIN_ORDER_BY, ORDER_BY, POST_ORDER_BY, ServerError, createAdminCommandRepository, createAdminCreateAction, createAdminDeleteAction, createAdminFindFullAction, createAdminFindListCardsAction, createAdminQueryRepository, createAdminRefreshTokenCommandRepository, createAdminRefreshTokenDeleteAction, createAdminRefreshTokenFindManyAction, createAdminRefreshTokenQueryRepository, createAdminUpdateAction, createArgon2Service, createAuthMiddleware, createAuthUseCases, createCache, createCacheResult, createChangePasswordAction, createCookieService, createCryptoService, createEmailUnverifiedAction, createEmailVerificationEmail, createExecuteAction, createExecuteApi, createExist, createFileCommandRepository, createFileCreateAction, createFileCreateManyAction, createFileFindFullAction, createFileFindListCardsAction, createFilePurgeManyAction, createFileQueryRepository, createFileRestoreManyAction, createFileSchema, createFileSoftDeleteAction, createFileSoftDeleteManyAction, createFileUpdateAction, createFolderCommandRepository, createFolderCreateAction, createFolderDeleteAction, createFolderFindFullAction, createFolderFindListCardsAction, createFolderQueryRepository, createFolderUpdateAction, createForgotPasswordAction, createForgotPasswordEmail, createIpRateLimiter, createJwtService, createMultiFileSchema, createPostCommandRepository, createPostCreateAction, createPostDeleteAction, createPostFindAction, createPostFindFullAction, createPostFindListCardsAction, createPostFindManyAction, createPostQueryRepository, createPostUpdateAction, createRenderEmailTemplate, createResetPasswordAction, createRunAction, createSchemas, createSendEmail, createSeoMetadataCommandRepository, createSeoMetadataUpsertAction, createSignInAction, createSignOutAction, createTocItemSchema, createTransporter, createUnique, createVerifyAccessToken, createVerifyAction, createVerifyEmailAction, createVerifyRefreshToken, createZod, normalizeCacheKey };