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