@webiny/api-website-builder 0.0.0-unstable.ac6ebf63c6 → 0.0.0-unstable.c27f4d8a31

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 (208) hide show
  1. package/domain/page/EntryToPageMapper.js +2 -1
  2. package/domain/page/EntryToPageMapper.js.map +1 -1
  3. package/domain/page/abstractions.d.ts +3 -2
  4. package/domain/page/abstractions.js.map +1 -1
  5. package/domain/permissions.d.ts +125 -0
  6. package/domain/permissions.js +33 -0
  7. package/domain/permissions.js.map +1 -0
  8. package/exports/api/website-builder/page.d.ts +8 -8
  9. package/exports/api/website-builder/page.js +8 -8
  10. package/exports/api/website-builder/page.js.map +1 -1
  11. package/exports/api/website-builder/redirect.d.ts +4 -4
  12. package/exports/api/website-builder/redirect.js +4 -4
  13. package/exports/api/website-builder/redirect.js.map +1 -1
  14. package/features/installer/ApiKeyInstaller.js +4 -1
  15. package/features/installer/ApiKeyInstaller.js.map +1 -1
  16. package/features/pages/CreatePage/CreatePageUseCase.d.ts +3 -1
  17. package/features/pages/CreatePage/CreatePageUseCase.js +10 -2
  18. package/features/pages/CreatePage/CreatePageUseCase.js.map +1 -1
  19. package/features/pages/CreatePage/abstractions.d.ts +6 -5
  20. package/features/pages/CreatePage/abstractions.js +2 -2
  21. package/features/pages/CreatePage/abstractions.js.map +1 -1
  22. package/features/pages/CreatePage/events.js +3 -3
  23. package/features/pages/CreatePage/events.js.map +1 -1
  24. package/features/pages/CreatePage/index.d.ts +1 -1
  25. package/features/pages/CreatePage/index.js +1 -1
  26. package/features/pages/CreatePage/index.js.map +1 -1
  27. package/features/pages/CreatePageRevisionFrom/CreatePageRevisionFromUseCase.d.ts +5 -1
  28. package/features/pages/CreatePageRevisionFrom/CreatePageRevisionFromUseCase.js +18 -2
  29. package/features/pages/CreatePageRevisionFrom/CreatePageRevisionFromUseCase.js.map +1 -1
  30. package/features/pages/CreatePageRevisionFrom/abstractions.d.ts +6 -5
  31. package/features/pages/CreatePageRevisionFrom/abstractions.js +2 -2
  32. package/features/pages/CreatePageRevisionFrom/abstractions.js.map +1 -1
  33. package/features/pages/CreatePageRevisionFrom/events.js +3 -3
  34. package/features/pages/CreatePageRevisionFrom/events.js.map +1 -1
  35. package/features/pages/CreatePageRevisionFrom/index.d.ts +1 -1
  36. package/features/pages/CreatePageRevisionFrom/index.js +1 -1
  37. package/features/pages/CreatePageRevisionFrom/index.js.map +1 -1
  38. package/features/pages/DeletePage/DeletePageUseCase.d.ts +3 -1
  39. package/features/pages/DeletePage/DeletePageUseCase.js +10 -3
  40. package/features/pages/DeletePage/DeletePageUseCase.js.map +1 -1
  41. package/features/pages/DeletePage/abstractions.d.ts +6 -5
  42. package/features/pages/DeletePage/abstractions.js +2 -2
  43. package/features/pages/DeletePage/abstractions.js.map +1 -1
  44. package/features/pages/DeletePage/events.js +3 -3
  45. package/features/pages/DeletePage/events.js.map +1 -1
  46. package/features/pages/DeletePage/index.d.ts +1 -1
  47. package/features/pages/DeletePage/index.js +1 -1
  48. package/features/pages/DeletePage/index.js.map +1 -1
  49. package/features/pages/DuplicatePage/DuplicatePageUseCase.d.ts +3 -1
  50. package/features/pages/DuplicatePage/DuplicatePageUseCase.js +10 -2
  51. package/features/pages/DuplicatePage/DuplicatePageUseCase.js.map +1 -1
  52. package/features/pages/DuplicatePage/abstractions.d.ts +6 -5
  53. package/features/pages/DuplicatePage/abstractions.js +2 -2
  54. package/features/pages/DuplicatePage/abstractions.js.map +1 -1
  55. package/features/pages/DuplicatePage/events.js +3 -3
  56. package/features/pages/DuplicatePage/events.js.map +1 -1
  57. package/features/pages/DuplicatePage/index.d.ts +1 -1
  58. package/features/pages/DuplicatePage/index.js +1 -1
  59. package/features/pages/DuplicatePage/index.js.map +1 -1
  60. package/features/pages/GetPageById/GetPageByIdUseCase.d.ts +3 -1
  61. package/features/pages/GetPageById/GetPageByIdUseCase.js +19 -3
  62. package/features/pages/GetPageById/GetPageByIdUseCase.js.map +1 -1
  63. package/features/pages/GetPageById/abstractions.d.ts +2 -1
  64. package/features/pages/GetPageById/abstractions.js.map +1 -1
  65. package/features/pages/GetPageByPath/GetPageByPathUseCase.d.ts +3 -1
  66. package/features/pages/GetPageByPath/GetPageByPathUseCase.js +19 -3
  67. package/features/pages/GetPageByPath/GetPageByPathUseCase.js.map +1 -1
  68. package/features/pages/GetPageByPath/abstractions.d.ts +2 -1
  69. package/features/pages/GetPageByPath/abstractions.js.map +1 -1
  70. package/features/pages/GetPageRevisions/GetPageRevisionsUseCase.d.ts +3 -1
  71. package/features/pages/GetPageRevisions/GetPageRevisionsUseCase.js +22 -3
  72. package/features/pages/GetPageRevisions/GetPageRevisionsUseCase.js.map +1 -1
  73. package/features/pages/GetPageRevisions/abstractions.d.ts +2 -1
  74. package/features/pages/GetPageRevisions/abstractions.js.map +1 -1
  75. package/features/pages/ListPages/ListPagesRepository.d.ts +5 -1
  76. package/features/pages/ListPages/ListPagesRepository.js +14 -4
  77. package/features/pages/ListPages/ListPagesRepository.js.map +1 -1
  78. package/features/pages/ListPages/ListPagesUseCase.d.ts +5 -1
  79. package/features/pages/ListPages/ListPagesUseCase.js +24 -4
  80. package/features/pages/ListPages/ListPagesUseCase.js.map +1 -1
  81. package/features/pages/ListPages/abstractions.d.ts +2 -1
  82. package/features/pages/ListPages/abstractions.js.map +1 -1
  83. package/features/pages/MovePage/MovePageUseCase.d.ts +3 -1
  84. package/features/pages/MovePage/MovePageUseCase.js +14 -2
  85. package/features/pages/MovePage/MovePageUseCase.js.map +1 -1
  86. package/features/pages/MovePage/abstractions.d.ts +6 -5
  87. package/features/pages/MovePage/abstractions.js +2 -2
  88. package/features/pages/MovePage/abstractions.js.map +1 -1
  89. package/features/pages/MovePage/events.js +3 -3
  90. package/features/pages/MovePage/events.js.map +1 -1
  91. package/features/pages/MovePage/index.d.ts +1 -1
  92. package/features/pages/MovePage/index.js +1 -1
  93. package/features/pages/MovePage/index.js.map +1 -1
  94. package/features/pages/PublishPage/PublishPageUseCase.d.ts +3 -1
  95. package/features/pages/PublishPage/PublishPageUseCase.js +14 -2
  96. package/features/pages/PublishPage/PublishPageUseCase.js.map +1 -1
  97. package/features/pages/PublishPage/abstractions.d.ts +6 -5
  98. package/features/pages/PublishPage/abstractions.js +2 -2
  99. package/features/pages/PublishPage/abstractions.js.map +1 -1
  100. package/features/pages/PublishPage/events.js +3 -3
  101. package/features/pages/PublishPage/events.js.map +1 -1
  102. package/features/pages/PublishPage/index.d.ts +1 -1
  103. package/features/pages/PublishPage/index.js +1 -1
  104. package/features/pages/PublishPage/index.js.map +1 -1
  105. package/features/pages/UnpublishPage/UnpublishPageUseCase.d.ts +3 -1
  106. package/features/pages/UnpublishPage/UnpublishPageUseCase.js +14 -2
  107. package/features/pages/UnpublishPage/UnpublishPageUseCase.js.map +1 -1
  108. package/features/pages/UnpublishPage/abstractions.d.ts +6 -5
  109. package/features/pages/UnpublishPage/abstractions.js +2 -2
  110. package/features/pages/UnpublishPage/abstractions.js.map +1 -1
  111. package/features/pages/UnpublishPage/events.js +3 -3
  112. package/features/pages/UnpublishPage/events.js.map +1 -1
  113. package/features/pages/UnpublishPage/index.d.ts +1 -1
  114. package/features/pages/UnpublishPage/index.js +1 -1
  115. package/features/pages/UnpublishPage/index.js.map +1 -1
  116. package/features/pages/UpdatePage/UpdatePageUseCase.d.ts +3 -1
  117. package/features/pages/UpdatePage/UpdatePageUseCase.js +14 -2
  118. package/features/pages/UpdatePage/UpdatePageUseCase.js.map +1 -1
  119. package/features/pages/UpdatePage/abstractions.d.ts +9 -9
  120. package/features/pages/UpdatePage/abstractions.js +2 -2
  121. package/features/pages/UpdatePage/abstractions.js.map +1 -1
  122. package/features/pages/UpdatePage/events.js +3 -3
  123. package/features/pages/UpdatePage/events.js.map +1 -1
  124. package/features/pages/UpdatePage/index.d.ts +1 -1
  125. package/features/pages/UpdatePage/index.js +1 -1
  126. package/features/pages/UpdatePage/index.js.map +1 -1
  127. package/features/redirects/CreateRedirect/CreateRedirectUseCase.d.ts +3 -1
  128. package/features/redirects/CreateRedirect/CreateRedirectUseCase.js +10 -2
  129. package/features/redirects/CreateRedirect/CreateRedirectUseCase.js.map +1 -1
  130. package/features/redirects/CreateRedirect/abstractions.d.ts +6 -5
  131. package/features/redirects/CreateRedirect/abstractions.js +2 -2
  132. package/features/redirects/CreateRedirect/abstractions.js.map +1 -1
  133. package/features/redirects/CreateRedirect/events.js +3 -3
  134. package/features/redirects/CreateRedirect/events.js.map +1 -1
  135. package/features/redirects/CreateRedirect/index.d.ts +1 -1
  136. package/features/redirects/CreateRedirect/index.js +1 -1
  137. package/features/redirects/CreateRedirect/index.js.map +1 -1
  138. package/features/redirects/DeleteRedirect/DeleteRedirectUseCase.d.ts +3 -1
  139. package/features/redirects/DeleteRedirect/DeleteRedirectUseCase.js +10 -3
  140. package/features/redirects/DeleteRedirect/DeleteRedirectUseCase.js.map +1 -1
  141. package/features/redirects/DeleteRedirect/abstractions.d.ts +6 -5
  142. package/features/redirects/DeleteRedirect/abstractions.js +2 -2
  143. package/features/redirects/DeleteRedirect/abstractions.js.map +1 -1
  144. package/features/redirects/DeleteRedirect/events.js +3 -3
  145. package/features/redirects/DeleteRedirect/events.js.map +1 -1
  146. package/features/redirects/DeleteRedirect/index.d.ts +1 -1
  147. package/features/redirects/DeleteRedirect/index.js +1 -1
  148. package/features/redirects/DeleteRedirect/index.js.map +1 -1
  149. package/features/redirects/GetActiveRedirects/GetActiveRedirectsUseCase.d.ts +3 -1
  150. package/features/redirects/GetActiveRedirects/GetActiveRedirectsUseCase.js +10 -3
  151. package/features/redirects/GetActiveRedirects/GetActiveRedirectsUseCase.js.map +1 -1
  152. package/features/redirects/GetActiveRedirects/abstractions.d.ts +2 -1
  153. package/features/redirects/GetActiveRedirects/abstractions.js.map +1 -1
  154. package/features/redirects/GetRedirectById/GetRedirectByIdUseCase.d.ts +3 -1
  155. package/features/redirects/GetRedirectById/GetRedirectByIdUseCase.js +19 -4
  156. package/features/redirects/GetRedirectById/GetRedirectByIdUseCase.js.map +1 -1
  157. package/features/redirects/GetRedirectById/abstractions.d.ts +2 -1
  158. package/features/redirects/GetRedirectById/abstractions.js.map +1 -1
  159. package/features/redirects/InvalidateRedirectsCache/RedirectAfterCreateHandler.d.ts +3 -3
  160. package/features/redirects/InvalidateRedirectsCache/RedirectAfterCreateHandler.js +2 -2
  161. package/features/redirects/InvalidateRedirectsCache/RedirectAfterCreateHandler.js.map +1 -1
  162. package/features/redirects/InvalidateRedirectsCache/RedirectAfterDeleteHandler.d.ts +3 -3
  163. package/features/redirects/InvalidateRedirectsCache/RedirectAfterDeleteHandler.js +2 -2
  164. package/features/redirects/InvalidateRedirectsCache/RedirectAfterDeleteHandler.js.map +1 -1
  165. package/features/redirects/InvalidateRedirectsCache/RedirectAfterUpdateHandler.d.ts +3 -3
  166. package/features/redirects/InvalidateRedirectsCache/RedirectAfterUpdateHandler.js +2 -2
  167. package/features/redirects/InvalidateRedirectsCache/RedirectAfterUpdateHandler.js.map +1 -1
  168. package/features/redirects/ListRedirects/ListRedirectsUseCase.d.ts +5 -1
  169. package/features/redirects/ListRedirects/ListRedirectsUseCase.js +23 -4
  170. package/features/redirects/ListRedirects/ListRedirectsUseCase.js.map +1 -1
  171. package/features/redirects/ListRedirects/abstractions.d.ts +3 -1
  172. package/features/redirects/ListRedirects/abstractions.js.map +1 -1
  173. package/features/redirects/MoveRedirect/MoveRedirectUseCase.d.ts +3 -1
  174. package/features/redirects/MoveRedirect/MoveRedirectUseCase.js +14 -2
  175. package/features/redirects/MoveRedirect/MoveRedirectUseCase.js.map +1 -1
  176. package/features/redirects/MoveRedirect/abstractions.d.ts +6 -5
  177. package/features/redirects/MoveRedirect/abstractions.js +2 -2
  178. package/features/redirects/MoveRedirect/abstractions.js.map +1 -1
  179. package/features/redirects/MoveRedirect/events.js +3 -3
  180. package/features/redirects/MoveRedirect/events.js.map +1 -1
  181. package/features/redirects/MoveRedirect/index.d.ts +1 -1
  182. package/features/redirects/MoveRedirect/index.js +1 -1
  183. package/features/redirects/MoveRedirect/index.js.map +1 -1
  184. package/features/redirects/UpdateRedirect/UpdateRedirectUseCase.d.ts +3 -1
  185. package/features/redirects/UpdateRedirect/UpdateRedirectUseCase.js +14 -2
  186. package/features/redirects/UpdateRedirect/UpdateRedirectUseCase.js.map +1 -1
  187. package/features/redirects/UpdateRedirect/abstractions.d.ts +6 -5
  188. package/features/redirects/UpdateRedirect/abstractions.js +2 -2
  189. package/features/redirects/UpdateRedirect/abstractions.js.map +1 -1
  190. package/features/redirects/UpdateRedirect/events.js +3 -3
  191. package/features/redirects/UpdateRedirect/events.js.map +1 -1
  192. package/features/redirects/UpdateRedirect/index.d.ts +1 -1
  193. package/features/redirects/UpdateRedirect/index.js +1 -1
  194. package/features/redirects/UpdateRedirect/index.js.map +1 -1
  195. package/features/tenantManager/TenantModelExtension.js +5 -5
  196. package/features/tenantManager/TenantModelExtension.js.map +1 -1
  197. package/graphql/pages/pages.typeDefs.d.ts +1 -1
  198. package/graphql/pages/pages.typeDefs.js +6 -0
  199. package/graphql/pages/pages.typeDefs.js.map +1 -1
  200. package/index.js +4 -4
  201. package/index.js.map +1 -1
  202. package/package.json +19 -20
  203. package/features/pages/PagePermissions/feature.d.ts +0 -1
  204. package/features/pages/PagePermissions/feature.js +0 -53
  205. package/features/pages/PagePermissions/feature.js.map +0 -1
  206. package/features/redirects/RedirectPermissions/feature.d.ts +0 -1
  207. package/features/redirects/RedirectPermissions/feature.js +0 -45
  208. package/features/redirects/RedirectPermissions/feature.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import type { Result } from "@webiny/feature/api";
2
2
  import type { WbRedirect } from "../../../domain/redirect/abstractions.js";
3
- import type { RedirectPersistenceError } from "../../../domain/redirect/errors.js";
3
+ import type { RedirectPersistenceError, RedirectNotAuthorizedError } from "../../../domain/redirect/errors.js";
4
4
  /**
5
5
  * GetActiveRedirects repository interface
6
6
  */
@@ -25,6 +25,7 @@ export interface IGetActiveRedirectsUseCase {
25
25
  execute(): Promise<Result<WbRedirect[], UseCaseError>>;
26
26
  }
27
27
  export interface IGetActiveRedirectsUseCaseErrors {
28
+ notAuthorized: RedirectNotAuthorizedError;
28
29
  persistence: RedirectPersistenceError;
29
30
  }
30
31
  type UseCaseError = IGetActiveRedirectsUseCaseErrors[keyof IGetActiveRedirectsUseCaseErrors];
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","GetActiveRedirectsRepository","GetActiveRedirectsUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Result } from \"@webiny/feature/api\";\nimport type { WbRedirect } from \"~/domain/redirect/abstractions.js\";\nimport type { RedirectPersistenceError } from \"~/domain/redirect/errors.js\";\n\n/**\n * GetActiveRedirects repository interface\n */\nexport interface IGetActiveRedirectsRepository {\n execute(): Promise<Result<WbRedirect[], RepositoryError>>;\n}\n\nexport interface IGetActiveRedirectsRepositoryErrors {\n persistence: RedirectPersistenceError;\n}\n\ntype RepositoryError =\n IGetActiveRedirectsRepositoryErrors[keyof IGetActiveRedirectsRepositoryErrors];\n\nexport const GetActiveRedirectsRepository = createAbstraction<IGetActiveRedirectsRepository>(\n \"Wb/GetActiveRedirectsRepository\"\n);\n\nexport namespace GetActiveRedirectsRepository {\n export type Interface = IGetActiveRedirectsRepository;\n export type Error = RepositoryError;\n export type Return = Promise<Result<WbRedirect[], RepositoryError>>;\n export type Redirect = WbRedirect;\n}\n\n/**\n * GetActiveRedirects use case interface\n */\nexport interface IGetActiveRedirectsUseCase {\n execute(): Promise<Result<WbRedirect[], UseCaseError>>;\n}\n\nexport interface IGetActiveRedirectsUseCaseErrors {\n persistence: RedirectPersistenceError;\n}\n\ntype UseCaseError = IGetActiveRedirectsUseCaseErrors[keyof IGetActiveRedirectsUseCaseErrors];\n\nexport const GetActiveRedirectsUseCase = createAbstraction<IGetActiveRedirectsUseCase>(\n \"Wb/GetActiveRedirectsUseCase\"\n);\n\nexport namespace GetActiveRedirectsUseCase {\n export type Interface = IGetActiveRedirectsUseCase;\n export type Return = Promise<Result<WbRedirect[], UseCaseError>>;\n export type Error = UseCaseError;\n export type Redirect = WbRedirect;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAKvD;AACA;AACA;;AAYA,OAAO,MAAMC,4BAA4B,GAAGD,iBAAiB,CACzD,iCACJ,CAAC;;AASD;AACA;AACA;;AAWA,OAAO,MAAME,yBAAyB,GAAGF,iBAAiB,CACtD,8BACJ,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","GetActiveRedirectsRepository","GetActiveRedirectsUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Result } from \"@webiny/feature/api\";\nimport type { WbRedirect } from \"~/domain/redirect/abstractions.js\";\nimport type {\n RedirectPersistenceError,\n RedirectNotAuthorizedError\n} from \"~/domain/redirect/errors.js\";\n\n/**\n * GetActiveRedirects repository interface\n */\nexport interface IGetActiveRedirectsRepository {\n execute(): Promise<Result<WbRedirect[], RepositoryError>>;\n}\n\nexport interface IGetActiveRedirectsRepositoryErrors {\n persistence: RedirectPersistenceError;\n}\n\ntype RepositoryError =\n IGetActiveRedirectsRepositoryErrors[keyof IGetActiveRedirectsRepositoryErrors];\n\nexport const GetActiveRedirectsRepository = createAbstraction<IGetActiveRedirectsRepository>(\n \"Wb/GetActiveRedirectsRepository\"\n);\n\nexport namespace GetActiveRedirectsRepository {\n export type Interface = IGetActiveRedirectsRepository;\n export type Error = RepositoryError;\n export type Return = Promise<Result<WbRedirect[], RepositoryError>>;\n export type Redirect = WbRedirect;\n}\n\n/**\n * GetActiveRedirects use case interface\n */\nexport interface IGetActiveRedirectsUseCase {\n execute(): Promise<Result<WbRedirect[], UseCaseError>>;\n}\n\nexport interface IGetActiveRedirectsUseCaseErrors {\n notAuthorized: RedirectNotAuthorizedError;\n persistence: RedirectPersistenceError;\n}\n\ntype UseCaseError = IGetActiveRedirectsUseCaseErrors[keyof IGetActiveRedirectsUseCaseErrors];\n\nexport const GetActiveRedirectsUseCase = createAbstraction<IGetActiveRedirectsUseCase>(\n \"Wb/GetActiveRedirectsUseCase\"\n);\n\nexport namespace GetActiveRedirectsUseCase {\n export type Interface = IGetActiveRedirectsUseCase;\n export type Return = Promise<Result<WbRedirect[], UseCaseError>>;\n export type Error = UseCaseError;\n export type Redirect = WbRedirect;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAQvD;AACA;AACA;;AAYA,OAAO,MAAMC,4BAA4B,GAAGD,iBAAiB,CACzD,iCACJ,CAAC;;AASD;AACA;AACA;;AAYA,OAAO,MAAME,yBAAyB,GAAGF,iBAAiB,CACtD,8BACJ,CAAC","ignoreList":[]}
@@ -1,7 +1,9 @@
1
1
  import { GetRedirectByIdUseCase as UseCaseAbstraction, GetRedirectByIdRepository } from "./abstractions.js";
2
+ import { WbPermissions } from "../../../domain/permissions.js";
2
3
  declare class GetRedirectByIdUseCaseImpl implements UseCaseAbstraction.Interface {
4
+ private permissions;
3
5
  private repository;
4
- constructor(repository: GetRedirectByIdRepository.Interface);
6
+ constructor(permissions: WbPermissions.Interface, repository: GetRedirectByIdRepository.Interface);
5
7
  execute(id: string): UseCaseAbstraction.Return;
6
8
  }
7
9
  export declare const GetRedirectByIdUseCase: import("@webiny/di").Implementation<typeof GetRedirectByIdUseCaseImpl>;
@@ -1,17 +1,32 @@
1
- import { createImplementation } from "@webiny/feature/api";
1
+ import { Result, createImplementation } from "@webiny/feature/api";
2
2
  import { GetRedirectByIdUseCase as UseCaseAbstraction, GetRedirectByIdRepository } from "./abstractions.js";
3
+ import { WbPermissions } from "../../../domain/permissions.js";
4
+ import { RedirectNotAuthorizedError } from "../../../domain/redirect/errors.js";
3
5
  class GetRedirectByIdUseCaseImpl {
4
- constructor(repository) {
6
+ constructor(permissions, repository) {
7
+ this.permissions = permissions;
5
8
  this.repository = repository;
6
9
  }
7
10
  async execute(id) {
8
- return await this.repository.execute(id);
11
+ const hasPermission = await this.permissions.canRead("redirect");
12
+ if (!hasPermission) {
13
+ return Result.fail(new RedirectNotAuthorizedError());
14
+ }
15
+ const result = await this.repository.execute(id);
16
+ if (result.isFail()) {
17
+ return result;
18
+ }
19
+ const canAccess = await this.permissions.canAccess("redirect", result.value);
20
+ if (!canAccess) {
21
+ return Result.fail(new RedirectNotAuthorizedError());
22
+ }
23
+ return result;
9
24
  }
10
25
  }
11
26
  export const GetRedirectByIdUseCase = createImplementation({
12
27
  abstraction: UseCaseAbstraction,
13
28
  implementation: GetRedirectByIdUseCaseImpl,
14
- dependencies: [GetRedirectByIdRepository]
29
+ dependencies: [WbPermissions.Abstraction, GetRedirectByIdRepository]
15
30
  });
16
31
 
17
32
  //# sourceMappingURL=GetRedirectByIdUseCase.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createImplementation","GetRedirectByIdUseCase","UseCaseAbstraction","GetRedirectByIdRepository","GetRedirectByIdUseCaseImpl","constructor","repository","execute","id","abstraction","implementation","dependencies"],"sources":["GetRedirectByIdUseCase.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport {\n GetRedirectByIdUseCase as UseCaseAbstraction,\n GetRedirectByIdRepository\n} from \"./abstractions.js\";\n\nclass GetRedirectByIdUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(private repository: GetRedirectByIdRepository.Interface) {}\n\n async execute(id: string): UseCaseAbstraction.Return {\n return await this.repository.execute(id);\n }\n}\n\nexport const GetRedirectByIdUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: GetRedirectByIdUseCaseImpl,\n dependencies: [GetRedirectByIdRepository]\n});\n"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ,qBAAqB;AAC1D,SACIC,sBAAsB,IAAIC,kBAAkB,EAC5CC,yBAAyB;AAG7B,MAAMC,0BAA0B,CAAyC;EACrEC,WAAWA,CAASC,UAA+C,EAAE;IAAA,KAAjDA,UAA+C,GAA/CA,UAA+C;EAAG;EAEtE,MAAMC,OAAOA,CAACC,EAAU,EAA6B;IACjD,OAAO,MAAM,IAAI,CAACF,UAAU,CAACC,OAAO,CAACC,EAAE,CAAC;EAC5C;AACJ;AAEA,OAAO,MAAMP,sBAAsB,GAAGD,oBAAoB,CAAC;EACvDS,WAAW,EAAEP,kBAAkB;EAC/BQ,cAAc,EAAEN,0BAA0B;EAC1CO,YAAY,EAAE,CAACR,yBAAyB;AAC5C,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Result","createImplementation","GetRedirectByIdUseCase","UseCaseAbstraction","GetRedirectByIdRepository","WbPermissions","RedirectNotAuthorizedError","GetRedirectByIdUseCaseImpl","constructor","permissions","repository","execute","id","hasPermission","canRead","fail","result","isFail","canAccess","value","abstraction","implementation","dependencies","Abstraction"],"sources":["GetRedirectByIdUseCase.ts"],"sourcesContent":["import { Result, createImplementation } from \"@webiny/feature/api\";\nimport {\n GetRedirectByIdUseCase as UseCaseAbstraction,\n GetRedirectByIdRepository\n} from \"./abstractions.js\";\nimport { WbPermissions } from \"~/domain/permissions.js\";\nimport { RedirectNotAuthorizedError } from \"~/domain/redirect/errors.js\";\n\nclass GetRedirectByIdUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private permissions: WbPermissions.Interface,\n private repository: GetRedirectByIdRepository.Interface\n ) {}\n\n async execute(id: string): UseCaseAbstraction.Return {\n const hasPermission = await this.permissions.canRead(\"redirect\");\n if (!hasPermission) {\n return Result.fail(new RedirectNotAuthorizedError());\n }\n\n const result = await this.repository.execute(id);\n\n if (result.isFail()) {\n return result;\n }\n\n const canAccess = await this.permissions.canAccess(\"redirect\", result.value);\n if (!canAccess) {\n return Result.fail(new RedirectNotAuthorizedError());\n }\n\n return result;\n }\n}\n\nexport const GetRedirectByIdUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: GetRedirectByIdUseCaseImpl,\n dependencies: [WbPermissions.Abstraction, GetRedirectByIdRepository]\n});\n"],"mappings":"AAAA,SAASA,MAAM,EAAEC,oBAAoB,QAAQ,qBAAqB;AAClE,SACIC,sBAAsB,IAAIC,kBAAkB,EAC5CC,yBAAyB;AAE7B,SAASC,aAAa;AACtB,SAASC,0BAA0B;AAEnC,MAAMC,0BAA0B,CAAyC;EACrEC,WAAWA,CACCC,WAAoC,EACpCC,UAA+C,EACzD;IAAA,KAFUD,WAAoC,GAApCA,WAAoC;IAAA,KACpCC,UAA+C,GAA/CA,UAA+C;EACxD;EAEH,MAAMC,OAAOA,CAACC,EAAU,EAA6B;IACjD,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACJ,WAAW,CAACK,OAAO,CAAC,UAAU,CAAC;IAChE,IAAI,CAACD,aAAa,EAAE;MAChB,OAAOb,MAAM,CAACe,IAAI,CAAC,IAAIT,0BAA0B,CAAC,CAAC,CAAC;IACxD;IAEA,MAAMU,MAAM,GAAG,MAAM,IAAI,CAACN,UAAU,CAACC,OAAO,CAACC,EAAE,CAAC;IAEhD,IAAII,MAAM,CAACC,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOD,MAAM;IACjB;IAEA,MAAME,SAAS,GAAG,MAAM,IAAI,CAACT,WAAW,CAACS,SAAS,CAAC,UAAU,EAAEF,MAAM,CAACG,KAAK,CAAC;IAC5E,IAAI,CAACD,SAAS,EAAE;MACZ,OAAOlB,MAAM,CAACe,IAAI,CAAC,IAAIT,0BAA0B,CAAC,CAAC,CAAC;IACxD;IAEA,OAAOU,MAAM;EACjB;AACJ;AAEA,OAAO,MAAMd,sBAAsB,GAAGD,oBAAoB,CAAC;EACvDmB,WAAW,EAAEjB,kBAAkB;EAC/BkB,cAAc,EAAEd,0BAA0B;EAC1Ce,YAAY,EAAE,CAACjB,aAAa,CAACkB,WAAW,EAAEnB,yBAAyB;AACvE,CAAC,CAAC","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  import type { Result } from "@webiny/feature/api";
2
2
  import type { WbRedirect } from "../../../domain/redirect/abstractions.js";
3
- import type { RedirectNotFoundError, RedirectPersistenceError } from "../../../domain/redirect/errors.js";
3
+ import type { RedirectNotFoundError, RedirectPersistenceError, RedirectNotAuthorizedError } from "../../../domain/redirect/errors.js";
4
4
  /**
5
5
  * GetRedirectById repository interface
6
6
  */
@@ -26,6 +26,7 @@ export interface IGetRedirectByIdUseCase {
26
26
  execute(id: string): Promise<Result<WbRedirect, UseCaseError>>;
27
27
  }
28
28
  export interface IGetRedirectByIdUseCaseErrors {
29
+ notAuthorized: RedirectNotAuthorizedError;
29
30
  notFound: RedirectNotFoundError;
30
31
  persistence: RedirectPersistenceError;
31
32
  }
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","GetRedirectByIdRepository","GetRedirectByIdUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Result } from \"@webiny/feature/api\";\nimport type { WbRedirect } from \"~/domain/redirect/abstractions.js\";\nimport type { RedirectNotFoundError, RedirectPersistenceError } from \"~/domain/redirect/errors.js\";\n\n/**\n * GetRedirectById repository interface\n */\nexport interface IGetRedirectByIdRepository {\n execute(id: string): Promise<Result<WbRedirect, RepositoryError>>;\n}\n\nexport interface IGetRedirectByIdRepositoryErrors {\n notFound: RedirectNotFoundError;\n persistence: RedirectPersistenceError;\n}\n\ntype RepositoryError = IGetRedirectByIdRepositoryErrors[keyof IGetRedirectByIdRepositoryErrors];\n\nexport const GetRedirectByIdRepository = createAbstraction<IGetRedirectByIdRepository>(\n \"Wb/GetRedirectByIdRepository\"\n);\n\nexport namespace GetRedirectByIdRepository {\n export type Interface = IGetRedirectByIdRepository;\n export type Error = RepositoryError;\n export type Return = Promise<Result<WbRedirect, RepositoryError>>;\n export type Redirect = WbRedirect;\n}\n\n/**\n * GetRedirectById use case interface\n */\nexport interface IGetRedirectByIdUseCase {\n execute(id: string): Promise<Result<WbRedirect, UseCaseError>>;\n}\n\nexport interface IGetRedirectByIdUseCaseErrors {\n notFound: RedirectNotFoundError;\n persistence: RedirectPersistenceError;\n}\n\ntype UseCaseError = IGetRedirectByIdUseCaseErrors[keyof IGetRedirectByIdUseCaseErrors];\n\nexport const GetRedirectByIdUseCase = createAbstraction<IGetRedirectByIdUseCase>(\n \"Wb/GetRedirectByIdUseCase\"\n);\n\nexport namespace GetRedirectByIdUseCase {\n export type Interface = IGetRedirectByIdUseCase;\n export type Return = Promise<Result<WbRedirect, UseCaseError>>;\n export type Error = UseCaseError;\n export type Redirect = WbRedirect;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAKvD;AACA;AACA;;AAYA,OAAO,MAAMC,yBAAyB,GAAGD,iBAAiB,CACtD,8BACJ,CAAC;;AASD;AACA;AACA;;AAYA,OAAO,MAAME,sBAAsB,GAAGF,iBAAiB,CACnD,2BACJ,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","GetRedirectByIdRepository","GetRedirectByIdUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Result } from \"@webiny/feature/api\";\nimport type { WbRedirect } from \"~/domain/redirect/abstractions.js\";\nimport type {\n RedirectNotFoundError,\n RedirectPersistenceError,\n RedirectNotAuthorizedError\n} from \"~/domain/redirect/errors.js\";\n\n/**\n * GetRedirectById repository interface\n */\nexport interface IGetRedirectByIdRepository {\n execute(id: string): Promise<Result<WbRedirect, RepositoryError>>;\n}\n\nexport interface IGetRedirectByIdRepositoryErrors {\n notFound: RedirectNotFoundError;\n persistence: RedirectPersistenceError;\n}\n\ntype RepositoryError = IGetRedirectByIdRepositoryErrors[keyof IGetRedirectByIdRepositoryErrors];\n\nexport const GetRedirectByIdRepository = createAbstraction<IGetRedirectByIdRepository>(\n \"Wb/GetRedirectByIdRepository\"\n);\n\nexport namespace GetRedirectByIdRepository {\n export type Interface = IGetRedirectByIdRepository;\n export type Error = RepositoryError;\n export type Return = Promise<Result<WbRedirect, RepositoryError>>;\n export type Redirect = WbRedirect;\n}\n\n/**\n * GetRedirectById use case interface\n */\nexport interface IGetRedirectByIdUseCase {\n execute(id: string): Promise<Result<WbRedirect, UseCaseError>>;\n}\n\nexport interface IGetRedirectByIdUseCaseErrors {\n notAuthorized: RedirectNotAuthorizedError;\n notFound: RedirectNotFoundError;\n persistence: RedirectPersistenceError;\n}\n\ntype UseCaseError = IGetRedirectByIdUseCaseErrors[keyof IGetRedirectByIdUseCaseErrors];\n\nexport const GetRedirectByIdUseCase = createAbstraction<IGetRedirectByIdUseCase>(\n \"Wb/GetRedirectByIdUseCase\"\n);\n\nexport namespace GetRedirectByIdUseCase {\n export type Interface = IGetRedirectByIdUseCase;\n export type Return = Promise<Result<WbRedirect, UseCaseError>>;\n export type Error = UseCaseError;\n export type Redirect = WbRedirect;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AASvD;AACA;AACA;;AAYA,OAAO,MAAMC,yBAAyB,GAAGD,iBAAiB,CACtD,8BACJ,CAAC;;AASD;AACA;AACA;;AAaA,OAAO,MAAME,sBAAsB,GAAGF,iBAAiB,CACnD,2BACJ,CAAC","ignoreList":[]}
@@ -1,9 +1,9 @@
1
- import { RedirectAfterCreateHandler } from "../../../features/redirects/CreateRedirect/index.js";
1
+ import { RedirectAfterCreateEventHandler } from "../../../features/redirects/CreateRedirect/index.js";
2
2
  import { InvalidateRedirectsCacheUseCase } from "./abstractions.js";
3
- declare class RedirectAfterCreateHandlerImpl implements RedirectAfterCreateHandler.Interface {
3
+ declare class RedirectAfterCreateHandlerImpl implements RedirectAfterCreateEventHandler.Interface {
4
4
  private invalidateCache;
5
5
  constructor(invalidateCache: InvalidateRedirectsCacheUseCase.Interface);
6
- handle(event: RedirectAfterCreateHandler.Event): Promise<void>;
6
+ handle(event: RedirectAfterCreateEventHandler.Event): Promise<void>;
7
7
  }
8
8
  export declare const RedirectAfterCreateCacheHandler: import("@webiny/di").Implementation<typeof RedirectAfterCreateHandlerImpl>;
9
9
  export {};
@@ -1,5 +1,5 @@
1
1
  import { createImplementation } from "@webiny/feature/api";
2
- import { RedirectAfterCreateHandler } from "../CreateRedirect/index.js";
2
+ import { RedirectAfterCreateEventHandler } from "../CreateRedirect/index.js";
3
3
  import { InvalidateRedirectsCacheUseCase } from "./abstractions.js";
4
4
  class RedirectAfterCreateHandlerImpl {
5
5
  constructor(invalidateCache) {
@@ -17,7 +17,7 @@ class RedirectAfterCreateHandlerImpl {
17
17
  }
18
18
  }
19
19
  export const RedirectAfterCreateCacheHandler = createImplementation({
20
- abstraction: RedirectAfterCreateHandler,
20
+ abstraction: RedirectAfterCreateEventHandler,
21
21
  implementation: RedirectAfterCreateHandlerImpl,
22
22
  dependencies: [InvalidateRedirectsCacheUseCase]
23
23
  });
@@ -1 +1 @@
1
- {"version":3,"names":["createImplementation","RedirectAfterCreateHandler","InvalidateRedirectsCacheUseCase","RedirectAfterCreateHandlerImpl","constructor","invalidateCache","handle","event","redirect","payload","isEnabled","execute","RedirectAfterCreateCacheHandler","abstraction","implementation","dependencies"],"sources":["RedirectAfterCreateHandler.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { RedirectAfterCreateHandler } from \"~/features/redirects/CreateRedirect/index.js\";\nimport { InvalidateRedirectsCacheUseCase } from \"./abstractions.js\";\n\nclass RedirectAfterCreateHandlerImpl implements RedirectAfterCreateHandler.Interface {\n constructor(private invalidateCache: InvalidateRedirectsCacheUseCase.Interface) {}\n\n async handle(event: RedirectAfterCreateHandler.Event): Promise<void> {\n const { redirect } = event.payload;\n\n // Only invalidate cache if the redirect is enabled\n if (redirect.isEnabled) {\n await this.invalidateCache.execute();\n }\n }\n}\n\nexport const RedirectAfterCreateCacheHandler = createImplementation({\n abstraction: RedirectAfterCreateHandler,\n implementation: RedirectAfterCreateHandlerImpl,\n dependencies: [InvalidateRedirectsCacheUseCase]\n});\n"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ,qBAAqB;AAC1D,SAASC,0BAA0B;AACnC,SAASC,+BAA+B;AAExC,MAAMC,8BAA8B,CAAiD;EACjFC,WAAWA,CAASC,eAA0D,EAAE;IAAA,KAA5DA,eAA0D,GAA1DA,eAA0D;EAAG;EAEjF,MAAMC,MAAMA,CAACC,KAAuC,EAAiB;IACjE,MAAM;MAAEC;IAAS,CAAC,GAAGD,KAAK,CAACE,OAAO;;IAElC;IACA,IAAID,QAAQ,CAACE,SAAS,EAAE;MACpB,MAAM,IAAI,CAACL,eAAe,CAACM,OAAO,CAAC,CAAC;IACxC;EACJ;AACJ;AAEA,OAAO,MAAMC,+BAA+B,GAAGZ,oBAAoB,CAAC;EAChEa,WAAW,EAAEZ,0BAA0B;EACvCa,cAAc,EAAEX,8BAA8B;EAC9CY,YAAY,EAAE,CAACb,+BAA+B;AAClD,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createImplementation","RedirectAfterCreateEventHandler","InvalidateRedirectsCacheUseCase","RedirectAfterCreateHandlerImpl","constructor","invalidateCache","handle","event","redirect","payload","isEnabled","execute","RedirectAfterCreateCacheHandler","abstraction","implementation","dependencies"],"sources":["RedirectAfterCreateHandler.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { RedirectAfterCreateEventHandler } from \"~/features/redirects/CreateRedirect/index.js\";\nimport { InvalidateRedirectsCacheUseCase } from \"./abstractions.js\";\n\nclass RedirectAfterCreateHandlerImpl implements RedirectAfterCreateEventHandler.Interface {\n constructor(private invalidateCache: InvalidateRedirectsCacheUseCase.Interface) {}\n\n async handle(event: RedirectAfterCreateEventHandler.Event): Promise<void> {\n const { redirect } = event.payload;\n\n // Only invalidate cache if the redirect is enabled\n if (redirect.isEnabled) {\n await this.invalidateCache.execute();\n }\n }\n}\n\nexport const RedirectAfterCreateCacheHandler = createImplementation({\n abstraction: RedirectAfterCreateEventHandler,\n implementation: RedirectAfterCreateHandlerImpl,\n dependencies: [InvalidateRedirectsCacheUseCase]\n});\n"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ,qBAAqB;AAC1D,SAASC,+BAA+B;AACxC,SAASC,+BAA+B;AAExC,MAAMC,8BAA8B,CAAsD;EACtFC,WAAWA,CAASC,eAA0D,EAAE;IAAA,KAA5DA,eAA0D,GAA1DA,eAA0D;EAAG;EAEjF,MAAMC,MAAMA,CAACC,KAA4C,EAAiB;IACtE,MAAM;MAAEC;IAAS,CAAC,GAAGD,KAAK,CAACE,OAAO;;IAElC;IACA,IAAID,QAAQ,CAACE,SAAS,EAAE;MACpB,MAAM,IAAI,CAACL,eAAe,CAACM,OAAO,CAAC,CAAC;IACxC;EACJ;AACJ;AAEA,OAAO,MAAMC,+BAA+B,GAAGZ,oBAAoB,CAAC;EAChEa,WAAW,EAAEZ,+BAA+B;EAC5Ca,cAAc,EAAEX,8BAA8B;EAC9CY,YAAY,EAAE,CAACb,+BAA+B;AAClD,CAAC,CAAC","ignoreList":[]}
@@ -1,9 +1,9 @@
1
- import { RedirectAfterDeleteHandler } from "../../../features/redirects/DeleteRedirect/index.js";
1
+ import { RedirectAfterDeleteEventHandler } from "../../../features/redirects/DeleteRedirect/index.js";
2
2
  import { InvalidateRedirectsCacheUseCase } from "./abstractions.js";
3
- declare class RedirectAfterDeleteHandlerImpl implements RedirectAfterDeleteHandler.Interface {
3
+ declare class RedirectAfterDeleteHandlerImpl implements RedirectAfterDeleteEventHandler.Interface {
4
4
  private invalidateCache;
5
5
  constructor(invalidateCache: InvalidateRedirectsCacheUseCase.Interface);
6
- handle(event: RedirectAfterDeleteHandler.Event): Promise<void>;
6
+ handle(event: RedirectAfterDeleteEventHandler.Event): Promise<void>;
7
7
  }
8
8
  export declare const RedirectAfterDeleteCacheHandler: import("@webiny/di").Implementation<typeof RedirectAfterDeleteHandlerImpl>;
9
9
  export {};
@@ -1,5 +1,5 @@
1
1
  import { createImplementation } from "@webiny/feature/api";
2
- import { RedirectAfterDeleteHandler } from "../DeleteRedirect/index.js";
2
+ import { RedirectAfterDeleteEventHandler } from "../DeleteRedirect/index.js";
3
3
  import { InvalidateRedirectsCacheUseCase } from "./abstractions.js";
4
4
  class RedirectAfterDeleteHandlerImpl {
5
5
  constructor(invalidateCache) {
@@ -17,7 +17,7 @@ class RedirectAfterDeleteHandlerImpl {
17
17
  }
18
18
  }
19
19
  export const RedirectAfterDeleteCacheHandler = createImplementation({
20
- abstraction: RedirectAfterDeleteHandler,
20
+ abstraction: RedirectAfterDeleteEventHandler,
21
21
  implementation: RedirectAfterDeleteHandlerImpl,
22
22
  dependencies: [InvalidateRedirectsCacheUseCase]
23
23
  });
@@ -1 +1 @@
1
- {"version":3,"names":["createImplementation","RedirectAfterDeleteHandler","InvalidateRedirectsCacheUseCase","RedirectAfterDeleteHandlerImpl","constructor","invalidateCache","handle","event","redirect","payload","isEnabled","execute","RedirectAfterDeleteCacheHandler","abstraction","implementation","dependencies"],"sources":["RedirectAfterDeleteHandler.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { RedirectAfterDeleteHandler } from \"~/features/redirects/DeleteRedirect/index.js\";\nimport { InvalidateRedirectsCacheUseCase } from \"./abstractions.js\";\n\nclass RedirectAfterDeleteHandlerImpl implements RedirectAfterDeleteHandler.Interface {\n constructor(private invalidateCache: InvalidateRedirectsCacheUseCase.Interface) {}\n\n async handle(event: RedirectAfterDeleteHandler.Event): Promise<void> {\n const { redirect } = event.payload;\n\n // Only invalidate cache if the redirect was enabled\n if (redirect.isEnabled) {\n await this.invalidateCache.execute();\n }\n }\n}\n\nexport const RedirectAfterDeleteCacheHandler = createImplementation({\n abstraction: RedirectAfterDeleteHandler,\n implementation: RedirectAfterDeleteHandlerImpl,\n dependencies: [InvalidateRedirectsCacheUseCase]\n});\n"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ,qBAAqB;AAC1D,SAASC,0BAA0B;AACnC,SAASC,+BAA+B;AAExC,MAAMC,8BAA8B,CAAiD;EACjFC,WAAWA,CAASC,eAA0D,EAAE;IAAA,KAA5DA,eAA0D,GAA1DA,eAA0D;EAAG;EAEjF,MAAMC,MAAMA,CAACC,KAAuC,EAAiB;IACjE,MAAM;MAAEC;IAAS,CAAC,GAAGD,KAAK,CAACE,OAAO;;IAElC;IACA,IAAID,QAAQ,CAACE,SAAS,EAAE;MACpB,MAAM,IAAI,CAACL,eAAe,CAACM,OAAO,CAAC,CAAC;IACxC;EACJ;AACJ;AAEA,OAAO,MAAMC,+BAA+B,GAAGZ,oBAAoB,CAAC;EAChEa,WAAW,EAAEZ,0BAA0B;EACvCa,cAAc,EAAEX,8BAA8B;EAC9CY,YAAY,EAAE,CAACb,+BAA+B;AAClD,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createImplementation","RedirectAfterDeleteEventHandler","InvalidateRedirectsCacheUseCase","RedirectAfterDeleteHandlerImpl","constructor","invalidateCache","handle","event","redirect","payload","isEnabled","execute","RedirectAfterDeleteCacheHandler","abstraction","implementation","dependencies"],"sources":["RedirectAfterDeleteHandler.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { RedirectAfterDeleteEventHandler } from \"~/features/redirects/DeleteRedirect/index.js\";\nimport { InvalidateRedirectsCacheUseCase } from \"./abstractions.js\";\n\nclass RedirectAfterDeleteHandlerImpl implements RedirectAfterDeleteEventHandler.Interface {\n constructor(private invalidateCache: InvalidateRedirectsCacheUseCase.Interface) {}\n\n async handle(event: RedirectAfterDeleteEventHandler.Event): Promise<void> {\n const { redirect } = event.payload;\n\n // Only invalidate cache if the redirect was enabled\n if (redirect.isEnabled) {\n await this.invalidateCache.execute();\n }\n }\n}\n\nexport const RedirectAfterDeleteCacheHandler = createImplementation({\n abstraction: RedirectAfterDeleteEventHandler,\n implementation: RedirectAfterDeleteHandlerImpl,\n dependencies: [InvalidateRedirectsCacheUseCase]\n});\n"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ,qBAAqB;AAC1D,SAASC,+BAA+B;AACxC,SAASC,+BAA+B;AAExC,MAAMC,8BAA8B,CAAsD;EACtFC,WAAWA,CAASC,eAA0D,EAAE;IAAA,KAA5DA,eAA0D,GAA1DA,eAA0D;EAAG;EAEjF,MAAMC,MAAMA,CAACC,KAA4C,EAAiB;IACtE,MAAM;MAAEC;IAAS,CAAC,GAAGD,KAAK,CAACE,OAAO;;IAElC;IACA,IAAID,QAAQ,CAACE,SAAS,EAAE;MACpB,MAAM,IAAI,CAACL,eAAe,CAACM,OAAO,CAAC,CAAC;IACxC;EACJ;AACJ;AAEA,OAAO,MAAMC,+BAA+B,GAAGZ,oBAAoB,CAAC;EAChEa,WAAW,EAAEZ,+BAA+B;EAC5Ca,cAAc,EAAEX,8BAA8B;EAC9CY,YAAY,EAAE,CAACb,+BAA+B;AAClD,CAAC,CAAC","ignoreList":[]}
@@ -1,9 +1,9 @@
1
- import { RedirectAfterUpdateHandler } from "../../../features/redirects/UpdateRedirect/index.js";
1
+ import { RedirectAfterUpdateEventHandler } from "../../../features/redirects/UpdateRedirect/index.js";
2
2
  import { InvalidateRedirectsCacheUseCase } from "./abstractions.js";
3
- declare class RedirectAfterUpdateHandlerImpl implements RedirectAfterUpdateHandler.Interface {
3
+ declare class RedirectAfterUpdateHandlerImpl implements RedirectAfterUpdateEventHandler.Interface {
4
4
  private invalidateCache;
5
5
  constructor(invalidateCache: InvalidateRedirectsCacheUseCase.Interface);
6
- handle(event: RedirectAfterUpdateHandler.Event): Promise<void>;
6
+ handle(event: RedirectAfterUpdateEventHandler.Event): Promise<void>;
7
7
  }
8
8
  export declare const RedirectAfterUpdateCacheHandler: import("@webiny/di").Implementation<typeof RedirectAfterUpdateHandlerImpl>;
9
9
  export {};
@@ -1,5 +1,5 @@
1
1
  import { createImplementation } from "@webiny/feature/api";
2
- import { RedirectAfterUpdateHandler } from "../UpdateRedirect/index.js";
2
+ import { RedirectAfterUpdateEventHandler } from "../UpdateRedirect/index.js";
3
3
  import { InvalidateRedirectsCacheUseCase } from "./abstractions.js";
4
4
  class RedirectAfterUpdateHandlerImpl {
5
5
  constructor(invalidateCache) {
@@ -18,7 +18,7 @@ class RedirectAfterUpdateHandlerImpl {
18
18
  }
19
19
  }
20
20
  export const RedirectAfterUpdateCacheHandler = createImplementation({
21
- abstraction: RedirectAfterUpdateHandler,
21
+ abstraction: RedirectAfterUpdateEventHandler,
22
22
  implementation: RedirectAfterUpdateHandlerImpl,
23
23
  dependencies: [InvalidateRedirectsCacheUseCase]
24
24
  });
@@ -1 +1 @@
1
- {"version":3,"names":["createImplementation","RedirectAfterUpdateHandler","InvalidateRedirectsCacheUseCase","RedirectAfterUpdateHandlerImpl","constructor","invalidateCache","handle","event","redirect","original","payload","redirectFrom","redirectTo","isEnabled","execute","RedirectAfterUpdateCacheHandler","abstraction","implementation","dependencies"],"sources":["RedirectAfterUpdateHandler.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { RedirectAfterUpdateHandler } from \"~/features/redirects/UpdateRedirect/index.js\";\nimport { InvalidateRedirectsCacheUseCase } from \"./abstractions.js\";\n\nclass RedirectAfterUpdateHandlerImpl implements RedirectAfterUpdateHandler.Interface {\n constructor(private invalidateCache: InvalidateRedirectsCacheUseCase.Interface) {}\n\n async handle(event: RedirectAfterUpdateHandler.Event): Promise<void> {\n const { redirect, original } = event.payload;\n\n // Invalidate cache if any redirect-related field changed or isEnabled changed\n if (\n redirect.redirectFrom !== original.redirectFrom ||\n redirect.redirectTo !== original.redirectTo ||\n redirect.isEnabled !== original.isEnabled\n ) {\n await this.invalidateCache.execute();\n }\n }\n}\n\nexport const RedirectAfterUpdateCacheHandler = createImplementation({\n abstraction: RedirectAfterUpdateHandler,\n implementation: RedirectAfterUpdateHandlerImpl,\n dependencies: [InvalidateRedirectsCacheUseCase]\n});\n"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ,qBAAqB;AAC1D,SAASC,0BAA0B;AACnC,SAASC,+BAA+B;AAExC,MAAMC,8BAA8B,CAAiD;EACjFC,WAAWA,CAASC,eAA0D,EAAE;IAAA,KAA5DA,eAA0D,GAA1DA,eAA0D;EAAG;EAEjF,MAAMC,MAAMA,CAACC,KAAuC,EAAiB;IACjE,MAAM;MAAEC,QAAQ;MAAEC;IAAS,CAAC,GAAGF,KAAK,CAACG,OAAO;;IAE5C;IACA,IACIF,QAAQ,CAACG,YAAY,KAAKF,QAAQ,CAACE,YAAY,IAC/CH,QAAQ,CAACI,UAAU,KAAKH,QAAQ,CAACG,UAAU,IAC3CJ,QAAQ,CAACK,SAAS,KAAKJ,QAAQ,CAACI,SAAS,EAC3C;MACE,MAAM,IAAI,CAACR,eAAe,CAACS,OAAO,CAAC,CAAC;IACxC;EACJ;AACJ;AAEA,OAAO,MAAMC,+BAA+B,GAAGf,oBAAoB,CAAC;EAChEgB,WAAW,EAAEf,0BAA0B;EACvCgB,cAAc,EAAEd,8BAA8B;EAC9Ce,YAAY,EAAE,CAAChB,+BAA+B;AAClD,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createImplementation","RedirectAfterUpdateEventHandler","InvalidateRedirectsCacheUseCase","RedirectAfterUpdateHandlerImpl","constructor","invalidateCache","handle","event","redirect","original","payload","redirectFrom","redirectTo","isEnabled","execute","RedirectAfterUpdateCacheHandler","abstraction","implementation","dependencies"],"sources":["RedirectAfterUpdateHandler.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { RedirectAfterUpdateEventHandler } from \"~/features/redirects/UpdateRedirect/index.js\";\nimport { InvalidateRedirectsCacheUseCase } from \"./abstractions.js\";\n\nclass RedirectAfterUpdateHandlerImpl implements RedirectAfterUpdateEventHandler.Interface {\n constructor(private invalidateCache: InvalidateRedirectsCacheUseCase.Interface) {}\n\n async handle(event: RedirectAfterUpdateEventHandler.Event): Promise<void> {\n const { redirect, original } = event.payload;\n\n // Invalidate cache if any redirect-related field changed or isEnabled changed\n if (\n redirect.redirectFrom !== original.redirectFrom ||\n redirect.redirectTo !== original.redirectTo ||\n redirect.isEnabled !== original.isEnabled\n ) {\n await this.invalidateCache.execute();\n }\n }\n}\n\nexport const RedirectAfterUpdateCacheHandler = createImplementation({\n abstraction: RedirectAfterUpdateEventHandler,\n implementation: RedirectAfterUpdateHandlerImpl,\n dependencies: [InvalidateRedirectsCacheUseCase]\n});\n"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ,qBAAqB;AAC1D,SAASC,+BAA+B;AACxC,SAASC,+BAA+B;AAExC,MAAMC,8BAA8B,CAAsD;EACtFC,WAAWA,CAASC,eAA0D,EAAE;IAAA,KAA5DA,eAA0D,GAA1DA,eAA0D;EAAG;EAEjF,MAAMC,MAAMA,CAACC,KAA4C,EAAiB;IACtE,MAAM;MAAEC,QAAQ;MAAEC;IAAS,CAAC,GAAGF,KAAK,CAACG,OAAO;;IAE5C;IACA,IACIF,QAAQ,CAACG,YAAY,KAAKF,QAAQ,CAACE,YAAY,IAC/CH,QAAQ,CAACI,UAAU,KAAKH,QAAQ,CAACG,UAAU,IAC3CJ,QAAQ,CAACK,SAAS,KAAKJ,QAAQ,CAACI,SAAS,EAC3C;MACE,MAAM,IAAI,CAACR,eAAe,CAACS,OAAO,CAAC,CAAC;IACxC;EACJ;AACJ;AAEA,OAAO,MAAMC,+BAA+B,GAAGf,oBAAoB,CAAC;EAChEgB,WAAW,EAAEf,+BAA+B;EAC5CgB,cAAc,EAAEd,8BAA8B;EAC9Ce,YAAY,EAAE,CAAChB,+BAA+B;AAClD,CAAC,CAAC","ignoreList":[]}
@@ -1,7 +1,11 @@
1
1
  import { ListRedirectsUseCase as UseCaseAbstraction, ListRedirectsRepository } from "./abstractions.js";
2
+ import { WbPermissions } from "../../../domain/permissions.js";
3
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
2
4
  declare class ListRedirectsUseCaseImpl implements UseCaseAbstraction.Interface {
5
+ private permissions;
6
+ private identityContext;
3
7
  private repository;
4
- constructor(repository: ListRedirectsRepository.Interface);
8
+ constructor(permissions: WbPermissions.Interface, identityContext: IdentityContext.Interface, repository: ListRedirectsRepository.Interface);
5
9
  execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return;
6
10
  }
7
11
  export declare const ListRedirectsUseCase: import("@webiny/di").Implementation<typeof ListRedirectsUseCaseImpl>;
@@ -1,17 +1,36 @@
1
- import { createImplementation } from "@webiny/feature/api";
1
+ import { Result, createImplementation } from "@webiny/feature/api";
2
2
  import { ListRedirectsUseCase as UseCaseAbstraction, ListRedirectsRepository } from "./abstractions.js";
3
+ import { WbPermissions } from "../../../domain/permissions.js";
4
+ import { RedirectNotAuthorizedError } from "../../../domain/redirect/errors.js";
5
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
3
6
  class ListRedirectsUseCaseImpl {
4
- constructor(repository) {
7
+ constructor(permissions, identityContext, repository) {
8
+ this.permissions = permissions;
9
+ this.identityContext = identityContext;
5
10
  this.repository = repository;
6
11
  }
7
12
  async execute(params) {
8
- return await this.repository.execute(params);
13
+ const hasPermission = await this.permissions.canRead("redirect");
14
+ if (!hasPermission) {
15
+ return Result.fail(new RedirectNotAuthorizedError());
16
+ }
17
+ const where = {
18
+ ...params.where
19
+ };
20
+ if (await this.permissions.onlyOwnRecords("redirect")) {
21
+ const identity = this.identityContext.getIdentity();
22
+ where.createdBy = identity.id;
23
+ }
24
+ return await this.repository.execute({
25
+ ...params,
26
+ where
27
+ });
9
28
  }
10
29
  }
11
30
  export const ListRedirectsUseCase = createImplementation({
12
31
  abstraction: UseCaseAbstraction,
13
32
  implementation: ListRedirectsUseCaseImpl,
14
- dependencies: [ListRedirectsRepository]
33
+ dependencies: [WbPermissions.Abstraction, IdentityContext, ListRedirectsRepository]
15
34
  });
16
35
 
17
36
  //# sourceMappingURL=ListRedirectsUseCase.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createImplementation","ListRedirectsUseCase","UseCaseAbstraction","ListRedirectsRepository","ListRedirectsUseCaseImpl","constructor","repository","execute","params","abstraction","implementation","dependencies"],"sources":["ListRedirectsUseCase.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport {\n ListRedirectsUseCase as UseCaseAbstraction,\n ListRedirectsRepository\n} from \"./abstractions.js\";\n\nclass ListRedirectsUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(private repository: ListRedirectsRepository.Interface) {}\n\n async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n return await this.repository.execute(params);\n }\n}\n\nexport const ListRedirectsUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: ListRedirectsUseCaseImpl,\n dependencies: [ListRedirectsRepository]\n});\n"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ,qBAAqB;AAC1D,SACIC,oBAAoB,IAAIC,kBAAkB,EAC1CC,uBAAuB;AAG3B,MAAMC,wBAAwB,CAAyC;EACnEC,WAAWA,CAASC,UAA6C,EAAE;IAAA,KAA/CA,UAA6C,GAA7CA,UAA6C;EAAG;EAEpE,MAAMC,OAAOA,CAACC,MAAiC,EAA6B;IACxE,OAAO,MAAM,IAAI,CAACF,UAAU,CAACC,OAAO,CAACC,MAAM,CAAC;EAChD;AACJ;AAEA,OAAO,MAAMP,oBAAoB,GAAGD,oBAAoB,CAAC;EACrDS,WAAW,EAAEP,kBAAkB;EAC/BQ,cAAc,EAAEN,wBAAwB;EACxCO,YAAY,EAAE,CAACR,uBAAuB;AAC1C,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Result","createImplementation","ListRedirectsUseCase","UseCaseAbstraction","ListRedirectsRepository","WbPermissions","RedirectNotAuthorizedError","IdentityContext","ListRedirectsUseCaseImpl","constructor","permissions","identityContext","repository","execute","params","hasPermission","canRead","fail","where","onlyOwnRecords","identity","getIdentity","createdBy","id","abstraction","implementation","dependencies","Abstraction"],"sources":["ListRedirectsUseCase.ts"],"sourcesContent":["import { Result, createImplementation } from \"@webiny/feature/api\";\nimport {\n ListRedirectsUseCase as UseCaseAbstraction,\n ListRedirectsRepository\n} from \"./abstractions.js\";\nimport { WbPermissions } from \"~/domain/permissions.js\";\nimport { RedirectNotAuthorizedError } from \"~/domain/redirect/errors.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\n\nclass ListRedirectsUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private permissions: WbPermissions.Interface,\n private identityContext: IdentityContext.Interface,\n private repository: ListRedirectsRepository.Interface\n ) {}\n\n async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n const hasPermission = await this.permissions.canRead(\"redirect\");\n if (!hasPermission) {\n return Result.fail(new RedirectNotAuthorizedError());\n }\n\n const where = { ...params.where };\n\n if (await this.permissions.onlyOwnRecords(\"redirect\")) {\n const identity = this.identityContext.getIdentity();\n where.createdBy = identity.id;\n }\n\n return await this.repository.execute({ ...params, where });\n }\n}\n\nexport const ListRedirectsUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: ListRedirectsUseCaseImpl,\n dependencies: [WbPermissions.Abstraction, IdentityContext, ListRedirectsRepository]\n});\n"],"mappings":"AAAA,SAASA,MAAM,EAAEC,oBAAoB,QAAQ,qBAAqB;AAClE,SACIC,oBAAoB,IAAIC,kBAAkB,EAC1CC,uBAAuB;AAE3B,SAASC,aAAa;AACtB,SAASC,0BAA0B;AACnC,SAASC,eAAe,QAAQ,6DAA6D;AAE7F,MAAMC,wBAAwB,CAAyC;EACnEC,WAAWA,CACCC,WAAoC,EACpCC,eAA0C,EAC1CC,UAA6C,EACvD;IAAA,KAHUF,WAAoC,GAApCA,WAAoC;IAAA,KACpCC,eAA0C,GAA1CA,eAA0C;IAAA,KAC1CC,UAA6C,GAA7CA,UAA6C;EACtD;EAEH,MAAMC,OAAOA,CAACC,MAAiC,EAA6B;IACxE,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACL,WAAW,CAACM,OAAO,CAAC,UAAU,CAAC;IAChE,IAAI,CAACD,aAAa,EAAE;MAChB,OAAOf,MAAM,CAACiB,IAAI,CAAC,IAAIX,0BAA0B,CAAC,CAAC,CAAC;IACxD;IAEA,MAAMY,KAAK,GAAG;MAAE,GAAGJ,MAAM,CAACI;IAAM,CAAC;IAEjC,IAAI,MAAM,IAAI,CAACR,WAAW,CAACS,cAAc,CAAC,UAAU,CAAC,EAAE;MACnD,MAAMC,QAAQ,GAAG,IAAI,CAACT,eAAe,CAACU,WAAW,CAAC,CAAC;MACnDH,KAAK,CAACI,SAAS,GAAGF,QAAQ,CAACG,EAAE;IACjC;IAEA,OAAO,MAAM,IAAI,CAACX,UAAU,CAACC,OAAO,CAAC;MAAE,GAAGC,MAAM;MAAEI;IAAM,CAAC,CAAC;EAC9D;AACJ;AAEA,OAAO,MAAMhB,oBAAoB,GAAGD,oBAAoB,CAAC;EACrDuB,WAAW,EAAErB,kBAAkB;EAC/BsB,cAAc,EAAEjB,wBAAwB;EACxCkB,YAAY,EAAE,CAACrB,aAAa,CAACsB,WAAW,EAAEpB,eAAe,EAAEH,uBAAuB;AACtF,CAAC,CAAC","ignoreList":[]}
@@ -1,9 +1,10 @@
1
1
  import type { Result } from "@webiny/feature/api";
2
2
  import type { CmsEntryListSort } from "@webiny/api-headless-cms/types/index.js";
3
3
  import type { WbRedirect } from "../../../domain/redirect/abstractions.js";
4
- import type { RedirectPersistenceError } from "../../../domain/redirect/errors.js";
4
+ import type { RedirectPersistenceError, RedirectNotAuthorizedError } from "../../../domain/redirect/errors.js";
5
5
  export interface IListWbRedirectsWhere {
6
6
  latest?: boolean;
7
+ createdBy?: string;
7
8
  redirectFrom?: string;
8
9
  redirectFrom_not?: string;
9
10
  redirectFrom_in?: string[];
@@ -53,6 +54,7 @@ export interface IListRedirectsUseCase {
53
54
  execute(params: ListWbRedirectsParams): Promise<Result<ListRedirectsResult, UseCaseError>>;
54
55
  }
55
56
  export interface IListRedirectsUseCaseErrors {
57
+ notAuthorized: RedirectNotAuthorizedError;
56
58
  persistence: RedirectPersistenceError;
57
59
  }
58
60
  type UseCaseError = IListRedirectsUseCaseErrors[keyof IListRedirectsUseCaseErrors];
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","ListRedirectsRepository","ListRedirectsUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import type { Result } from \"@webiny/feature/api\";\nimport { createAbstraction } from \"@webiny/feature/api\";\nimport type { CmsEntryListSort } from \"@webiny/api-headless-cms/types/index.js\";\nimport type { WbRedirect } from \"~/domain/redirect/abstractions.js\";\nimport type { RedirectPersistenceError } from \"~/domain/redirect/errors.js\";\n\n// ============================================================================\n// Type Definitions\n// ============================================================================\n\nexport interface IListWbRedirectsWhere {\n latest?: boolean;\n redirectFrom?: string;\n redirectFrom_not?: string;\n redirectFrom_in?: string[];\n redirectFrom_not_in?: string[];\n\n redirectTo?: string;\n redirectTo_not?: string;\n redirectTo_in?: string[];\n redirectTo_not_in?: string[];\n\n redirectType?: string;\n redirectType_not?: string;\n redirectType_in?: string[];\n redirectType_not_in?: string[];\n\n isEnabled?: boolean;\n}\n\nexport interface ListWbRedirectsParams {\n where?: IListWbRedirectsWhere;\n sort?: CmsEntryListSort;\n limit?: number;\n after?: string | null;\n search?: string;\n}\n\nexport interface WbListMeta {\n hasMoreItems: boolean;\n totalCount: number;\n cursor: string | null;\n}\n\nexport type ListRedirectsResult = { redirects: WbRedirect[]; meta: WbListMeta };\n\n// ============================================================================\n// Repository Abstraction\n// ============================================================================\n\nexport interface IListRedirectsRepository {\n execute(params: ListWbRedirectsParams): Promise<Result<ListRedirectsResult, RepositoryError>>;\n}\n\nexport interface IListRedirectsRepositoryErrors {\n persistence: RedirectPersistenceError;\n}\n\ntype RepositoryError = IListRedirectsRepositoryErrors[keyof IListRedirectsRepositoryErrors];\n\nexport const ListRedirectsRepository = createAbstraction<IListRedirectsRepository>(\n \"Wb/ListRedirectsRepository\"\n);\n\nexport namespace ListRedirectsRepository {\n export type Interface = IListRedirectsRepository;\n export type Params = ListWbRedirectsParams;\n export type Return = Promise<Result<ListRedirectsResult, RepositoryError>>;\n export type Error = RepositoryError;\n export type Redirect = WbRedirect;\n}\n\n// ============================================================================\n// Use Case Abstraction\n// ============================================================================\n\nexport interface IListRedirectsUseCase {\n execute(params: ListWbRedirectsParams): Promise<Result<ListRedirectsResult, UseCaseError>>;\n}\n\nexport interface IListRedirectsUseCaseErrors {\n persistence: RedirectPersistenceError;\n}\n\ntype UseCaseError = IListRedirectsUseCaseErrors[keyof IListRedirectsUseCaseErrors];\n\nexport const ListRedirectsUseCase =\n createAbstraction<IListRedirectsUseCase>(\"Wb/ListRedirectsUseCase\");\n\nexport namespace ListRedirectsUseCase {\n export type Interface = IListRedirectsUseCase;\n export type Params = ListWbRedirectsParams;\n export type Return = Promise<Result<ListRedirectsResult, UseCaseError>>;\n export type Error = UseCaseError;\n export type Redirect = WbRedirect;\n}\n"],"mappings":"AACA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAKvD;AACA;AACA;;AAsCA;AACA;AACA;;AAYA,OAAO,MAAMC,uBAAuB,GAAGD,iBAAiB,CACpD,4BACJ,CAAC;;AAUD;AACA;AACA;;AAYA,OAAO,MAAME,oBAAoB,GAC7BF,iBAAiB,CAAwB,yBAAyB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","ListRedirectsRepository","ListRedirectsUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import type { Result } from \"@webiny/feature/api\";\nimport { createAbstraction } from \"@webiny/feature/api\";\nimport type { CmsEntryListSort } from \"@webiny/api-headless-cms/types/index.js\";\nimport type { WbRedirect } from \"~/domain/redirect/abstractions.js\";\nimport type {\n RedirectPersistenceError,\n RedirectNotAuthorizedError\n} from \"~/domain/redirect/errors.js\";\n\n// ============================================================================\n// Type Definitions\n// ============================================================================\n\nexport interface IListWbRedirectsWhere {\n latest?: boolean;\n createdBy?: string;\n redirectFrom?: string;\n redirectFrom_not?: string;\n redirectFrom_in?: string[];\n redirectFrom_not_in?: string[];\n\n redirectTo?: string;\n redirectTo_not?: string;\n redirectTo_in?: string[];\n redirectTo_not_in?: string[];\n\n redirectType?: string;\n redirectType_not?: string;\n redirectType_in?: string[];\n redirectType_not_in?: string[];\n\n isEnabled?: boolean;\n}\n\nexport interface ListWbRedirectsParams {\n where?: IListWbRedirectsWhere;\n sort?: CmsEntryListSort;\n limit?: number;\n after?: string | null;\n search?: string;\n}\n\nexport interface WbListMeta {\n hasMoreItems: boolean;\n totalCount: number;\n cursor: string | null;\n}\n\nexport type ListRedirectsResult = { redirects: WbRedirect[]; meta: WbListMeta };\n\n// ============================================================================\n// Repository Abstraction\n// ============================================================================\n\nexport interface IListRedirectsRepository {\n execute(params: ListWbRedirectsParams): Promise<Result<ListRedirectsResult, RepositoryError>>;\n}\n\nexport interface IListRedirectsRepositoryErrors {\n persistence: RedirectPersistenceError;\n}\n\ntype RepositoryError = IListRedirectsRepositoryErrors[keyof IListRedirectsRepositoryErrors];\n\nexport const ListRedirectsRepository = createAbstraction<IListRedirectsRepository>(\n \"Wb/ListRedirectsRepository\"\n);\n\nexport namespace ListRedirectsRepository {\n export type Interface = IListRedirectsRepository;\n export type Params = ListWbRedirectsParams;\n export type Return = Promise<Result<ListRedirectsResult, RepositoryError>>;\n export type Error = RepositoryError;\n export type Redirect = WbRedirect;\n}\n\n// ============================================================================\n// Use Case Abstraction\n// ============================================================================\n\nexport interface IListRedirectsUseCase {\n execute(params: ListWbRedirectsParams): Promise<Result<ListRedirectsResult, UseCaseError>>;\n}\n\nexport interface IListRedirectsUseCaseErrors {\n notAuthorized: RedirectNotAuthorizedError;\n persistence: RedirectPersistenceError;\n}\n\ntype UseCaseError = IListRedirectsUseCaseErrors[keyof IListRedirectsUseCaseErrors];\n\nexport const ListRedirectsUseCase =\n createAbstraction<IListRedirectsUseCase>(\"Wb/ListRedirectsUseCase\");\n\nexport namespace ListRedirectsUseCase {\n export type Interface = IListRedirectsUseCase;\n export type Params = ListWbRedirectsParams;\n export type Return = Promise<Result<ListRedirectsResult, UseCaseError>>;\n export type Error = UseCaseError;\n export type Redirect = WbRedirect;\n}\n"],"mappings":"AACA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAQvD;AACA;AACA;;AAuCA;AACA;AACA;;AAYA,OAAO,MAAMC,uBAAuB,GAAGD,iBAAiB,CACpD,4BACJ,CAAC;;AAUD;AACA;AACA;;AAaA,OAAO,MAAME,oBAAoB,GAC7BF,iBAAiB,CAAwB,yBAAyB,CAAC","ignoreList":[]}
@@ -1,11 +1,13 @@
1
1
  import { EventPublisher as EventPublisherAbstraction } from "@webiny/api-core/features/EventPublisher";
2
2
  import { MoveRedirectUseCase as UseCaseAbstraction, MoveRedirectRepository } from "./abstractions.js";
3
3
  import { GetRedirectByIdUseCase } from "../../../features/redirects/GetRedirectById/index.js";
4
+ import { WbPermissions } from "../../../domain/permissions.js";
4
5
  declare class MoveRedirectUseCaseImpl implements UseCaseAbstraction.Interface {
6
+ private permissions;
5
7
  private eventPublisher;
6
8
  private getRedirectById;
7
9
  private repository;
8
- constructor(eventPublisher: EventPublisherAbstraction.Interface, getRedirectById: GetRedirectByIdUseCase.Interface, repository: MoveRedirectRepository.Interface);
10
+ constructor(permissions: WbPermissions.Interface, eventPublisher: EventPublisherAbstraction.Interface, getRedirectById: GetRedirectByIdUseCase.Interface, repository: MoveRedirectRepository.Interface);
9
11
  execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return;
10
12
  }
11
13
  export declare const MoveRedirectUseCase: import("@webiny/di").Implementation<typeof MoveRedirectUseCaseImpl>;
@@ -3,19 +3,31 @@ import { EventPublisher } from "@webiny/api-core/features/EventPublisher";
3
3
  import { MoveRedirectUseCase as UseCaseAbstraction, MoveRedirectRepository } from "./abstractions.js";
4
4
  import { RedirectBeforeMoveEvent, RedirectAfterMoveEvent } from "./events.js";
5
5
  import { GetRedirectByIdUseCase } from "../GetRedirectById/index.js";
6
+ import { WbPermissions } from "../../../domain/permissions.js";
7
+ import { RedirectNotAuthorizedError } from "../../../domain/redirect/errors.js";
6
8
  class MoveRedirectUseCaseImpl {
7
- constructor(eventPublisher, getRedirectById, repository) {
9
+ constructor(permissions, eventPublisher, getRedirectById, repository) {
10
+ this.permissions = permissions;
8
11
  this.eventPublisher = eventPublisher;
9
12
  this.getRedirectById = getRedirectById;
10
13
  this.repository = repository;
11
14
  }
12
15
  async execute(params) {
16
+ const hasPermission = await this.permissions.canEdit("redirect");
17
+ if (!hasPermission) {
18
+ return Result.fail(new RedirectNotAuthorizedError());
19
+ }
20
+
13
21
  // Get the original redirect for events
14
22
  const getResult = await this.getRedirectById.execute(params.id);
15
23
  if (getResult.isFail()) {
16
24
  return getResult;
17
25
  }
18
26
  const original = getResult.value;
27
+ const canEdit = await this.permissions.canEdit("redirect", original);
28
+ if (!canEdit) {
29
+ return Result.fail(new RedirectNotAuthorizedError());
30
+ }
19
31
 
20
32
  // Publish before move event
21
33
  const beforeEvent = new RedirectBeforeMoveEvent({
@@ -43,7 +55,7 @@ class MoveRedirectUseCaseImpl {
43
55
  export const MoveRedirectUseCase = createImplementation({
44
56
  abstraction: UseCaseAbstraction,
45
57
  implementation: MoveRedirectUseCaseImpl,
46
- dependencies: [EventPublisher, GetRedirectByIdUseCase, MoveRedirectRepository]
58
+ dependencies: [WbPermissions.Abstraction, EventPublisher, GetRedirectByIdUseCase, MoveRedirectRepository]
47
59
  });
48
60
 
49
61
  //# sourceMappingURL=MoveRedirectUseCase.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Result","createImplementation","EventPublisher","MoveRedirectUseCase","UseCaseAbstraction","MoveRedirectRepository","RedirectBeforeMoveEvent","RedirectAfterMoveEvent","GetRedirectByIdUseCase","MoveRedirectUseCaseImpl","constructor","eventPublisher","getRedirectById","repository","execute","params","getResult","id","isFail","original","value","beforeEvent","input","publish","result","afterEvent","redirect","ok","abstraction","implementation","dependencies"],"sources":["MoveRedirectUseCase.ts"],"sourcesContent":["import { Result, createImplementation } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport {\n MoveRedirectUseCase as UseCaseAbstraction,\n MoveRedirectRepository\n} from \"./abstractions.js\";\nimport { RedirectBeforeMoveEvent, RedirectAfterMoveEvent } from \"./events.js\";\nimport { GetRedirectByIdUseCase } from \"~/features/redirects/GetRedirectById/index.js\";\n\nclass MoveRedirectUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private eventPublisher: EventPublisherAbstraction.Interface,\n private getRedirectById: GetRedirectByIdUseCase.Interface,\n private repository: MoveRedirectRepository.Interface\n ) {}\n\n async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n // Get the original redirect for events\n const getResult = await this.getRedirectById.execute(params.id);\n\n if (getResult.isFail()) {\n return getResult;\n }\n\n const original = getResult.value;\n\n // Publish before move event\n const beforeEvent = new RedirectBeforeMoveEvent({\n original,\n input: params\n });\n\n await this.eventPublisher.publish(beforeEvent);\n\n // Execute the move operation\n const result = await this.repository.execute(params);\n\n if (result.isFail()) {\n return result;\n }\n\n // Publish after move event\n const afterEvent = new RedirectAfterMoveEvent({\n original,\n input: params,\n redirect: result.value\n });\n\n await this.eventPublisher.publish(afterEvent);\n\n return Result.ok(result.value);\n }\n}\n\nexport const MoveRedirectUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: MoveRedirectUseCaseImpl,\n dependencies: [EventPublisher, GetRedirectByIdUseCase, MoveRedirectRepository]\n});\n"],"mappings":"AAAA,SAASA,MAAM,EAAEC,oBAAoB,QAAQ,qBAAqB;AAClE,SACIC,cAAc,QAEX,0CAA0C;AACjD,SACIC,mBAAmB,IAAIC,kBAAkB,EACzCC,sBAAsB;AAE1B,SAASC,uBAAuB,EAAEC,sBAAsB;AACxD,SAASC,sBAAsB;AAE/B,MAAMC,uBAAuB,CAAyC;EAClEC,WAAWA,CACCC,cAAmD,EACnDC,eAAiD,EACjDC,UAA4C,EACtD;IAAA,KAHUF,cAAmD,GAAnDA,cAAmD;IAAA,KACnDC,eAAiD,GAAjDA,eAAiD;IAAA,KACjDC,UAA4C,GAA5CA,UAA4C;EACrD;EAEH,MAAMC,OAAOA,CAACC,MAAiC,EAA6B;IACxE;IACA,MAAMC,SAAS,GAAG,MAAM,IAAI,CAACJ,eAAe,CAACE,OAAO,CAACC,MAAM,CAACE,EAAE,CAAC;IAE/D,IAAID,SAAS,CAACE,MAAM,CAAC,CAAC,EAAE;MACpB,OAAOF,SAAS;IACpB;IAEA,MAAMG,QAAQ,GAAGH,SAAS,CAACI,KAAK;;IAEhC;IACA,MAAMC,WAAW,GAAG,IAAIf,uBAAuB,CAAC;MAC5Ca,QAAQ;MACRG,KAAK,EAAEP;IACX,CAAC,CAAC;IAEF,MAAM,IAAI,CAACJ,cAAc,CAACY,OAAO,CAACF,WAAW,CAAC;;IAE9C;IACA,MAAMG,MAAM,GAAG,MAAM,IAAI,CAACX,UAAU,CAACC,OAAO,CAACC,MAAM,CAAC;IAEpD,IAAIS,MAAM,CAACN,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOM,MAAM;IACjB;;IAEA;IACA,MAAMC,UAAU,GAAG,IAAIlB,sBAAsB,CAAC;MAC1CY,QAAQ;MACRG,KAAK,EAAEP,MAAM;MACbW,QAAQ,EAAEF,MAAM,CAACJ;IACrB,CAAC,CAAC;IAEF,MAAM,IAAI,CAACT,cAAc,CAACY,OAAO,CAACE,UAAU,CAAC;IAE7C,OAAOzB,MAAM,CAAC2B,EAAE,CAACH,MAAM,CAACJ,KAAK,CAAC;EAClC;AACJ;AAEA,OAAO,MAAMjB,mBAAmB,GAAGF,oBAAoB,CAAC;EACpD2B,WAAW,EAAExB,kBAAkB;EAC/ByB,cAAc,EAAEpB,uBAAuB;EACvCqB,YAAY,EAAE,CAAC5B,cAAc,EAAEM,sBAAsB,EAAEH,sBAAsB;AACjF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Result","createImplementation","EventPublisher","MoveRedirectUseCase","UseCaseAbstraction","MoveRedirectRepository","RedirectBeforeMoveEvent","RedirectAfterMoveEvent","GetRedirectByIdUseCase","WbPermissions","RedirectNotAuthorizedError","MoveRedirectUseCaseImpl","constructor","permissions","eventPublisher","getRedirectById","repository","execute","params","hasPermission","canEdit","fail","getResult","id","isFail","original","value","beforeEvent","input","publish","result","afterEvent","redirect","ok","abstraction","implementation","dependencies","Abstraction"],"sources":["MoveRedirectUseCase.ts"],"sourcesContent":["import { Result, createImplementation } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport {\n MoveRedirectUseCase as UseCaseAbstraction,\n MoveRedirectRepository\n} from \"./abstractions.js\";\nimport { RedirectBeforeMoveEvent, RedirectAfterMoveEvent } from \"./events.js\";\nimport { GetRedirectByIdUseCase } from \"~/features/redirects/GetRedirectById/index.js\";\nimport { WbPermissions } from \"~/domain/permissions.js\";\nimport { RedirectNotAuthorizedError } from \"~/domain/redirect/errors.js\";\n\nclass MoveRedirectUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private permissions: WbPermissions.Interface,\n private eventPublisher: EventPublisherAbstraction.Interface,\n private getRedirectById: GetRedirectByIdUseCase.Interface,\n private repository: MoveRedirectRepository.Interface\n ) {}\n\n async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n const hasPermission = await this.permissions.canEdit(\"redirect\");\n if (!hasPermission) {\n return Result.fail(new RedirectNotAuthorizedError());\n }\n\n // Get the original redirect for events\n const getResult = await this.getRedirectById.execute(params.id);\n\n if (getResult.isFail()) {\n return getResult;\n }\n\n const original = getResult.value;\n\n const canEdit = await this.permissions.canEdit(\"redirect\", original);\n if (!canEdit) {\n return Result.fail(new RedirectNotAuthorizedError());\n }\n\n // Publish before move event\n const beforeEvent = new RedirectBeforeMoveEvent({\n original,\n input: params\n });\n\n await this.eventPublisher.publish(beforeEvent);\n\n // Execute the move operation\n const result = await this.repository.execute(params);\n\n if (result.isFail()) {\n return result;\n }\n\n // Publish after move event\n const afterEvent = new RedirectAfterMoveEvent({\n original,\n input: params,\n redirect: result.value\n });\n\n await this.eventPublisher.publish(afterEvent);\n\n return Result.ok(result.value);\n }\n}\n\nexport const MoveRedirectUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: MoveRedirectUseCaseImpl,\n dependencies: [\n WbPermissions.Abstraction,\n EventPublisher,\n GetRedirectByIdUseCase,\n MoveRedirectRepository\n ]\n});\n"],"mappings":"AAAA,SAASA,MAAM,EAAEC,oBAAoB,QAAQ,qBAAqB;AAClE,SACIC,cAAc,QAEX,0CAA0C;AACjD,SACIC,mBAAmB,IAAIC,kBAAkB,EACzCC,sBAAsB;AAE1B,SAASC,uBAAuB,EAAEC,sBAAsB;AACxD,SAASC,sBAAsB;AAC/B,SAASC,aAAa;AACtB,SAASC,0BAA0B;AAEnC,MAAMC,uBAAuB,CAAyC;EAClEC,WAAWA,CACCC,WAAoC,EACpCC,cAAmD,EACnDC,eAAiD,EACjDC,UAA4C,EACtD;IAAA,KAJUH,WAAoC,GAApCA,WAAoC;IAAA,KACpCC,cAAmD,GAAnDA,cAAmD;IAAA,KACnDC,eAAiD,GAAjDA,eAAiD;IAAA,KACjDC,UAA4C,GAA5CA,UAA4C;EACrD;EAEH,MAAMC,OAAOA,CAACC,MAAiC,EAA6B;IACxE,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACN,WAAW,CAACO,OAAO,CAAC,UAAU,CAAC;IAChE,IAAI,CAACD,aAAa,EAAE;MAChB,OAAOnB,MAAM,CAACqB,IAAI,CAAC,IAAIX,0BAA0B,CAAC,CAAC,CAAC;IACxD;;IAEA;IACA,MAAMY,SAAS,GAAG,MAAM,IAAI,CAACP,eAAe,CAACE,OAAO,CAACC,MAAM,CAACK,EAAE,CAAC;IAE/D,IAAID,SAAS,CAACE,MAAM,CAAC,CAAC,EAAE;MACpB,OAAOF,SAAS;IACpB;IAEA,MAAMG,QAAQ,GAAGH,SAAS,CAACI,KAAK;IAEhC,MAAMN,OAAO,GAAG,MAAM,IAAI,CAACP,WAAW,CAACO,OAAO,CAAC,UAAU,EAAEK,QAAQ,CAAC;IACpE,IAAI,CAACL,OAAO,EAAE;MACV,OAAOpB,MAAM,CAACqB,IAAI,CAAC,IAAIX,0BAA0B,CAAC,CAAC,CAAC;IACxD;;IAEA;IACA,MAAMiB,WAAW,GAAG,IAAIrB,uBAAuB,CAAC;MAC5CmB,QAAQ;MACRG,KAAK,EAAEV;IACX,CAAC,CAAC;IAEF,MAAM,IAAI,CAACJ,cAAc,CAACe,OAAO,CAACF,WAAW,CAAC;;IAE9C;IACA,MAAMG,MAAM,GAAG,MAAM,IAAI,CAACd,UAAU,CAACC,OAAO,CAACC,MAAM,CAAC;IAEpD,IAAIY,MAAM,CAACN,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOM,MAAM;IACjB;;IAEA;IACA,MAAMC,UAAU,GAAG,IAAIxB,sBAAsB,CAAC;MAC1CkB,QAAQ;MACRG,KAAK,EAAEV,MAAM;MACbc,QAAQ,EAAEF,MAAM,CAACJ;IACrB,CAAC,CAAC;IAEF,MAAM,IAAI,CAACZ,cAAc,CAACe,OAAO,CAACE,UAAU,CAAC;IAE7C,OAAO/B,MAAM,CAACiC,EAAE,CAACH,MAAM,CAACJ,KAAK,CAAC;EAClC;AACJ;AAEA,OAAO,MAAMvB,mBAAmB,GAAGF,oBAAoB,CAAC;EACpDiC,WAAW,EAAE9B,kBAAkB;EAC/B+B,cAAc,EAAExB,uBAAuB;EACvCyB,YAAY,EAAE,CACV3B,aAAa,CAAC4B,WAAW,EACzBnC,cAAc,EACdM,sBAAsB,EACtBH,sBAAsB;AAE9B,CAAC,CAAC","ignoreList":[]}
@@ -2,7 +2,7 @@ import { type Result } from "@webiny/feature/api";
2
2
  import type { IEventHandler } from "@webiny/api-core/features/EventPublisher";
3
3
  import type { DomainEvent } from "@webiny/api-core/features/EventPublisher";
4
4
  import type { WbRedirect } from "../../../domain/redirect/abstractions.js";
5
- import { RedirectNotFoundError, RedirectPersistenceError } from "../../../domain/redirect/errors.js";
5
+ import { RedirectNotFoundError, RedirectPersistenceError, RedirectNotAuthorizedError } from "../../../domain/redirect/errors.js";
6
6
  export interface IMoveWbRedirectParams {
7
7
  id: string;
8
8
  folderId: string;
@@ -27,6 +27,7 @@ export interface IMoveRedirectUseCase {
27
27
  execute(params: IMoveWbRedirectParams): Promise<Result<WbRedirect, UseCaseError>>;
28
28
  }
29
29
  export interface IMoveRedirectUseCaseErrors {
30
+ notAuthorized: RedirectNotAuthorizedError;
30
31
  notFound: RedirectNotFoundError;
31
32
  persistence: RedirectPersistenceError;
32
33
  }
@@ -48,14 +49,14 @@ export interface RedirectAfterMovePayload {
48
49
  input: IMoveWbRedirectParams;
49
50
  redirect: WbRedirect;
50
51
  }
51
- export declare const RedirectBeforeMoveHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<RedirectBeforeMovePayload>>>;
52
- export declare namespace RedirectBeforeMoveHandler {
52
+ export declare const RedirectBeforeMoveEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<RedirectBeforeMovePayload>>>;
53
+ export declare namespace RedirectBeforeMoveEventHandler {
53
54
  type Interface = IEventHandler<DomainEvent<RedirectBeforeMovePayload>>;
54
55
  type Event = DomainEvent<RedirectBeforeMovePayload>;
55
56
  type Redirect = WbRedirect;
56
57
  }
57
- export declare const RedirectAfterMoveHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<RedirectAfterMovePayload>>>;
58
- export declare namespace RedirectAfterMoveHandler {
58
+ export declare const RedirectAfterMoveEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<RedirectAfterMovePayload>>>;
59
+ export declare namespace RedirectAfterMoveEventHandler {
59
60
  type Interface = IEventHandler<DomainEvent<RedirectAfterMovePayload>>;
60
61
  type Event = DomainEvent<RedirectAfterMovePayload>;
61
62
  type Redirect = WbRedirect;
@@ -24,7 +24,7 @@ export const MoveRedirectUseCase = createAbstraction("Wb/MoveRedirectUseCase");
24
24
  // Event Handler Abstractions
25
25
  // ============================================================================
26
26
 
27
- export const RedirectBeforeMoveHandler = createAbstraction("Wb/RedirectBeforeMoveHandler");
28
- export const RedirectAfterMoveHandler = createAbstraction("Wb/RedirectAfterMoveHandler");
27
+ export const RedirectBeforeMoveEventHandler = createAbstraction("Wb/RedirectBeforeMoveEventHandler");
28
+ export const RedirectAfterMoveEventHandler = createAbstraction("Wb/RedirectAfterMoveEventHandler");
29
29
 
30
30
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","MoveRedirectRepository","MoveRedirectUseCase","RedirectBeforeMoveHandler","RedirectAfterMoveHandler"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, type Result } from \"@webiny/feature/api\";\nimport type { IEventHandler } from \"@webiny/api-core/features/EventPublisher\";\nimport type { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport type { WbRedirect } from \"~/domain/redirect/abstractions.js\";\nimport { RedirectNotFoundError, RedirectPersistenceError } from \"~/domain/redirect/errors.js\";\n\n// ============================================================================\n// Type Definitions\n// ============================================================================\n\nexport interface IMoveWbRedirectParams {\n id: string;\n folderId: string;\n}\n\n// ============================================================================\n// Repository Abstraction\n// ============================================================================\n\nexport interface IMoveRedirectRepository {\n execute(params: IMoveWbRedirectParams): Promise<Result<WbRedirect, RepositoryError>>;\n}\n\nexport interface IMoveRedirectRepositoryErrors {\n notFound: RedirectNotFoundError;\n persistence: RedirectPersistenceError;\n}\n\ntype RepositoryError = IMoveRedirectRepositoryErrors[keyof IMoveRedirectRepositoryErrors];\n\nexport const MoveRedirectRepository = createAbstraction<IMoveRedirectRepository>(\n \"Wb/MoveRedirectRepository\"\n);\n\nexport namespace MoveRedirectRepository {\n export type Interface = IMoveRedirectRepository;\n export type Params = IMoveWbRedirectParams;\n export type Return = Promise<Result<WbRedirect, RepositoryError>>;\n export type Error = RepositoryError;\n export type Redirect = WbRedirect;\n}\n\n// ============================================================================\n// Use Case Abstraction\n// ============================================================================\n\nexport interface IMoveRedirectUseCase {\n execute(params: IMoveWbRedirectParams): Promise<Result<WbRedirect, UseCaseError>>;\n}\n\nexport interface IMoveRedirectUseCaseErrors {\n notFound: RedirectNotFoundError;\n persistence: RedirectPersistenceError;\n}\n\ntype UseCaseError = IMoveRedirectUseCaseErrors[keyof IMoveRedirectUseCaseErrors];\n\nexport const MoveRedirectUseCase =\n createAbstraction<IMoveRedirectUseCase>(\"Wb/MoveRedirectUseCase\");\n\nexport namespace MoveRedirectUseCase {\n export type Interface = IMoveRedirectUseCase;\n export type Params = IMoveWbRedirectParams;\n export type Return = Promise<Result<WbRedirect, UseCaseError>>;\n export type Error = UseCaseError;\n export type Redirect = WbRedirect;\n}\n\n// ============================================================================\n// Event Payload Types\n// ============================================================================\n\nexport interface RedirectBeforeMovePayload {\n original: WbRedirect;\n input: IMoveWbRedirectParams;\n}\n\nexport interface RedirectAfterMovePayload {\n original: WbRedirect;\n input: IMoveWbRedirectParams;\n redirect: WbRedirect;\n}\n\n// ============================================================================\n// Event Handler Abstractions\n// ============================================================================\n\nexport const RedirectBeforeMoveHandler = createAbstraction<\n IEventHandler<DomainEvent<RedirectBeforeMovePayload>>\n>(\"Wb/RedirectBeforeMoveHandler\");\n\nexport namespace RedirectBeforeMoveHandler {\n export type Interface = IEventHandler<DomainEvent<RedirectBeforeMovePayload>>;\n export type Event = DomainEvent<RedirectBeforeMovePayload>;\n export type Redirect = WbRedirect;\n}\n\nexport const RedirectAfterMoveHandler = createAbstraction<\n IEventHandler<DomainEvent<RedirectAfterMovePayload>>\n>(\"Wb/RedirectAfterMoveHandler\");\n\nexport namespace RedirectAfterMoveHandler {\n export type Interface = IEventHandler<DomainEvent<RedirectAfterMovePayload>>;\n export type Event = DomainEvent<RedirectAfterMovePayload>;\n export type Redirect = WbRedirect;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAqB,qBAAqB;;AAMpE;AACA;AACA;;AAOA;AACA;AACA;;AAaA,OAAO,MAAMC,sBAAsB,GAAGD,iBAAiB,CACnD,2BACJ,CAAC;;AAUD;AACA;AACA;;AAaA,OAAO,MAAME,mBAAmB,GAC5BF,iBAAiB,CAAuB,wBAAwB,CAAC;;AAUrE;AACA;AACA;;AAaA;AACA;AACA;;AAEA,OAAO,MAAMG,yBAAyB,GAAGH,iBAAiB,CAExD,8BAA8B,CAAC;AAQjC,OAAO,MAAMI,wBAAwB,GAAGJ,iBAAiB,CAEvD,6BAA6B,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","MoveRedirectRepository","MoveRedirectUseCase","RedirectBeforeMoveEventHandler","RedirectAfterMoveEventHandler"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, type Result } from \"@webiny/feature/api\";\nimport type { IEventHandler } from \"@webiny/api-core/features/EventPublisher\";\nimport type { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport type { WbRedirect } from \"~/domain/redirect/abstractions.js\";\nimport {\n RedirectNotFoundError,\n RedirectPersistenceError,\n RedirectNotAuthorizedError\n} from \"~/domain/redirect/errors.js\";\n\n// ============================================================================\n// Type Definitions\n// ============================================================================\n\nexport interface IMoveWbRedirectParams {\n id: string;\n folderId: string;\n}\n\n// ============================================================================\n// Repository Abstraction\n// ============================================================================\n\nexport interface IMoveRedirectRepository {\n execute(params: IMoveWbRedirectParams): Promise<Result<WbRedirect, RepositoryError>>;\n}\n\nexport interface IMoveRedirectRepositoryErrors {\n notFound: RedirectNotFoundError;\n persistence: RedirectPersistenceError;\n}\n\ntype RepositoryError = IMoveRedirectRepositoryErrors[keyof IMoveRedirectRepositoryErrors];\n\nexport const MoveRedirectRepository = createAbstraction<IMoveRedirectRepository>(\n \"Wb/MoveRedirectRepository\"\n);\n\nexport namespace MoveRedirectRepository {\n export type Interface = IMoveRedirectRepository;\n export type Params = IMoveWbRedirectParams;\n export type Return = Promise<Result<WbRedirect, RepositoryError>>;\n export type Error = RepositoryError;\n export type Redirect = WbRedirect;\n}\n\n// ============================================================================\n// Use Case Abstraction\n// ============================================================================\n\nexport interface IMoveRedirectUseCase {\n execute(params: IMoveWbRedirectParams): Promise<Result<WbRedirect, UseCaseError>>;\n}\n\nexport interface IMoveRedirectUseCaseErrors {\n notAuthorized: RedirectNotAuthorizedError;\n notFound: RedirectNotFoundError;\n persistence: RedirectPersistenceError;\n}\n\ntype UseCaseError = IMoveRedirectUseCaseErrors[keyof IMoveRedirectUseCaseErrors];\n\nexport const MoveRedirectUseCase =\n createAbstraction<IMoveRedirectUseCase>(\"Wb/MoveRedirectUseCase\");\n\nexport namespace MoveRedirectUseCase {\n export type Interface = IMoveRedirectUseCase;\n export type Params = IMoveWbRedirectParams;\n export type Return = Promise<Result<WbRedirect, UseCaseError>>;\n export type Error = UseCaseError;\n export type Redirect = WbRedirect;\n}\n\n// ============================================================================\n// Event Payload Types\n// ============================================================================\n\nexport interface RedirectBeforeMovePayload {\n original: WbRedirect;\n input: IMoveWbRedirectParams;\n}\n\nexport interface RedirectAfterMovePayload {\n original: WbRedirect;\n input: IMoveWbRedirectParams;\n redirect: WbRedirect;\n}\n\n// ============================================================================\n// Event Handler Abstractions\n// ============================================================================\n\nexport const RedirectBeforeMoveEventHandler = createAbstraction<\n IEventHandler<DomainEvent<RedirectBeforeMovePayload>>\n>(\"Wb/RedirectBeforeMoveEventHandler\");\n\nexport namespace RedirectBeforeMoveEventHandler {\n export type Interface = IEventHandler<DomainEvent<RedirectBeforeMovePayload>>;\n export type Event = DomainEvent<RedirectBeforeMovePayload>;\n export type Redirect = WbRedirect;\n}\n\nexport const RedirectAfterMoveEventHandler = createAbstraction<\n IEventHandler<DomainEvent<RedirectAfterMovePayload>>\n>(\"Wb/RedirectAfterMoveEventHandler\");\n\nexport namespace RedirectAfterMoveEventHandler {\n export type Interface = IEventHandler<DomainEvent<RedirectAfterMovePayload>>;\n export type Event = DomainEvent<RedirectAfterMovePayload>;\n export type Redirect = WbRedirect;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAqB,qBAAqB;;AAUpE;AACA;AACA;;AAOA;AACA;AACA;;AAaA,OAAO,MAAMC,sBAAsB,GAAGD,iBAAiB,CACnD,2BACJ,CAAC;;AAUD;AACA;AACA;;AAcA,OAAO,MAAME,mBAAmB,GAC5BF,iBAAiB,CAAuB,wBAAwB,CAAC;;AAUrE;AACA;AACA;;AAaA;AACA;AACA;;AAEA,OAAO,MAAMG,8BAA8B,GAAGH,iBAAiB,CAE7D,mCAAmC,CAAC;AAQtC,OAAO,MAAMI,6BAA6B,GAAGJ,iBAAiB,CAE5D,kCAAkC,CAAC","ignoreList":[]}
@@ -1,10 +1,10 @@
1
1
  import { DomainEvent } from "@webiny/api-core/features/EventPublisher";
2
- import { RedirectBeforeMoveHandler, RedirectAfterMoveHandler } from "./abstractions.js";
2
+ import { RedirectBeforeMoveEventHandler, RedirectAfterMoveEventHandler } from "./abstractions.js";
3
3
  // RedirectBeforeMove Event
4
4
  export class RedirectBeforeMoveEvent extends DomainEvent {
5
5
  eventType = "redirect.beforeMove";
6
6
  getHandlerAbstraction() {
7
- return RedirectBeforeMoveHandler;
7
+ return RedirectBeforeMoveEventHandler;
8
8
  }
9
9
  }
10
10
 
@@ -12,7 +12,7 @@ export class RedirectBeforeMoveEvent extends DomainEvent {
12
12
  export class RedirectAfterMoveEvent extends DomainEvent {
13
13
  eventType = "redirect.afterMove";
14
14
  getHandlerAbstraction() {
15
- return RedirectAfterMoveHandler;
15
+ return RedirectAfterMoveEventHandler;
16
16
  }
17
17
  }
18
18
 
@@ -1 +1 @@
1
- {"version":3,"names":["DomainEvent","RedirectBeforeMoveHandler","RedirectAfterMoveHandler","RedirectBeforeMoveEvent","eventType","getHandlerAbstraction","RedirectAfterMoveEvent"],"sources":["events.ts"],"sourcesContent":["import { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport { RedirectBeforeMoveHandler, RedirectAfterMoveHandler } from \"./abstractions.js\";\nimport type { RedirectBeforeMovePayload, RedirectAfterMovePayload } from \"./abstractions.js\";\n\n// RedirectBeforeMove Event\nexport class RedirectBeforeMoveEvent extends DomainEvent<RedirectBeforeMovePayload> {\n eventType = \"redirect.beforeMove\" as const;\n\n getHandlerAbstraction() {\n return RedirectBeforeMoveHandler;\n }\n}\n\n// RedirectAfterMove Event\nexport class RedirectAfterMoveEvent extends DomainEvent<RedirectAfterMovePayload> {\n eventType = \"redirect.afterMove\" as const;\n\n getHandlerAbstraction() {\n return RedirectAfterMoveHandler;\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,0CAA0C;AACtE,SAASC,yBAAyB,EAAEC,wBAAwB;AAG5D;AACA,OAAO,MAAMC,uBAAuB,SAASH,WAAW,CAA4B;EAChFI,SAAS,GAAG,qBAAqB;EAEjCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOJ,yBAAyB;EACpC;AACJ;;AAEA;AACA,OAAO,MAAMK,sBAAsB,SAASN,WAAW,CAA2B;EAC9EI,SAAS,GAAG,oBAAoB;EAEhCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOH,wBAAwB;EACnC;AACJ","ignoreList":[]}
1
+ {"version":3,"names":["DomainEvent","RedirectBeforeMoveEventHandler","RedirectAfterMoveEventHandler","RedirectBeforeMoveEvent","eventType","getHandlerAbstraction","RedirectAfterMoveEvent"],"sources":["events.ts"],"sourcesContent":["import { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport { RedirectBeforeMoveEventHandler, RedirectAfterMoveEventHandler } from \"./abstractions.js\";\nimport type { RedirectBeforeMovePayload, RedirectAfterMovePayload } from \"./abstractions.js\";\n\n// RedirectBeforeMove Event\nexport class RedirectBeforeMoveEvent extends DomainEvent<RedirectBeforeMovePayload> {\n eventType = \"redirect.beforeMove\" as const;\n\n getHandlerAbstraction() {\n return RedirectBeforeMoveEventHandler;\n }\n}\n\n// RedirectAfterMove Event\nexport class RedirectAfterMoveEvent extends DomainEvent<RedirectAfterMovePayload> {\n eventType = \"redirect.afterMove\" as const;\n\n getHandlerAbstraction() {\n return RedirectAfterMoveEventHandler;\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,0CAA0C;AACtE,SAASC,8BAA8B,EAAEC,6BAA6B;AAGtE;AACA,OAAO,MAAMC,uBAAuB,SAASH,WAAW,CAA4B;EAChFI,SAAS,GAAG,qBAAqB;EAEjCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOJ,8BAA8B;EACzC;AACJ;;AAEA;AACA,OAAO,MAAMK,sBAAsB,SAASN,WAAW,CAA2B;EAC9EI,SAAS,GAAG,oBAAoB;EAEhCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOH,6BAA6B;EACxC;AACJ","ignoreList":[]}
@@ -1 +1 @@
1
- export { RedirectAfterMoveHandler, RedirectBeforeMoveHandler, MoveRedirectUseCase } from "./abstractions.js";
1
+ export { RedirectAfterMoveEventHandler, RedirectBeforeMoveEventHandler, MoveRedirectUseCase } from "./abstractions.js";
@@ -1,3 +1,3 @@
1
- export { RedirectAfterMoveHandler, RedirectBeforeMoveHandler, MoveRedirectUseCase } from "./abstractions.js";
1
+ export { RedirectAfterMoveEventHandler, RedirectBeforeMoveEventHandler, MoveRedirectUseCase } from "./abstractions.js";
2
2
 
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["RedirectAfterMoveHandler","RedirectBeforeMoveHandler","MoveRedirectUseCase"],"sources":["index.ts"],"sourcesContent":["export {\n RedirectAfterMoveHandler,\n RedirectBeforeMoveHandler,\n MoveRedirectUseCase\n} from \"./abstractions.js\";\n"],"mappings":"AAAA,SACIA,wBAAwB,EACxBC,yBAAyB,EACzBC,mBAAmB","ignoreList":[]}
1
+ {"version":3,"names":["RedirectAfterMoveEventHandler","RedirectBeforeMoveEventHandler","MoveRedirectUseCase"],"sources":["index.ts"],"sourcesContent":["export {\n RedirectAfterMoveEventHandler,\n RedirectBeforeMoveEventHandler,\n MoveRedirectUseCase\n} from \"./abstractions.js\";\n"],"mappings":"AAAA,SACIA,6BAA6B,EAC7BC,8BAA8B,EAC9BC,mBAAmB","ignoreList":[]}