@webiny/tenant-manager 6.1.0 → 6.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/admin/CurrentTenant/CurrentTenantGateway.d.ts +2 -2
- package/admin/CurrentTenant/CurrentTenantGateway.js +2 -2
- package/admin/CurrentTenant/CurrentTenantGateway.js.map +1 -1
- package/admin/DisableTenant/DisableTenantGateway.d.ts +2 -2
- package/admin/DisableTenant/DisableTenantGateway.js +2 -2
- package/admin/DisableTenant/DisableTenantGateway.js.map +1 -1
- package/admin/EnableTenant/EnableTenantGateway.d.ts +2 -2
- package/admin/EnableTenant/EnableTenantGateway.js +2 -2
- package/admin/EnableTenant/EnableTenantGateway.js.map +1 -1
- package/admin/Extension.js +3 -0
- package/admin/Extension.js.map +1 -1
- package/admin/SecurityPermission.js +2 -4
- package/admin/SecurityPermission.js.map +1 -1
- package/admin/domain/permissionsSchema.d.ts +4 -0
- package/admin/domain/permissionsSchema.js +7 -0
- package/admin/domain/permissionsSchema.js.map +1 -0
- package/admin/features/permissions/abstractions.d.ts +17 -0
- package/admin/features/permissions/abstractions.js +5 -0
- package/admin/features/permissions/abstractions.js.map +1 -0
- package/admin/features/permissions/feature.d.ts +14 -0
- package/admin/features/permissions/feature.js +6 -0
- package/admin/features/permissions/feature.js.map +1 -0
- package/api/domain/TenantModel.js +1 -1
- package/api/domain/TenantModel.js.map +1 -1
- package/api/features/AddCmsPermissions/AddCmsPermissions.js +9 -4
- package/api/features/AddCmsPermissions/AddCmsPermissions.js.map +1 -1
- package/api/features/DeleteTenantOnEntryDelete/DeleteTenantOnEntryDeleteHandler.d.ts +1 -1
- package/api/features/DisableTenant/DisableTenantUseCase.d.ts +1 -1
- package/api/features/DisableTenant/DisableTenantUseCase.js +1 -1
- package/api/features/DisableTenant/DisableTenantUseCase.js.map +1 -1
- package/api/features/DisableTenant/events.d.ts +2 -2
- package/api/features/DisableTenant/events.js +1 -1
- package/api/features/DisableTenant/events.js.map +1 -1
- package/api/features/EnableTenant/EnableTenantUseCase.d.ts +1 -1
- package/api/features/EnableTenant/EnableTenantUseCase.js +1 -1
- package/api/features/EnableTenant/EnableTenantUseCase.js.map +1 -1
- package/api/features/EnableTenant/events.d.ts +2 -2
- package/api/features/EnableTenant/events.js +1 -1
- package/api/features/EnableTenant/events.js.map +1 -1
- package/api/graphql/CreateTenantSchema.d.ts +5 -3
- package/api/graphql/CreateTenantSchema.js +13 -11
- package/api/graphql/CreateTenantSchema.js.map +1 -1
- package/package.json +17 -17
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/index.js";
|
|
2
2
|
import { CurrentTenantGateway as GatewayAbstraction } from "./abstractions.js";
|
|
3
3
|
import { Tenant } from "../../shared/Tenant.js";
|
|
4
4
|
declare class CurrentTenantGraphQLGateway implements GatewayAbstraction.Interface {
|
|
5
5
|
private client;
|
|
6
|
-
constructor(client:
|
|
6
|
+
constructor(client: MainGraphQLClient.Interface);
|
|
7
7
|
getTenant(): Promise<Tenant>;
|
|
8
8
|
}
|
|
9
9
|
export declare const CurrentTenantGateway: typeof CurrentTenantGraphQLGateway & {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/index.js";
|
|
2
2
|
import { CurrentTenantGateway as GatewayAbstraction } from "./abstractions.js";
|
|
3
3
|
import { Tenant } from "../../shared/Tenant.js";
|
|
4
4
|
const GET_CURRENT_TENANT = /* GraphQL */`
|
|
@@ -38,7 +38,7 @@ class CurrentTenantGraphQLGateway {
|
|
|
38
38
|
}
|
|
39
39
|
export const CurrentTenantGateway = GatewayAbstraction.createImplementation({
|
|
40
40
|
implementation: CurrentTenantGraphQLGateway,
|
|
41
|
-
dependencies: [
|
|
41
|
+
dependencies: [MainGraphQLClient]
|
|
42
42
|
});
|
|
43
43
|
|
|
44
44
|
//# sourceMappingURL=CurrentTenantGateway.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["MainGraphQLClient","CurrentTenantGateway","GatewayAbstraction","Tenant","GET_CURRENT_TENANT","CurrentTenantGraphQLGateway","constructor","client","getTenant","response","execute","query","envelope","tenantManager","getCurrentTenant","error","Error","message","data","from","createImplementation","implementation","dependencies"],"sources":["CurrentTenantGateway.ts"],"sourcesContent":["import { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/index.js\";\nimport { CurrentTenantGateway as GatewayAbstraction } from \"./abstractions.js\";\nimport { Tenant, type TenantDto } from \"../../shared/Tenant.js\";\n\nconst GET_CURRENT_TENANT = /* GraphQL */ `\n query GetCurrentTenant {\n tenantManager {\n getCurrentTenant {\n data {\n id\n values\n }\n error {\n code\n message\n data\n }\n }\n }\n }\n`;\n\ntype GetCurrentTenantResponse = {\n tenantManager: {\n getCurrentTenant:\n | {\n data: TenantDto;\n error: null;\n }\n | {\n data: null;\n error: {\n code: string;\n message: string;\n data: Record<string, any>;\n };\n };\n };\n};\n\nclass CurrentTenantGraphQLGateway implements GatewayAbstraction.Interface {\n constructor(private client: MainGraphQLClient.Interface) {}\n\n async getTenant(): Promise<Tenant> {\n const response = await this.client.execute<GetCurrentTenantResponse>({\n query: GET_CURRENT_TENANT\n });\n\n const envelope = response.tenantManager.getCurrentTenant;\n if (envelope.error) {\n throw new Error(envelope.error.message);\n }\n\n if (!envelope.data) {\n throw new Error(\"Unable to load tenant\");\n }\n\n return Tenant.from(envelope.data);\n }\n}\n\nexport const CurrentTenantGateway = GatewayAbstraction.createImplementation({\n implementation: CurrentTenantGraphQLGateway,\n dependencies: [MainGraphQLClient]\n});\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,iDAAiD;AACnF,SAASC,oBAAoB,IAAIC,kBAAkB;AACnD,SAASC,MAAM;AAEf,MAAMC,kBAAkB,GAAG,aAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAoBD,MAAMC,2BAA2B,CAAyC;EACtEC,WAAWA,CAASC,MAAmC,EAAE;IAAA,KAArCA,MAAmC,GAAnCA,MAAmC;EAAG;EAE1D,MAAMC,SAASA,CAAA,EAAoB;IAC/B,MAAMC,QAAQ,GAAG,MAAM,IAAI,CAACF,MAAM,CAACG,OAAO,CAA2B;MACjEC,KAAK,EAAEP;IACX,CAAC,CAAC;IAEF,MAAMQ,QAAQ,GAAGH,QAAQ,CAACI,aAAa,CAACC,gBAAgB;IACxD,IAAIF,QAAQ,CAACG,KAAK,EAAE;MAChB,MAAM,IAAIC,KAAK,CAACJ,QAAQ,CAACG,KAAK,CAACE,OAAO,CAAC;IAC3C;IAEA,IAAI,CAACL,QAAQ,CAACM,IAAI,EAAE;MAChB,MAAM,IAAIF,KAAK,CAAC,uBAAuB,CAAC;IAC5C;IAEA,OAAOb,MAAM,CAACgB,IAAI,CAACP,QAAQ,CAACM,IAAI,CAAC;EACrC;AACJ;AAEA,OAAO,MAAMjB,oBAAoB,GAAGC,kBAAkB,CAACkB,oBAAoB,CAAC;EACxEC,cAAc,EAAEhB,2BAA2B;EAC3CiB,YAAY,EAAE,CAACtB,iBAAiB;AACpC,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/index.js";
|
|
2
2
|
import { DisableTenantGateway as GatewayAbstraction } from "./abstractions.js";
|
|
3
3
|
declare class DisableTenantGraphQLGateway implements GatewayAbstraction.Interface {
|
|
4
4
|
private client;
|
|
5
|
-
constructor(client:
|
|
5
|
+
constructor(client: MainGraphQLClient.Interface);
|
|
6
6
|
disableTenant(tenantId: string): Promise<boolean>;
|
|
7
7
|
}
|
|
8
8
|
export declare const DisableTenantGateway: typeof DisableTenantGraphQLGateway & {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/index.js";
|
|
2
2
|
import { DisableTenantGateway as GatewayAbstraction } from "./abstractions.js";
|
|
3
3
|
const DISABLE_TENANT = /* GraphQL */`
|
|
4
4
|
mutation DisableTenant($tenantId: ID!) {
|
|
@@ -37,7 +37,7 @@ class DisableTenantGraphQLGateway {
|
|
|
37
37
|
}
|
|
38
38
|
export const DisableTenantGateway = GatewayAbstraction.createImplementation({
|
|
39
39
|
implementation: DisableTenantGraphQLGateway,
|
|
40
|
-
dependencies: [
|
|
40
|
+
dependencies: [MainGraphQLClient]
|
|
41
41
|
});
|
|
42
42
|
|
|
43
43
|
//# sourceMappingURL=DisableTenantGateway.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["MainGraphQLClient","DisableTenantGateway","GatewayAbstraction","DISABLE_TENANT","DisableTenantGraphQLGateway","constructor","client","disableTenant","tenantId","response","execute","query","variables","envelope","tenantManager","error","Error","message","data","createImplementation","implementation","dependencies"],"sources":["DisableTenantGateway.ts"],"sourcesContent":["import { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/index.js\";\nimport { DisableTenantGateway as GatewayAbstraction } from \"./abstractions.js\";\n\nconst DISABLE_TENANT = /* GraphQL */ `\n mutation DisableTenant($tenantId: ID!) {\n tenantManager {\n disableTenant(tenantId: $tenantId) {\n data\n error {\n code\n message\n data\n }\n }\n }\n }\n`;\n\ntype DisableTenantResponse = {\n tenantManager: {\n disableTenant:\n | {\n data: boolean;\n error: null;\n }\n | {\n data: null;\n error: {\n code: string;\n message: string;\n data: Record<string, any>;\n };\n };\n };\n};\n\nclass DisableTenantGraphQLGateway implements GatewayAbstraction.Interface {\n constructor(private client: MainGraphQLClient.Interface) {}\n\n async disableTenant(tenantId: string): Promise<boolean> {\n const response = await this.client.execute<DisableTenantResponse>({\n query: DISABLE_TENANT,\n variables: { tenantId }\n });\n\n const envelope = response.tenantManager.disableTenant;\n if (envelope.error) {\n throw new Error(envelope.error.message);\n }\n\n if (!envelope.data) {\n throw new Error(\"Unable to disable tenant\");\n }\n\n return envelope.data;\n }\n}\n\nexport const DisableTenantGateway = GatewayAbstraction.createImplementation({\n implementation: DisableTenantGraphQLGateway,\n dependencies: [MainGraphQLClient]\n});\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,iDAAiD;AACnF,SAASC,oBAAoB,IAAIC,kBAAkB;AAEnD,MAAMC,cAAc,GAAG,aAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAoBD,MAAMC,2BAA2B,CAAyC;EACtEC,WAAWA,CAASC,MAAmC,EAAE;IAAA,KAArCA,MAAmC,GAAnCA,MAAmC;EAAG;EAE1D,MAAMC,aAAaA,CAACC,QAAgB,EAAoB;IACpD,MAAMC,QAAQ,GAAG,MAAM,IAAI,CAACH,MAAM,CAACI,OAAO,CAAwB;MAC9DC,KAAK,EAAER,cAAc;MACrBS,SAAS,EAAE;QAAEJ;MAAS;IAC1B,CAAC,CAAC;IAEF,MAAMK,QAAQ,GAAGJ,QAAQ,CAACK,aAAa,CAACP,aAAa;IACrD,IAAIM,QAAQ,CAACE,KAAK,EAAE;MAChB,MAAM,IAAIC,KAAK,CAACH,QAAQ,CAACE,KAAK,CAACE,OAAO,CAAC;IAC3C;IAEA,IAAI,CAACJ,QAAQ,CAACK,IAAI,EAAE;MAChB,MAAM,IAAIF,KAAK,CAAC,0BAA0B,CAAC;IAC/C;IAEA,OAAOH,QAAQ,CAACK,IAAI;EACxB;AACJ;AAEA,OAAO,MAAMjB,oBAAoB,GAAGC,kBAAkB,CAACiB,oBAAoB,CAAC;EACxEC,cAAc,EAAEhB,2BAA2B;EAC3CiB,YAAY,EAAE,CAACrB,iBAAiB;AACpC,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/index.js";
|
|
2
2
|
import { EnableTenantGateway as GatewayAbstraction } from "./abstractions.js";
|
|
3
3
|
declare class EnableTenantGraphQLGateway implements GatewayAbstraction.Interface {
|
|
4
4
|
private client;
|
|
5
|
-
constructor(client:
|
|
5
|
+
constructor(client: MainGraphQLClient.Interface);
|
|
6
6
|
enableTenant(tenantId: string): Promise<boolean>;
|
|
7
7
|
}
|
|
8
8
|
export declare const EnableTenantGateway: typeof EnableTenantGraphQLGateway & {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/index.js";
|
|
2
2
|
import { EnableTenantGateway as GatewayAbstraction } from "./abstractions.js";
|
|
3
3
|
const ENABLE_TENANT = /* GraphQL */`
|
|
4
4
|
mutation EnableTenant($tenantId: ID!) {
|
|
@@ -37,7 +37,7 @@ class EnableTenantGraphQLGateway {
|
|
|
37
37
|
}
|
|
38
38
|
export const EnableTenantGateway = GatewayAbstraction.createImplementation({
|
|
39
39
|
implementation: EnableTenantGraphQLGateway,
|
|
40
|
-
dependencies: [
|
|
40
|
+
dependencies: [MainGraphQLClient]
|
|
41
41
|
});
|
|
42
42
|
|
|
43
43
|
//# sourceMappingURL=EnableTenantGateway.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["MainGraphQLClient","EnableTenantGateway","GatewayAbstraction","ENABLE_TENANT","EnableTenantGraphQLGateway","constructor","client","enableTenant","tenantId","response","execute","query","variables","envelope","tenantManager","error","Error","message","data","createImplementation","implementation","dependencies"],"sources":["EnableTenantGateway.ts"],"sourcesContent":["import { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/index.js\";\nimport { EnableTenantGateway as GatewayAbstraction } from \"./abstractions.js\";\n\nconst ENABLE_TENANT = /* GraphQL */ `\n mutation EnableTenant($tenantId: ID!) {\n tenantManager {\n enableTenant(tenantId: $tenantId) {\n data\n error {\n code\n message\n data\n }\n }\n }\n }\n`;\n\ntype EnableTenantResponse = {\n tenantManager: {\n enableTenant:\n | {\n data: boolean;\n error: null;\n }\n | {\n data: null;\n error: {\n code: string;\n message: string;\n data: Record<string, any>;\n };\n };\n };\n};\n\nclass EnableTenantGraphQLGateway implements GatewayAbstraction.Interface {\n constructor(private client: MainGraphQLClient.Interface) {}\n\n async enableTenant(tenantId: string): Promise<boolean> {\n const response = await this.client.execute<EnableTenantResponse>({\n query: ENABLE_TENANT,\n variables: { tenantId }\n });\n\n const envelope = response.tenantManager.enableTenant;\n if (envelope.error) {\n throw new Error(envelope.error.message);\n }\n\n if (!envelope.data) {\n throw new Error(\"Unable to enable tenant\");\n }\n\n return envelope.data;\n }\n}\n\nexport const EnableTenantGateway = GatewayAbstraction.createImplementation({\n implementation: EnableTenantGraphQLGateway,\n dependencies: [MainGraphQLClient]\n});\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,iDAAiD;AACnF,SAASC,mBAAmB,IAAIC,kBAAkB;AAElD,MAAMC,aAAa,GAAG,aAAc;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAoBD,MAAMC,0BAA0B,CAAyC;EACrEC,WAAWA,CAASC,MAAmC,EAAE;IAAA,KAArCA,MAAmC,GAAnCA,MAAmC;EAAG;EAE1D,MAAMC,YAAYA,CAACC,QAAgB,EAAoB;IACnD,MAAMC,QAAQ,GAAG,MAAM,IAAI,CAACH,MAAM,CAACI,OAAO,CAAuB;MAC7DC,KAAK,EAAER,aAAa;MACpBS,SAAS,EAAE;QAAEJ;MAAS;IAC1B,CAAC,CAAC;IAEF,MAAMK,QAAQ,GAAGJ,QAAQ,CAACK,aAAa,CAACP,YAAY;IACpD,IAAIM,QAAQ,CAACE,KAAK,EAAE;MAChB,MAAM,IAAIC,KAAK,CAACH,QAAQ,CAACE,KAAK,CAACE,OAAO,CAAC;IAC3C;IAEA,IAAI,CAACJ,QAAQ,CAACK,IAAI,EAAE;MAChB,MAAM,IAAIF,KAAK,CAAC,yBAAyB,CAAC;IAC9C;IAEA,OAAOH,QAAQ,CAACK,IAAI;EACxB;AACJ;AAEA,OAAO,MAAMjB,mBAAmB,GAAGC,kBAAkB,CAACiB,oBAAoB,CAAC;EACvEC,cAAc,EAAEhB,0BAA0B;EAC1CiB,YAAY,EAAE,CAACrB,iBAAiB;AACpC,CAAC,CAAC","ignoreList":[]}
|
package/admin/Extension.js
CHANGED
|
@@ -12,6 +12,7 @@ import { TenantSelector } from "./TenantSelector.js";
|
|
|
12
12
|
import { IsRootTenant } from "./IsRootTenant.js";
|
|
13
13
|
import { TENANT_MODEL_ID } from "../shared/constants.js";
|
|
14
14
|
import { SecurityPermission } from "./SecurityPermission.js";
|
|
15
|
+
import { TmPermissionsFeature } from "./features/permissions/feature.js";
|
|
15
16
|
const {
|
|
16
17
|
Menu
|
|
17
18
|
} = AdminConfig;
|
|
@@ -28,6 +29,8 @@ export const Extension = () => {
|
|
|
28
29
|
});
|
|
29
30
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(RegisterFeature, {
|
|
30
31
|
feature: CurrentTenantFeature
|
|
32
|
+
}), /*#__PURE__*/React.createElement(RegisterFeature, {
|
|
33
|
+
feature: TmPermissionsFeature
|
|
31
34
|
}), /*#__PURE__*/React.createElement(CurrentTenantProvider, null), /*#__PURE__*/React.createElement(TenantSelector, null), /*#__PURE__*/React.createElement(TenantEntryList, null), /*#__PURE__*/React.createElement(SecurityPermission, null), /*#__PURE__*/React.createElement(AdminConfig, null, /*#__PURE__*/React.createElement(IsRootTenant, null, /*#__PURE__*/React.createElement(RegisterFeature, {
|
|
32
35
|
feature: DisableTenantFeature
|
|
33
36
|
}), /*#__PURE__*/React.createElement(RegisterFeature, {
|
package/admin/Extension.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","AdminConfig","HasPermission","RegisterFeature","useRouter","Routes","ReactComponent","TenantIcon","TenantEntryList","CurrentTenantProvider","CurrentTenantFeature","DisableTenantFeature","EnableTenantFeature","TenantSelector","IsRootTenant","TENANT_MODEL_ID","SecurityPermission","Menu","Extension","getLink","link","ContentEntries","List","modelId","icon","createElement","Link","Icon","element","label","Fragment","feature","name","text","to"],"sources":["Extension.tsx"],"sourcesContent":["import React from \"react\";\nimport { AdminConfig, HasPermission, RegisterFeature } from \"@webiny/app-admin\";\nimport { useRouter } from \"@webiny/app-admin\";\nimport { Routes } from \"@webiny/app-headless-cms\";\nimport { ReactComponent as TenantIcon } from \"@webiny/icons/business.svg\";\n\nimport { TenantEntryList } from \"./TenantEntryList.js\";\nimport { CurrentTenantProvider } from \"./CurrentTenantProvider.js\";\nimport { CurrentTenantFeature } from \"./CurrentTenant/feature.js\";\nimport { DisableTenantFeature } from \"./DisableTenant/index.js\";\nimport { EnableTenantFeature } from \"./EnableTenant/index.js\";\nimport { TenantSelector } from \"./TenantSelector.js\";\nimport { IsRootTenant } from \"./IsRootTenant.js\";\nimport { TENANT_MODEL_ID } from \"~/shared/constants.js\";\nimport { SecurityPermission } from \"./SecurityPermission.js\";\n\nconst { Menu } = AdminConfig;\n\nexport const Extension = () => {\n const { getLink } = useRouter();\n\n const link = getLink(Routes.ContentEntries.List, { modelId: TENANT_MODEL_ID });\n\n const icon = <Menu.Link.Icon element={<TenantIcon />} label={\"Tenant\"} />;\n\n return (\n <>\n <RegisterFeature feature={CurrentTenantFeature} />\n <CurrentTenantProvider />\n <TenantSelector />\n <TenantEntryList />\n <SecurityPermission />\n <AdminConfig>\n <IsRootTenant>\n <RegisterFeature feature={DisableTenantFeature} />\n <RegisterFeature feature={EnableTenantFeature} />\n <HasPermission name={\"tm.tenant\"}>\n <Menu\n name=\"tenantManager\"\n element={<Menu.Link text=\"Tenant Manager\" icon={icon} to={link} />}\n />\n </HasPermission>\n </IsRootTenant>\n </AdminConfig>\n </>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,WAAW,EAAEC,aAAa,EAAEC,eAAe,QAAQ,mBAAmB;AAC/E,SAASC,SAAS,QAAQ,mBAAmB;AAC7C,SAASC,MAAM,QAAQ,0BAA0B;AACjD,SAASC,cAAc,IAAIC,UAAU,QAAQ,4BAA4B;AAEzE,SAASC,eAAe;AACxB,SAASC,qBAAqB;AAC9B,SAASC,oBAAoB;AAC7B,SAASC,oBAAoB;AAC7B,SAASC,mBAAmB;AAC5B,SAASC,cAAc;AACvB,SAASC,YAAY;AACrB,SAASC,eAAe;AACxB,SAASC,kBAAkB;
|
|
1
|
+
{"version":3,"names":["React","AdminConfig","HasPermission","RegisterFeature","useRouter","Routes","ReactComponent","TenantIcon","TenantEntryList","CurrentTenantProvider","CurrentTenantFeature","DisableTenantFeature","EnableTenantFeature","TenantSelector","IsRootTenant","TENANT_MODEL_ID","SecurityPermission","TmPermissionsFeature","Menu","Extension","getLink","link","ContentEntries","List","modelId","icon","createElement","Link","Icon","element","label","Fragment","feature","name","text","to"],"sources":["Extension.tsx"],"sourcesContent":["import React from \"react\";\nimport { AdminConfig, HasPermission, RegisterFeature } from \"@webiny/app-admin\";\nimport { useRouter } from \"@webiny/app-admin\";\nimport { Routes } from \"@webiny/app-headless-cms\";\nimport { ReactComponent as TenantIcon } from \"@webiny/icons/business.svg\";\n\nimport { TenantEntryList } from \"./TenantEntryList.js\";\nimport { CurrentTenantProvider } from \"./CurrentTenantProvider.js\";\nimport { CurrentTenantFeature } from \"./CurrentTenant/feature.js\";\nimport { DisableTenantFeature } from \"./DisableTenant/index.js\";\nimport { EnableTenantFeature } from \"./EnableTenant/index.js\";\nimport { TenantSelector } from \"./TenantSelector.js\";\nimport { IsRootTenant } from \"./IsRootTenant.js\";\nimport { TENANT_MODEL_ID } from \"~/shared/constants.js\";\nimport { SecurityPermission } from \"./SecurityPermission.js\";\nimport { TmPermissionsFeature } from \"./features/permissions/feature.js\";\n\nconst { Menu } = AdminConfig;\n\nexport const Extension = () => {\n const { getLink } = useRouter();\n\n const link = getLink(Routes.ContentEntries.List, { modelId: TENANT_MODEL_ID });\n\n const icon = <Menu.Link.Icon element={<TenantIcon />} label={\"Tenant\"} />;\n\n return (\n <>\n <RegisterFeature feature={CurrentTenantFeature} />\n <RegisterFeature feature={TmPermissionsFeature} />\n <CurrentTenantProvider />\n <TenantSelector />\n <TenantEntryList />\n <SecurityPermission />\n <AdminConfig>\n <IsRootTenant>\n <RegisterFeature feature={DisableTenantFeature} />\n <RegisterFeature feature={EnableTenantFeature} />\n <HasPermission name={\"tm.tenant\"}>\n <Menu\n name=\"tenantManager\"\n element={<Menu.Link text=\"Tenant Manager\" icon={icon} to={link} />}\n />\n </HasPermission>\n </IsRootTenant>\n </AdminConfig>\n </>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,WAAW,EAAEC,aAAa,EAAEC,eAAe,QAAQ,mBAAmB;AAC/E,SAASC,SAAS,QAAQ,mBAAmB;AAC7C,SAASC,MAAM,QAAQ,0BAA0B;AACjD,SAASC,cAAc,IAAIC,UAAU,QAAQ,4BAA4B;AAEzE,SAASC,eAAe;AACxB,SAASC,qBAAqB;AAC9B,SAASC,oBAAoB;AAC7B,SAASC,oBAAoB;AAC7B,SAASC,mBAAmB;AAC5B,SAASC,cAAc;AACvB,SAASC,YAAY;AACrB,SAASC,eAAe;AACxB,SAASC,kBAAkB;AAC3B,SAASC,oBAAoB;AAE7B,MAAM;EAAEC;AAAK,CAAC,GAAGjB,WAAW;AAE5B,OAAO,MAAMkB,SAAS,GAAGA,CAAA,KAAM;EAC3B,MAAM;IAAEC;EAAQ,CAAC,GAAGhB,SAAS,CAAC,CAAC;EAE/B,MAAMiB,IAAI,GAAGD,OAAO,CAACf,MAAM,CAACiB,cAAc,CAACC,IAAI,EAAE;IAAEC,OAAO,EAAET;EAAgB,CAAC,CAAC;EAE9E,MAAMU,IAAI,gBAAGzB,KAAA,CAAA0B,aAAA,CAACR,IAAI,CAACS,IAAI,CAACC,IAAI;IAACC,OAAO,eAAE7B,KAAA,CAAA0B,aAAA,CAACnB,UAAU,MAAE,CAAE;IAACuB,KAAK,EAAE;EAAS,CAAE,CAAC;EAEzE,oBACI9B,KAAA,CAAA0B,aAAA,CAAA1B,KAAA,CAAA+B,QAAA,qBACI/B,KAAA,CAAA0B,aAAA,CAACvB,eAAe;IAAC6B,OAAO,EAAEtB;EAAqB,CAAE,CAAC,eAClDV,KAAA,CAAA0B,aAAA,CAACvB,eAAe;IAAC6B,OAAO,EAAEf;EAAqB,CAAE,CAAC,eAClDjB,KAAA,CAAA0B,aAAA,CAACjB,qBAAqB,MAAE,CAAC,eACzBT,KAAA,CAAA0B,aAAA,CAACb,cAAc,MAAE,CAAC,eAClBb,KAAA,CAAA0B,aAAA,CAAClB,eAAe,MAAE,CAAC,eACnBR,KAAA,CAAA0B,aAAA,CAACV,kBAAkB,MAAE,CAAC,eACtBhB,KAAA,CAAA0B,aAAA,CAACzB,WAAW,qBACRD,KAAA,CAAA0B,aAAA,CAACZ,YAAY,qBACTd,KAAA,CAAA0B,aAAA,CAACvB,eAAe;IAAC6B,OAAO,EAAErB;EAAqB,CAAE,CAAC,eAClDX,KAAA,CAAA0B,aAAA,CAACvB,eAAe;IAAC6B,OAAO,EAAEpB;EAAoB,CAAE,CAAC,eACjDZ,KAAA,CAAA0B,aAAA,CAACxB,aAAa;IAAC+B,IAAI,EAAE;EAAY,gBAC7BjC,KAAA,CAAA0B,aAAA,CAACR,IAAI;IACDe,IAAI,EAAC,eAAe;IACpBJ,OAAO,eAAE7B,KAAA,CAAA0B,aAAA,CAACR,IAAI,CAACS,IAAI;MAACO,IAAI,EAAC,gBAAgB;MAACT,IAAI,EAAEA,IAAK;MAACU,EAAE,EAAEd;IAAK,CAAE;EAAE,CACtE,CACU,CACL,CACL,CACf,CAAC;AAEX,CAAC","ignoreList":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { AdminConfig } from "@webiny/app-admin";
|
|
3
3
|
import { ReactComponent as PermissionsIcon } from "@webiny/icons/business.svg";
|
|
4
|
+
import { TM_PERMISSIONS_SCHEMA } from "./domain/permissionsSchema.js";
|
|
4
5
|
const {
|
|
5
6
|
Security
|
|
6
7
|
} = AdminConfig;
|
|
@@ -10,10 +11,7 @@ export const SecurityPermission = () => {
|
|
|
10
11
|
title: "Tenant Manager",
|
|
11
12
|
description: "Manage Tenant Manager permissions.",
|
|
12
13
|
icon: /*#__PURE__*/React.createElement(PermissionsIcon, null),
|
|
13
|
-
schema:
|
|
14
|
-
prefix: "tm",
|
|
15
|
-
fullAccess: true
|
|
16
|
-
}
|
|
14
|
+
schema: TM_PERMISSIONS_SCHEMA
|
|
17
15
|
}));
|
|
18
16
|
};
|
|
19
17
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","AdminConfig","ReactComponent","PermissionsIcon","Security","SecurityPermission","createElement","Permissions","name","title","description","icon","schema"
|
|
1
|
+
{"version":3,"names":["React","AdminConfig","ReactComponent","PermissionsIcon","TM_PERMISSIONS_SCHEMA","Security","SecurityPermission","createElement","Permissions","name","title","description","icon","schema"],"sources":["SecurityPermission.tsx"],"sourcesContent":["import React from \"react\";\nimport { AdminConfig } from \"@webiny/app-admin\";\nimport { ReactComponent as PermissionsIcon } from \"@webiny/icons/business.svg\";\nimport { TM_PERMISSIONS_SCHEMA } from \"./domain/permissionsSchema.js\";\n\nconst { Security } = AdminConfig;\n\nexport const SecurityPermission = () => {\n return (\n <AdminConfig>\n <Security.Permissions\n name=\"tenant-manager\"\n title=\"Tenant Manager\"\n description=\"Manage Tenant Manager permissions.\"\n icon={<PermissionsIcon />}\n schema={TM_PERMISSIONS_SCHEMA}\n />\n </AdminConfig>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,WAAW,QAAQ,mBAAmB;AAC/C,SAASC,cAAc,IAAIC,eAAe,QAAQ,4BAA4B;AAC9E,SAASC,qBAAqB;AAE9B,MAAM;EAAEC;AAAS,CAAC,GAAGJ,WAAW;AAEhC,OAAO,MAAMK,kBAAkB,GAAGA,CAAA,KAAM;EACpC,oBACIN,KAAA,CAAAO,aAAA,CAACN,WAAW,qBACRD,KAAA,CAAAO,aAAA,CAACF,QAAQ,CAACG,WAAW;IACjBC,IAAI,EAAC,gBAAgB;IACrBC,KAAK,EAAC,gBAAgB;IACtBC,WAAW,EAAC,oCAAoC;IAChDC,IAAI,eAAEZ,KAAA,CAAAO,aAAA,CAACJ,eAAe,MAAE,CAAE;IAC1BU,MAAM,EAAET;EAAsB,CACjC,CACQ,CAAC;AAEtB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createPermissionSchema","TM_PERMISSIONS_SCHEMA","prefix","fullAccess"],"sources":["permissionsSchema.ts"],"sourcesContent":["import { createPermissionSchema } from \"@webiny/app-admin\";\n\nexport const TM_PERMISSIONS_SCHEMA = createPermissionSchema({\n prefix: \"tm\",\n fullAccess: true\n});\n"],"mappings":"AAAA,SAASA,sBAAsB,QAAQ,mBAAmB;AAE1D,OAAO,MAAMC,qBAAqB,GAAGD,sBAAsB,CAAC;EACxDE,MAAM,EAAE,IAAI;EACZC,UAAU,EAAE;AAChB,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Permissions } from "@webiny/app-admin/exports/admin/security.js";
|
|
2
|
+
import { TM_PERMISSIONS_SCHEMA } from "../../../admin/domain/permissionsSchema.js";
|
|
3
|
+
export declare const TmPermissions: import("@webiny/di").Abstraction<{
|
|
4
|
+
canAccess: (entityId: never) => boolean;
|
|
5
|
+
canAction: (action: string, entityId: never) => boolean;
|
|
6
|
+
} & {
|
|
7
|
+
canRead: (entityId: string) => boolean;
|
|
8
|
+
canCreate: (entityId: string) => boolean;
|
|
9
|
+
canEdit: (entityId: string, item?: import("@webiny/app-admin/permissions").OwnableItem) => boolean;
|
|
10
|
+
canDelete: (entityId: string, item?: import("@webiny/app-admin/permissions").OwnableItem) => boolean;
|
|
11
|
+
} & {
|
|
12
|
+
canPublish: (entityId: string) => boolean;
|
|
13
|
+
canUnpublish: (entityId: string) => boolean;
|
|
14
|
+
}>;
|
|
15
|
+
export declare namespace TmPermissions {
|
|
16
|
+
type Interface = Permissions<typeof TM_PERMISSIONS_SCHEMA>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { createPermissionsAbstraction } from "@webiny/app-admin/exports/admin/security.js";
|
|
2
|
+
import { TM_PERMISSIONS_SCHEMA } from "../../domain/permissionsSchema.js";
|
|
3
|
+
export const TmPermissions = createPermissionsAbstraction(TM_PERMISSIONS_SCHEMA);
|
|
4
|
+
|
|
5
|
+
//# sourceMappingURL=abstractions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createPermissionsAbstraction","TM_PERMISSIONS_SCHEMA","TmPermissions"],"sources":["abstractions.ts"],"sourcesContent":["import { createPermissionsAbstraction } from \"@webiny/app-admin/exports/admin/security.js\";\nimport type { Permissions } from \"@webiny/app-admin/exports/admin/security.js\";\nimport { TM_PERMISSIONS_SCHEMA } from \"~/admin/domain/permissionsSchema.js\";\n\nexport const TmPermissions = createPermissionsAbstraction(TM_PERMISSIONS_SCHEMA);\n\nexport namespace TmPermissions {\n export type Interface = Permissions<typeof TM_PERMISSIONS_SCHEMA>;\n}\n"],"mappings":"AAAA,SAASA,4BAA4B,QAAQ,6CAA6C;AAE1F,SAASC,qBAAqB;AAE9B,OAAO,MAAMC,aAAa,GAAGF,4BAA4B,CAACC,qBAAqB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const TmPermissionsFeature: import("@webiny/feature/admin").FeatureDefinition<{
|
|
2
|
+
permissions: {
|
|
3
|
+
canAccess: (entityId: never) => boolean;
|
|
4
|
+
canAction: (action: string, entityId: never) => boolean;
|
|
5
|
+
} & {
|
|
6
|
+
canRead: (entityId: string) => boolean;
|
|
7
|
+
canCreate: (entityId: string) => boolean;
|
|
8
|
+
canEdit: (entityId: string, item?: import("@webiny/app-admin/index.js").OwnableItem) => boolean;
|
|
9
|
+
canDelete: (entityId: string, item?: import("@webiny/app-admin/index.js").OwnableItem) => boolean;
|
|
10
|
+
} & {
|
|
11
|
+
canPublish: (entityId: string) => boolean;
|
|
12
|
+
canUnpublish: (entityId: string) => boolean;
|
|
13
|
+
};
|
|
14
|
+
}, []>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { createPermissionsFeature } from "@webiny/app-admin/exports/admin/security.js";
|
|
2
|
+
import { TM_PERMISSIONS_SCHEMA } from "../../domain/permissionsSchema.js";
|
|
3
|
+
import { TmPermissions } from "./abstractions.js";
|
|
4
|
+
export const TmPermissionsFeature = createPermissionsFeature(TM_PERMISSIONS_SCHEMA, TmPermissions);
|
|
5
|
+
|
|
6
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createPermissionsFeature","TM_PERMISSIONS_SCHEMA","TmPermissions","TmPermissionsFeature"],"sources":["feature.ts"],"sourcesContent":["import { createPermissionsFeature } from \"@webiny/app-admin/exports/admin/security.js\";\nimport { TM_PERMISSIONS_SCHEMA } from \"~/admin/domain/permissionsSchema.js\";\nimport { TmPermissions } from \"./abstractions.js\";\n\nexport const TmPermissionsFeature = createPermissionsFeature(TM_PERMISSIONS_SCHEMA, TmPermissions);\n"],"mappings":"AAAA,SAASA,wBAAwB,QAAQ,6CAA6C;AACtF,SAASC,qBAAqB;AAC9B,SAASC,aAAa;AAEtB,OAAO,MAAMC,oBAAoB,GAAGH,wBAAwB,CAACC,qBAAqB,EAAEC,aAAa,CAAC","ignoreList":[]}
|
|
@@ -10,7 +10,7 @@ class TenantModelFactory {
|
|
|
10
10
|
modelId: TENANT_MODEL_ID,
|
|
11
11
|
name: "Tenant",
|
|
12
12
|
group: "hidden"
|
|
13
|
-
}).description("Manage system tenants.").titleFieldId("name").icon("fas/building").singularApiName("Tenant").pluralApiName("Tenants").tags(["$publishing:false"]);
|
|
13
|
+
}).description("Manage system tenants.").titleFieldId("name").icon("fas/building").singularApiName("Tenant").pluralApiName("Tenants").tags(["$publishing:false", "$hidden:true"]);
|
|
14
14
|
model.fields(fields => ({
|
|
15
15
|
name: fields.text().label("Name").description("Enter a tenant name").required().renderer("textInput"),
|
|
16
16
|
description: fields.longText().label("Description").description("Enter a short tenant description").renderer("textarea").required(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ModelFactory","TenantModelExtension","TENANT_MODEL_ID","TenantModelFactory","constructor","extensions","execute","builder","model","public","modelId","name","group","description","titleFieldId","icon","singularApiName","pluralApiName","tags","fields","text","label","required","renderer","longText","status","defaultValue","predefinedValues","value","isInstalled","boolean","object","layout","modifier","extend","createImplementation","implementation","dependencies","multiple"],"sources":["TenantModel.ts"],"sourcesContent":["import { ModelFactory } from \"@webiny/api-headless-cms/features/modelBuilder/index.js\";\nimport { TenantModelExtension } from \"./TenantModelExtension.js\";\nimport { TENANT_MODEL_ID } from \"~/shared/constants.js\";\n\nclass TenantModelFactory implements ModelFactory.Interface {\n constructor(private extensions: TenantModelExtension.Interface[]) {}\n\n async execute(builder: ModelFactory.Builder) {\n const model = builder\n .public({\n modelId: TENANT_MODEL_ID,\n name: \"Tenant\",\n group: \"hidden\"\n })\n .description(\"Manage system tenants.\")\n .titleFieldId(\"name\")\n .icon(\"fas/building\")\n .singularApiName(\"Tenant\")\n .pluralApiName(\"Tenants\")\n .tags([\"$publishing:false\"]);\n\n model\n .fields(fields => ({\n name: fields\n .text()\n .label(\"Name\")\n .description(\"Enter a tenant name\")\n .required()\n .renderer(\"textInput\"),\n description: fields\n .longText()\n .label(\"Description\")\n .description(\"Enter a short tenant description\")\n .renderer(\"textarea\")\n .required(),\n status: fields\n .text()\n .label(\"Status\")\n .defaultValue(\"disabled\")\n .renderer(\"hidden\")\n .predefinedValues([\n {\n value: \"enabled\",\n label: \"Enabled\"\n },\n {\n value: \"disabled\",\n label: \"Disabled\"\n }\n ]),\n isInstalled: fields\n .boolean()\n .label(\"Is installed?\")\n .renderer(\"hidden\")\n .defaultValue(false),\n extensions: fields.object().renderer(\"passthrough\")\n }))\n .layout([[\"name\"], [\"description\"], [\"extensions\"]]);\n\n for (const modifier of this.extensions) {\n model.fields(fields => {\n const extensions = fields.extend().object();\n modifier.execute(extensions);\n\n return { extensions };\n });\n }\n\n return [model];\n }\n}\n\nexport default ModelFactory.createImplementation({\n implementation: TenantModelFactory,\n dependencies: [[TenantModelExtension, { multiple: true }]]\n});\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,yDAAyD;AACtF,SAASC,oBAAoB;AAC7B,SAASC,eAAe;AAExB,MAAMC,kBAAkB,CAAmC;EACvDC,WAAWA,CAASC,UAA4C,EAAE;IAAA,KAA9CA,UAA4C,GAA5CA,UAA4C;EAAG;EAEnE,MAAMC,OAAOA,CAACC,OAA6B,EAAE;IACzC,MAAMC,KAAK,GAAGD,OAAO,CAChBE,MAAM,CAAC;MACJC,OAAO,EAAER,eAAe;MACxBS,IAAI,EAAE,QAAQ;MACdC,KAAK,EAAE;IACX,CAAC,CAAC,CACDC,WAAW,CAAC,wBAAwB,CAAC,CACrCC,YAAY,CAAC,MAAM,CAAC,CACpBC,IAAI,CAAC,cAAc,CAAC,CACpBC,eAAe,CAAC,QAAQ,CAAC,CACzBC,aAAa,CAAC,SAAS,CAAC,CACxBC,IAAI,CAAC,CAAC,mBAAmB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"names":["ModelFactory","TenantModelExtension","TENANT_MODEL_ID","TenantModelFactory","constructor","extensions","execute","builder","model","public","modelId","name","group","description","titleFieldId","icon","singularApiName","pluralApiName","tags","fields","text","label","required","renderer","longText","status","defaultValue","predefinedValues","value","isInstalled","boolean","object","layout","modifier","extend","createImplementation","implementation","dependencies","multiple"],"sources":["TenantModel.ts"],"sourcesContent":["import { ModelFactory } from \"@webiny/api-headless-cms/features/modelBuilder/index.js\";\nimport { TenantModelExtension } from \"./TenantModelExtension.js\";\nimport { TENANT_MODEL_ID } from \"~/shared/constants.js\";\n\nclass TenantModelFactory implements ModelFactory.Interface {\n constructor(private extensions: TenantModelExtension.Interface[]) {}\n\n async execute(builder: ModelFactory.Builder) {\n const model = builder\n .public({\n modelId: TENANT_MODEL_ID,\n name: \"Tenant\",\n group: \"hidden\"\n })\n .description(\"Manage system tenants.\")\n .titleFieldId(\"name\")\n .icon(\"fas/building\")\n .singularApiName(\"Tenant\")\n .pluralApiName(\"Tenants\")\n .tags([\"$publishing:false\", \"$hidden:true\"]);\n\n model\n .fields(fields => ({\n name: fields\n .text()\n .label(\"Name\")\n .description(\"Enter a tenant name\")\n .required()\n .renderer(\"textInput\"),\n description: fields\n .longText()\n .label(\"Description\")\n .description(\"Enter a short tenant description\")\n .renderer(\"textarea\")\n .required(),\n status: fields\n .text()\n .label(\"Status\")\n .defaultValue(\"disabled\")\n .renderer(\"hidden\")\n .predefinedValues([\n {\n value: \"enabled\",\n label: \"Enabled\"\n },\n {\n value: \"disabled\",\n label: \"Disabled\"\n }\n ]),\n isInstalled: fields\n .boolean()\n .label(\"Is installed?\")\n .renderer(\"hidden\")\n .defaultValue(false),\n extensions: fields.object().renderer(\"passthrough\")\n }))\n .layout([[\"name\"], [\"description\"], [\"extensions\"]]);\n\n for (const modifier of this.extensions) {\n model.fields(fields => {\n const extensions = fields.extend().object();\n modifier.execute(extensions);\n\n return { extensions };\n });\n }\n\n return [model];\n }\n}\n\nexport default ModelFactory.createImplementation({\n implementation: TenantModelFactory,\n dependencies: [[TenantModelExtension, { multiple: true }]]\n});\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,yDAAyD;AACtF,SAASC,oBAAoB;AAC7B,SAASC,eAAe;AAExB,MAAMC,kBAAkB,CAAmC;EACvDC,WAAWA,CAASC,UAA4C,EAAE;IAAA,KAA9CA,UAA4C,GAA5CA,UAA4C;EAAG;EAEnE,MAAMC,OAAOA,CAACC,OAA6B,EAAE;IACzC,MAAMC,KAAK,GAAGD,OAAO,CAChBE,MAAM,CAAC;MACJC,OAAO,EAAER,eAAe;MACxBS,IAAI,EAAE,QAAQ;MACdC,KAAK,EAAE;IACX,CAAC,CAAC,CACDC,WAAW,CAAC,wBAAwB,CAAC,CACrCC,YAAY,CAAC,MAAM,CAAC,CACpBC,IAAI,CAAC,cAAc,CAAC,CACpBC,eAAe,CAAC,QAAQ,CAAC,CACzBC,aAAa,CAAC,SAAS,CAAC,CACxBC,IAAI,CAAC,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;IAEhDV,KAAK,CACAW,MAAM,CAACA,MAAM,KAAK;MACfR,IAAI,EAAEQ,MAAM,CACPC,IAAI,CAAC,CAAC,CACNC,KAAK,CAAC,MAAM,CAAC,CACbR,WAAW,CAAC,qBAAqB,CAAC,CAClCS,QAAQ,CAAC,CAAC,CACVC,QAAQ,CAAC,WAAW,CAAC;MAC1BV,WAAW,EAAEM,MAAM,CACdK,QAAQ,CAAC,CAAC,CACVH,KAAK,CAAC,aAAa,CAAC,CACpBR,WAAW,CAAC,kCAAkC,CAAC,CAC/CU,QAAQ,CAAC,UAAU,CAAC,CACpBD,QAAQ,CAAC,CAAC;MACfG,MAAM,EAAEN,MAAM,CACTC,IAAI,CAAC,CAAC,CACNC,KAAK,CAAC,QAAQ,CAAC,CACfK,YAAY,CAAC,UAAU,CAAC,CACxBH,QAAQ,CAAC,QAAQ,CAAC,CAClBI,gBAAgB,CAAC,CACd;QACIC,KAAK,EAAE,SAAS;QAChBP,KAAK,EAAE;MACX,CAAC,EACD;QACIO,KAAK,EAAE,UAAU;QACjBP,KAAK,EAAE;MACX,CAAC,CACJ,CAAC;MACNQ,WAAW,EAAEV,MAAM,CACdW,OAAO,CAAC,CAAC,CACTT,KAAK,CAAC,eAAe,CAAC,CACtBE,QAAQ,CAAC,QAAQ,CAAC,CAClBG,YAAY,CAAC,KAAK,CAAC;MACxBrB,UAAU,EAAEc,MAAM,CAACY,MAAM,CAAC,CAAC,CAACR,QAAQ,CAAC,aAAa;IACtD,CAAC,CAAC,CAAC,CACFS,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAExD,KAAK,MAAMC,QAAQ,IAAI,IAAI,CAAC5B,UAAU,EAAE;MACpCG,KAAK,CAACW,MAAM,CAACA,MAAM,IAAI;QACnB,MAAMd,UAAU,GAAGc,MAAM,CAACe,MAAM,CAAC,CAAC,CAACH,MAAM,CAAC,CAAC;QAC3CE,QAAQ,CAAC3B,OAAO,CAACD,UAAU,CAAC;QAE5B,OAAO;UAAEA;QAAW,CAAC;MACzB,CAAC,CAAC;IACN;IAEA,OAAO,CAACG,KAAK,CAAC;EAClB;AACJ;AAEA,eAAeR,YAAY,CAACmC,oBAAoB,CAAC;EAC7CC,cAAc,EAAEjC,kBAAkB;EAClCkC,YAAY,EAAE,CAAC,CAACpC,oBAAoB,EAAE;IAAEqC,QAAQ,EAAE;EAAK,CAAC,CAAC;AAC7D,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,28 +1,33 @@
|
|
|
1
1
|
import { PermissionTransformer } from "@webiny/api-core/features/security/authorization/AuthorizationContext/abstractions.js";
|
|
2
|
+
import { TENANT_MODEL_ID } from "../../../shared/constants.js";
|
|
2
3
|
class AddCmsPermissions {
|
|
3
4
|
execute(permission) {
|
|
4
5
|
if (permission.name !== "tm.*") {
|
|
5
6
|
return permission;
|
|
6
7
|
}
|
|
7
8
|
return [permission, {
|
|
8
|
-
name: "cms.endpoint.manage"
|
|
9
|
+
name: "cms.endpoint.manage",
|
|
10
|
+
_src: "tenant-manager"
|
|
9
11
|
}, {
|
|
10
12
|
name: "cms.contentModel",
|
|
11
13
|
own: false,
|
|
12
14
|
rwd: "r",
|
|
13
15
|
pw: "",
|
|
14
|
-
models: [
|
|
16
|
+
models: [TENANT_MODEL_ID],
|
|
17
|
+
_src: "tenant-manager"
|
|
15
18
|
}, {
|
|
16
19
|
name: "cms.contentModelGroup",
|
|
17
20
|
own: false,
|
|
18
21
|
rwd: "r",
|
|
19
22
|
pw: "",
|
|
20
|
-
groups: ["hidden"]
|
|
23
|
+
groups: ["hidden"],
|
|
24
|
+
_src: "tenant-manager"
|
|
21
25
|
}, {
|
|
22
26
|
name: "cms.contentEntry",
|
|
23
27
|
own: false,
|
|
24
28
|
rwd: "rwd",
|
|
25
|
-
pw: ""
|
|
29
|
+
pw: "",
|
|
30
|
+
_src: "tenant-manager"
|
|
26
31
|
}];
|
|
27
32
|
}
|
|
28
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PermissionTransformer","AddCmsPermissions","execute","permission","name","own","rwd","pw","models","groups","createImplementation","implementation","dependencies"],"sources":["AddCmsPermissions.ts"],"sourcesContent":["import { PermissionTransformer } from \"@webiny/api-core/features/security/authorization/AuthorizationContext/abstractions.js\";\n\nclass AddCmsPermissions implements PermissionTransformer.Interface {\n execute(permission: PermissionTransformer.Permission) {\n if (permission.name !== \"tm.*\") {\n return permission;\n }\n\n return [\n permission,\n {\n name: \"cms.endpoint.manage\"\n },\n {\n name: \"cms.contentModel\",\n own: false,\n rwd: \"r\",\n pw: \"\",\n models: [\"tenant\"
|
|
1
|
+
{"version":3,"names":["PermissionTransformer","TENANT_MODEL_ID","AddCmsPermissions","execute","permission","name","_src","own","rwd","pw","models","groups","createImplementation","implementation","dependencies"],"sources":["AddCmsPermissions.ts"],"sourcesContent":["import { PermissionTransformer } from \"@webiny/api-core/features/security/authorization/AuthorizationContext/abstractions.js\";\nimport { TENANT_MODEL_ID } from \"~/shared/constants.js\";\n\nclass AddCmsPermissions implements PermissionTransformer.Interface {\n execute(permission: PermissionTransformer.Permission) {\n if (permission.name !== \"tm.*\") {\n return permission;\n }\n\n return [\n permission,\n {\n name: \"cms.endpoint.manage\",\n _src: \"tenant-manager\"\n },\n {\n name: \"cms.contentModel\",\n own: false,\n rwd: \"r\",\n pw: \"\",\n models: [TENANT_MODEL_ID],\n _src: \"tenant-manager\"\n },\n {\n name: \"cms.contentModelGroup\",\n own: false,\n rwd: \"r\",\n pw: \"\",\n groups: [\"hidden\"],\n _src: \"tenant-manager\"\n },\n {\n name: \"cms.contentEntry\",\n own: false,\n rwd: \"rwd\",\n pw: \"\",\n _src: \"tenant-manager\"\n }\n ];\n }\n}\n\nexport default PermissionTransformer.createImplementation({\n implementation: AddCmsPermissions,\n dependencies: []\n});\n"],"mappings":"AAAA,SAASA,qBAAqB,QAAQ,uFAAuF;AAC7H,SAASC,eAAe;AAExB,MAAMC,iBAAiB,CAA4C;EAC/DC,OAAOA,CAACC,UAA4C,EAAE;IAClD,IAAIA,UAAU,CAACC,IAAI,KAAK,MAAM,EAAE;MAC5B,OAAOD,UAAU;IACrB;IAEA,OAAO,CACHA,UAAU,EACV;MACIC,IAAI,EAAE,qBAAqB;MAC3BC,IAAI,EAAE;IACV,CAAC,EACD;MACID,IAAI,EAAE,kBAAkB;MACxBE,GAAG,EAAE,KAAK;MACVC,GAAG,EAAE,GAAG;MACRC,EAAE,EAAE,EAAE;MACNC,MAAM,EAAE,CAACT,eAAe,CAAC;MACzBK,IAAI,EAAE;IACV,CAAC,EACD;MACID,IAAI,EAAE,uBAAuB;MAC7BE,GAAG,EAAE,KAAK;MACVC,GAAG,EAAE,GAAG;MACRC,EAAE,EAAE,EAAE;MACNE,MAAM,EAAE,CAAC,QAAQ,CAAC;MAClBL,IAAI,EAAE;IACV,CAAC,EACD;MACID,IAAI,EAAE,kBAAkB;MACxBE,GAAG,EAAE,KAAK;MACVC,GAAG,EAAE,KAAK;MACVC,EAAE,EAAE,EAAE;MACNH,IAAI,EAAE;IACV,CAAC,CACJ;EACL;AACJ;AAEA,eAAeN,qBAAqB,CAACY,oBAAoB,CAAC;EACtDC,cAAc,EAAEX,iBAAiB;EACjCY,YAAY,EAAE;AAClB,CAAC,CAAC","ignoreList":[]}
|
|
@@ -6,6 +6,6 @@ declare class DeleteTenantOnEntryDeleteHandler implements EntryAfterDeleteEventH
|
|
|
6
6
|
handle(event: EntryAfterDeleteEventHandler.Event): Promise<void>;
|
|
7
7
|
}
|
|
8
8
|
declare const _default: typeof DeleteTenantOnEntryDeleteHandler & {
|
|
9
|
-
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/
|
|
9
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher").IEventHandler<import("@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events.js").EntryAfterDeleteEvent>>;
|
|
10
10
|
};
|
|
11
11
|
export default _default;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DisableTenantUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
2
2
|
import { Result } from "@webiny/feature/api";
|
|
3
3
|
import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
|
|
4
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
4
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
5
5
|
import { UpdateTenantUseCase as ApiCoreUpdateTenant } from "@webiny/api-core/features/tenancy/UpdateTenant";
|
|
6
6
|
import { UpdateTenantUseCase as TenantManagerUpdateTenant } from "../UpdateTenant/abstractions.js";
|
|
7
7
|
import { GetTenantByIdUseCase } from "../GetTenantById/abstractions.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DisableTenantUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
2
2
|
import { Result } from "@webiny/feature/api";
|
|
3
3
|
import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
|
|
4
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
4
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
5
5
|
import { NotAuthorizedError } from "@webiny/api-core/features/security/shared/errors.js";
|
|
6
6
|
import { UpdateTenantUseCase as ApiCoreUpdateTenant } from "@webiny/api-core/features/tenancy/UpdateTenant";
|
|
7
7
|
import { UpdateTenantUseCase as TenantManagerUpdateTenant } from "../UpdateTenant/abstractions.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DisableTenantUseCase","UseCaseAbstraction","Result","IdentityContext","EventPublisher","NotAuthorizedError","UpdateTenantUseCase","ApiCoreUpdateTenant","TenantManagerUpdateTenant","GetTenantByIdUseCase","TenantBeforeDisableEvent","TenantAfterDisableEvent","TenantPersistenceError","constructor","identityContext","eventPublisher","coreUpdateTenant","tmUpdateTenant","tmGetTenantById","execute","tenantId","getPermission","fail","getTenantResult","isFail","error","tenant","value","publish","apiCoreResult","status","Error","updateResult","ok","createImplementation","implementation","dependencies"],"sources":["DisableTenantUseCase.ts"],"sourcesContent":["import { DisableTenantUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { Result } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"@webiny/api-core/exports/api/security.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/
|
|
1
|
+
{"version":3,"names":["DisableTenantUseCase","UseCaseAbstraction","Result","IdentityContext","EventPublisher","NotAuthorizedError","UpdateTenantUseCase","ApiCoreUpdateTenant","TenantManagerUpdateTenant","GetTenantByIdUseCase","TenantBeforeDisableEvent","TenantAfterDisableEvent","TenantPersistenceError","constructor","identityContext","eventPublisher","coreUpdateTenant","tmUpdateTenant","tmGetTenantById","execute","tenantId","getPermission","fail","getTenantResult","isFail","error","tenant","value","publish","apiCoreResult","status","Error","updateResult","ok","createImplementation","implementation","dependencies"],"sources":["DisableTenantUseCase.ts"],"sourcesContent":["import { DisableTenantUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { Result } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"@webiny/api-core/exports/api/security.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/errors.js\";\nimport { UpdateTenantUseCase as ApiCoreUpdateTenant } from \"@webiny/api-core/features/tenancy/UpdateTenant\";\nimport { UpdateTenantUseCase as TenantManagerUpdateTenant } from \"../UpdateTenant/abstractions.js\";\nimport { GetTenantByIdUseCase } from \"../GetTenantById/abstractions.js\";\nimport { TenantBeforeDisableEvent, TenantAfterDisableEvent } from \"./events.js\";\nimport { TenantPersistenceError } from \"../../domain/errors.js\";\n\nclass DisableTenantUseCase implements UseCaseAbstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private eventPublisher: EventPublisher.Interface,\n private coreUpdateTenant: ApiCoreUpdateTenant.Interface,\n private tmUpdateTenant: TenantManagerUpdateTenant.Interface,\n private tmGetTenantById: GetTenantByIdUseCase.Interface\n ) {}\n\n async execute(tenantId: string): Promise<Result<void, UseCaseAbstraction.Error>> {\n // Authorization checks\n if (!this.identityContext.getPermission(\"tm.tenant\")) {\n return Result.fail(new NotAuthorizedError());\n }\n\n // Get current tenant to verify it exists\n const getTenantResult = await this.tmGetTenantById.execute(tenantId);\n if (getTenantResult.isFail()) {\n return Result.fail(getTenantResult.error);\n }\n\n const tenant = getTenantResult.value;\n\n // Publish before event\n await this.eventPublisher.publish(new TenantBeforeDisableEvent({ tenant }));\n\n // Update api-core tenant first\n const apiCoreResult = await this.coreUpdateTenant.execute(tenantId, {\n status: \"disabled\"\n });\n if (apiCoreResult.isFail()) {\n return Result.fail(\n new TenantPersistenceError(\n new Error(`Failed to update api-core tenant: ${apiCoreResult.error}`)\n )\n );\n }\n\n // Update tenant-manager CMS entry\n const updateResult = await this.tmUpdateTenant.execute(tenantId, {\n status: \"disabled\"\n });\n\n if (updateResult.isFail()) {\n return Result.fail(updateResult.error);\n }\n\n // Publish after event\n await this.eventPublisher.publish(\n new TenantAfterDisableEvent({ tenant: updateResult.value })\n );\n\n return Result.ok();\n }\n}\n\nexport default UseCaseAbstraction.createImplementation({\n implementation: DisableTenantUseCase,\n dependencies: [\n IdentityContext,\n EventPublisher,\n ApiCoreUpdateTenant,\n TenantManagerUpdateTenant,\n GetTenantByIdUseCase\n ]\n});\n"],"mappings":"AAAA,SAASA,oBAAoB,IAAIC,kBAAkB;AACnD,SAASC,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,eAAe,QAAQ,0CAA0C;AAC1E,SAASC,cAAc,QAAQ,mDAAmD;AAClF,SAASC,kBAAkB,QAAQ,qDAAqD;AACxF,SAASC,mBAAmB,IAAIC,mBAAmB,QAAQ,gDAAgD;AAC3G,SAASD,mBAAmB,IAAIE,yBAAyB;AACzD,SAASC,oBAAoB;AAC7B,SAASC,wBAAwB,EAAEC,uBAAuB;AAC1D,SAASC,sBAAsB;AAE/B,MAAMZ,oBAAoB,CAAyC;EAC/Da,WAAWA,CACCC,eAA0C,EAC1CC,cAAwC,EACxCC,gBAA+C,EAC/CC,cAAmD,EACnDC,eAA+C,EACzD;IAAA,KALUJ,eAA0C,GAA1CA,eAA0C;IAAA,KAC1CC,cAAwC,GAAxCA,cAAwC;IAAA,KACxCC,gBAA+C,GAA/CA,gBAA+C;IAAA,KAC/CC,cAAmD,GAAnDA,cAAmD;IAAA,KACnDC,eAA+C,GAA/CA,eAA+C;EACxD;EAEH,MAAMC,OAAOA,CAACC,QAAgB,EAAmD;IAC7E;IACA,IAAI,CAAC,IAAI,CAACN,eAAe,CAACO,aAAa,CAAC,WAAW,CAAC,EAAE;MAClD,OAAOnB,MAAM,CAACoB,IAAI,CAAC,IAAIjB,kBAAkB,CAAC,CAAC,CAAC;IAChD;;IAEA;IACA,MAAMkB,eAAe,GAAG,MAAM,IAAI,CAACL,eAAe,CAACC,OAAO,CAACC,QAAQ,CAAC;IACpE,IAAIG,eAAe,CAACC,MAAM,CAAC,CAAC,EAAE;MAC1B,OAAOtB,MAAM,CAACoB,IAAI,CAACC,eAAe,CAACE,KAAK,CAAC;IAC7C;IAEA,MAAMC,MAAM,GAAGH,eAAe,CAACI,KAAK;;IAEpC;IACA,MAAM,IAAI,CAACZ,cAAc,CAACa,OAAO,CAAC,IAAIlB,wBAAwB,CAAC;MAAEgB;IAAO,CAAC,CAAC,CAAC;;IAE3E;IACA,MAAMG,aAAa,GAAG,MAAM,IAAI,CAACb,gBAAgB,CAACG,OAAO,CAACC,QAAQ,EAAE;MAChEU,MAAM,EAAE;IACZ,CAAC,CAAC;IACF,IAAID,aAAa,CAACL,MAAM,CAAC,CAAC,EAAE;MACxB,OAAOtB,MAAM,CAACoB,IAAI,CACd,IAAIV,sBAAsB,CACtB,IAAImB,KAAK,CAAC,qCAAqCF,aAAa,CAACJ,KAAK,EAAE,CACxE,CACJ,CAAC;IACL;;IAEA;IACA,MAAMO,YAAY,GAAG,MAAM,IAAI,CAACf,cAAc,CAACE,OAAO,CAACC,QAAQ,EAAE;MAC7DU,MAAM,EAAE;IACZ,CAAC,CAAC;IAEF,IAAIE,YAAY,CAACR,MAAM,CAAC,CAAC,EAAE;MACvB,OAAOtB,MAAM,CAACoB,IAAI,CAACU,YAAY,CAACP,KAAK,CAAC;IAC1C;;IAEA;IACA,MAAM,IAAI,CAACV,cAAc,CAACa,OAAO,CAC7B,IAAIjB,uBAAuB,CAAC;MAAEe,MAAM,EAAEM,YAAY,CAACL;IAAM,CAAC,CAC9D,CAAC;IAED,OAAOzB,MAAM,CAAC+B,EAAE,CAAC,CAAC;EACtB;AACJ;AAEA,eAAehC,kBAAkB,CAACiC,oBAAoB,CAAC;EACnDC,cAAc,EAAEnC,oBAAoB;EACpCoC,YAAY,EAAE,CACVjC,eAAe,EACfC,cAAc,EACdG,mBAAmB,EACnBC,yBAAyB,EACzBC,oBAAoB;AAE5B,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DomainEvent } from "@webiny/api-core/features/
|
|
2
|
-
import type { IEventHandler } from "@webiny/api-core/features/
|
|
1
|
+
import { DomainEvent } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
2
|
+
import type { IEventHandler } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
3
3
|
import type { Tenant } from "../../../shared/Tenant.js";
|
|
4
4
|
export interface TenantBeforeDisablePayload {
|
|
5
5
|
tenant: Tenant;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createAbstraction } from "@webiny/feature/api";
|
|
2
|
-
import { DomainEvent } from "@webiny/api-core/features/
|
|
2
|
+
import { DomainEvent } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
3
3
|
export class TenantBeforeDisableEvent extends DomainEvent {
|
|
4
4
|
eventType = "tenant.beforeDisable";
|
|
5
5
|
getHandlerAbstraction() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","DomainEvent","TenantBeforeDisableEvent","eventType","getHandlerAbstraction","TenantBeforeDisableEventHandler","TenantAfterDisableEvent","TenantAfterDisableEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { DomainEvent } from \"@webiny/api-core/features/
|
|
1
|
+
{"version":3,"names":["createAbstraction","DomainEvent","TenantBeforeDisableEvent","eventType","getHandlerAbstraction","TenantBeforeDisableEventHandler","TenantAfterDisableEvent","TenantAfterDisableEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { DomainEvent } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport type { IEventHandler } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport type { Tenant } from \"~/shared/Tenant.js\";\n\nexport interface TenantBeforeDisablePayload {\n tenant: Tenant;\n}\n\nexport interface TenantAfterDisablePayload {\n tenant: Tenant;\n}\n\nexport class TenantBeforeDisableEvent extends DomainEvent<TenantBeforeDisablePayload> {\n eventType = \"tenant.beforeDisable\" as const;\n\n getHandlerAbstraction() {\n return TenantBeforeDisableEventHandler;\n }\n}\n\nexport const TenantBeforeDisableEventHandler = createAbstraction<\n IEventHandler<TenantBeforeDisableEvent>\n>(\"TenantManager/TenantBeforeDisableEventHandler\");\n\nexport namespace TenantBeforeDisableEventHandler {\n export type Interface = IEventHandler<TenantBeforeDisableEvent>;\n export type Event = TenantBeforeDisableEvent;\n}\n\nexport class TenantAfterDisableEvent extends DomainEvent<TenantAfterDisablePayload> {\n eventType = \"tenant.afterDisable\" as const;\n\n getHandlerAbstraction() {\n return TenantAfterDisableEventHandler;\n }\n}\n\nexport const TenantAfterDisableEventHandler = createAbstraction<\n IEventHandler<TenantAfterDisableEvent>\n>(\"TenantManager/TenantAfterDisableEventHandler\");\n\nexport namespace TenantAfterDisableEventHandler {\n export type Interface = IEventHandler<TenantAfterDisableEvent>;\n export type Event = TenantAfterDisableEvent;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,WAAW,QAAQ,mDAAmD;AAY/E,OAAO,MAAMC,wBAAwB,SAASD,WAAW,CAA6B;EAClFE,SAAS,GAAG,sBAAsB;EAElCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOC,+BAA+B;EAC1C;AACJ;AAEA,OAAO,MAAMA,+BAA+B,GAAGL,iBAAiB,CAE9D,+CAA+C,CAAC;AAOlD,OAAO,MAAMM,uBAAuB,SAASL,WAAW,CAA4B;EAChFE,SAAS,GAAG,qBAAqB;EAEjCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOG,8BAA8B;EACzC;AACJ;AAEA,OAAO,MAAMA,8BAA8B,GAAGP,iBAAiB,CAE7D,8CAA8C,CAAC","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EnableTenantUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
2
2
|
import { Result } from "@webiny/feature/api";
|
|
3
3
|
import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
|
|
4
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
4
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
5
5
|
import { UpdateTenantUseCase as ApiCoreUpdateTenant } from "@webiny/api-core/features/tenancy/UpdateTenant";
|
|
6
6
|
import { UpdateTenantUseCase as TenantManagerUpdateTenant } from "../UpdateTenant/abstractions.js";
|
|
7
7
|
import { GetTenantByIdUseCase } from "../GetTenantById/abstractions.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EnableTenantUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
2
2
|
import { Result } from "@webiny/feature/api";
|
|
3
3
|
import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
|
|
4
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
4
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
5
5
|
import { NotAuthorizedError } from "@webiny/api-core/features/security/shared/errors.js";
|
|
6
6
|
import { UpdateTenantUseCase as ApiCoreUpdateTenant } from "@webiny/api-core/features/tenancy/UpdateTenant";
|
|
7
7
|
import { UpdateTenantUseCase as TenantManagerUpdateTenant } from "../UpdateTenant/abstractions.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["EnableTenantUseCase","UseCaseAbstraction","Result","IdentityContext","EventPublisher","NotAuthorizedError","UpdateTenantUseCase","ApiCoreUpdateTenant","TenantManagerUpdateTenant","GetTenantByIdUseCase","TenantBeforeEnableEvent","TenantAfterEnableEvent","TenantPersistenceError","constructor","identityContext","eventPublisher","coreUpdateTenant","tmUpdateTenant","tmGetTenantById","execute","tenantId","getPermission","fail","message","getTenantResult","isFail","error","tenant","value","publish","apiCoreResult","status","Error","updatedTenantResult","ok","createImplementation","implementation","dependencies"],"sources":["EnableTenantUseCase.ts"],"sourcesContent":["import { EnableTenantUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { Result } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"@webiny/api-core/exports/api/security.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/
|
|
1
|
+
{"version":3,"names":["EnableTenantUseCase","UseCaseAbstraction","Result","IdentityContext","EventPublisher","NotAuthorizedError","UpdateTenantUseCase","ApiCoreUpdateTenant","TenantManagerUpdateTenant","GetTenantByIdUseCase","TenantBeforeEnableEvent","TenantAfterEnableEvent","TenantPersistenceError","constructor","identityContext","eventPublisher","coreUpdateTenant","tmUpdateTenant","tmGetTenantById","execute","tenantId","getPermission","fail","message","getTenantResult","isFail","error","tenant","value","publish","apiCoreResult","status","Error","updatedTenantResult","ok","createImplementation","implementation","dependencies"],"sources":["EnableTenantUseCase.ts"],"sourcesContent":["import { EnableTenantUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { Result } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"@webiny/api-core/exports/api/security.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/errors.js\";\nimport { UpdateTenantUseCase as ApiCoreUpdateTenant } from \"@webiny/api-core/features/tenancy/UpdateTenant\";\nimport { UpdateTenantUseCase as TenantManagerUpdateTenant } from \"../UpdateTenant/abstractions.js\";\nimport { GetTenantByIdUseCase } from \"../GetTenantById/abstractions.js\";\nimport { TenantBeforeEnableEvent, TenantAfterEnableEvent } from \"./events.js\";\nimport { TenantPersistenceError } from \"../../domain/errors.js\";\n\nclass EnableTenantUseCase implements UseCaseAbstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private eventPublisher: EventPublisher.Interface,\n private coreUpdateTenant: ApiCoreUpdateTenant.Interface,\n private tmUpdateTenant: TenantManagerUpdateTenant.Interface,\n private tmGetTenantById: GetTenantByIdUseCase.Interface\n ) {}\n\n async execute(tenantId: string): Promise<Result<void, UseCaseAbstraction.Error>> {\n // Authorization checks\n if (!this.identityContext.getPermission(\"tm.tenant\")) {\n return Result.fail(\n new NotAuthorizedError({ message: \"Not authorized to enable tenants.\" })\n );\n }\n\n // Get current tenant to verify it exists\n const getTenantResult = await this.tmGetTenantById.execute(tenantId);\n if (getTenantResult.isFail()) {\n return Result.fail(getTenantResult.error);\n }\n\n const tenant = getTenantResult.value;\n\n // Publish before event\n await this.eventPublisher.publish(new TenantBeforeEnableEvent({ tenant }));\n\n // Update api-core tenant first\n const apiCoreResult = await this.coreUpdateTenant.execute(tenantId, {\n status: \"enabled\"\n });\n\n if (apiCoreResult.isFail()) {\n return Result.fail(\n new TenantPersistenceError(\n new Error(`Failed to update api-core tenant: ${apiCoreResult.error}`)\n )\n );\n }\n\n // Update tenant-manager CMS entry\n const updatedTenantResult = await this.tmUpdateTenant.execute(tenantId, {\n status: \"enabled\"\n });\n\n if (updatedTenantResult.isFail()) {\n return Result.fail(updatedTenantResult.error);\n }\n\n // Publish after event\n await this.eventPublisher.publish(\n new TenantAfterEnableEvent({ tenant: updatedTenantResult.value })\n );\n\n return Result.ok();\n }\n}\n\nexport default UseCaseAbstraction.createImplementation({\n implementation: EnableTenantUseCase,\n dependencies: [\n IdentityContext,\n EventPublisher,\n ApiCoreUpdateTenant,\n TenantManagerUpdateTenant,\n GetTenantByIdUseCase\n ]\n});\n"],"mappings":"AAAA,SAASA,mBAAmB,IAAIC,kBAAkB;AAClD,SAASC,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,eAAe,QAAQ,0CAA0C;AAC1E,SAASC,cAAc,QAAQ,mDAAmD;AAClF,SAASC,kBAAkB,QAAQ,qDAAqD;AACxF,SAASC,mBAAmB,IAAIC,mBAAmB,QAAQ,gDAAgD;AAC3G,SAASD,mBAAmB,IAAIE,yBAAyB;AACzD,SAASC,oBAAoB;AAC7B,SAASC,uBAAuB,EAAEC,sBAAsB;AACxD,SAASC,sBAAsB;AAE/B,MAAMZ,mBAAmB,CAAyC;EAC9Da,WAAWA,CACCC,eAA0C,EAC1CC,cAAwC,EACxCC,gBAA+C,EAC/CC,cAAmD,EACnDC,eAA+C,EACzD;IAAA,KALUJ,eAA0C,GAA1CA,eAA0C;IAAA,KAC1CC,cAAwC,GAAxCA,cAAwC;IAAA,KACxCC,gBAA+C,GAA/CA,gBAA+C;IAAA,KAC/CC,cAAmD,GAAnDA,cAAmD;IAAA,KACnDC,eAA+C,GAA/CA,eAA+C;EACxD;EAEH,MAAMC,OAAOA,CAACC,QAAgB,EAAmD;IAC7E;IACA,IAAI,CAAC,IAAI,CAACN,eAAe,CAACO,aAAa,CAAC,WAAW,CAAC,EAAE;MAClD,OAAOnB,MAAM,CAACoB,IAAI,CACd,IAAIjB,kBAAkB,CAAC;QAAEkB,OAAO,EAAE;MAAoC,CAAC,CAC3E,CAAC;IACL;;IAEA;IACA,MAAMC,eAAe,GAAG,MAAM,IAAI,CAACN,eAAe,CAACC,OAAO,CAACC,QAAQ,CAAC;IACpE,IAAII,eAAe,CAACC,MAAM,CAAC,CAAC,EAAE;MAC1B,OAAOvB,MAAM,CAACoB,IAAI,CAACE,eAAe,CAACE,KAAK,CAAC;IAC7C;IAEA,MAAMC,MAAM,GAAGH,eAAe,CAACI,KAAK;;IAEpC;IACA,MAAM,IAAI,CAACb,cAAc,CAACc,OAAO,CAAC,IAAInB,uBAAuB,CAAC;MAAEiB;IAAO,CAAC,CAAC,CAAC;;IAE1E;IACA,MAAMG,aAAa,GAAG,MAAM,IAAI,CAACd,gBAAgB,CAACG,OAAO,CAACC,QAAQ,EAAE;MAChEW,MAAM,EAAE;IACZ,CAAC,CAAC;IAEF,IAAID,aAAa,CAACL,MAAM,CAAC,CAAC,EAAE;MACxB,OAAOvB,MAAM,CAACoB,IAAI,CACd,IAAIV,sBAAsB,CACtB,IAAIoB,KAAK,CAAC,qCAAqCF,aAAa,CAACJ,KAAK,EAAE,CACxE,CACJ,CAAC;IACL;;IAEA;IACA,MAAMO,mBAAmB,GAAG,MAAM,IAAI,CAAChB,cAAc,CAACE,OAAO,CAACC,QAAQ,EAAE;MACpEW,MAAM,EAAE;IACZ,CAAC,CAAC;IAEF,IAAIE,mBAAmB,CAACR,MAAM,CAAC,CAAC,EAAE;MAC9B,OAAOvB,MAAM,CAACoB,IAAI,CAACW,mBAAmB,CAACP,KAAK,CAAC;IACjD;;IAEA;IACA,MAAM,IAAI,CAACX,cAAc,CAACc,OAAO,CAC7B,IAAIlB,sBAAsB,CAAC;MAAEgB,MAAM,EAAEM,mBAAmB,CAACL;IAAM,CAAC,CACpE,CAAC;IAED,OAAO1B,MAAM,CAACgC,EAAE,CAAC,CAAC;EACtB;AACJ;AAEA,eAAejC,kBAAkB,CAACkC,oBAAoB,CAAC;EACnDC,cAAc,EAAEpC,mBAAmB;EACnCqC,YAAY,EAAE,CACVlC,eAAe,EACfC,cAAc,EACdG,mBAAmB,EACnBC,yBAAyB,EACzBC,oBAAoB;AAE5B,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DomainEvent } from "@webiny/api-core/features/
|
|
2
|
-
import type { IEventHandler } from "@webiny/api-core/features/
|
|
1
|
+
import { DomainEvent } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
2
|
+
import type { IEventHandler } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
3
3
|
import type { Tenant } from "../../../shared/Tenant.js";
|
|
4
4
|
export interface TenantBeforeEnablePayload {
|
|
5
5
|
tenant: Tenant;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createAbstraction } from "@webiny/feature/api";
|
|
2
|
-
import { DomainEvent } from "@webiny/api-core/features/
|
|
2
|
+
import { DomainEvent } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
3
3
|
export class TenantBeforeEnableEvent extends DomainEvent {
|
|
4
4
|
eventType = "tenant.beforeEnable";
|
|
5
5
|
getHandlerAbstraction() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","DomainEvent","TenantBeforeEnableEvent","eventType","getHandlerAbstraction","TenantBeforeEnableEventHandler","TenantAfterEnableEvent","TenantAfterEnableEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { DomainEvent } from \"@webiny/api-core/features/
|
|
1
|
+
{"version":3,"names":["createAbstraction","DomainEvent","TenantBeforeEnableEvent","eventType","getHandlerAbstraction","TenantBeforeEnableEventHandler","TenantAfterEnableEvent","TenantAfterEnableEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { DomainEvent } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport type { IEventHandler } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport type { Tenant } from \"~/shared/Tenant.js\";\n\nexport interface TenantBeforeEnablePayload {\n tenant: Tenant;\n}\n\nexport interface TenantAfterEnablePayload {\n tenant: Tenant;\n}\n\nexport class TenantBeforeEnableEvent extends DomainEvent<TenantBeforeEnablePayload> {\n eventType = \"tenant.beforeEnable\" as const;\n\n getHandlerAbstraction() {\n return TenantBeforeEnableEventHandler;\n }\n}\n\nexport const TenantBeforeEnableEventHandler = createAbstraction<\n IEventHandler<TenantBeforeEnableEvent>\n>(\"TenantManager/TenantBeforeEnableEventHandler\");\n\nexport namespace TenantBeforeEnableEventHandler {\n export type Interface = IEventHandler<TenantBeforeEnableEvent>;\n export type Event = TenantBeforeEnableEvent;\n}\n\nexport class TenantAfterEnableEvent extends DomainEvent<TenantAfterEnablePayload> {\n eventType = \"tenant.afterEnable\" as const;\n\n getHandlerAbstraction() {\n return TenantAfterEnableEventHandler;\n }\n}\n\nexport const TenantAfterEnableEventHandler = createAbstraction<\n IEventHandler<TenantAfterEnableEvent>\n>(\"TenantManager/TenantAfterEnableEventHandler\");\n\nexport namespace TenantAfterEnableEventHandler {\n export type Interface = IEventHandler<TenantAfterEnableEvent>;\n export type Event = TenantAfterEnableEvent;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,WAAW,QAAQ,mDAAmD;AAY/E,OAAO,MAAMC,uBAAuB,SAASD,WAAW,CAA4B;EAChFE,SAAS,GAAG,qBAAqB;EAEjCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOC,8BAA8B;EACzC;AACJ;AAEA,OAAO,MAAMA,8BAA8B,GAAGL,iBAAiB,CAE7D,8CAA8C,CAAC;AAOjD,OAAO,MAAMM,sBAAsB,SAASL,WAAW,CAA2B;EAC9EE,SAAS,GAAG,oBAAoB;EAEhCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOG,6BAA6B;EACxC;AACJ;AAEA,OAAO,MAAMA,6BAA6B,GAAGP,iBAAiB,CAE5D,6CAA6C,CAAC","ignoreList":[]}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { GraphQLSchemaFactory } from "@webiny/handler-graphql/graphql/abstractions.js";
|
|
2
|
-
import { PluginsContainer } from "@webiny/api-headless-cms/legacy/abstractions.js";
|
|
3
2
|
import { ListModelsUseCase } from "@webiny/api-headless-cms/exports/api/cms/model.js";
|
|
3
|
+
import { CmsModelFieldToGraphQLRegistry } from "@webiny/api-headless-cms/exports/api/cms/graphql.js";
|
|
4
|
+
import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
|
|
4
5
|
declare class CreateTenantSchema implements GraphQLSchemaFactory.Interface {
|
|
5
|
-
private
|
|
6
|
+
private identityContext;
|
|
6
7
|
private listModelsUseCase;
|
|
7
|
-
|
|
8
|
+
private readonly fieldRegistry;
|
|
9
|
+
constructor(identityContext: IdentityContext.Interface, listModelsUseCase: ListModelsUseCase.Interface, fieldRegistry: CmsModelFieldToGraphQLRegistry.Interface);
|
|
8
10
|
execute(builder: GraphQLSchemaFactory.SchemaBuilder): Promise<GraphQLSchemaFactory.SchemaBuilder>;
|
|
9
11
|
private getExtensionsInput;
|
|
10
12
|
}
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { GraphQLSchemaFactory } from "@webiny/handler-graphql/graphql/abstractions.js";
|
|
2
2
|
import { Response } from "@webiny/handler-graphql";
|
|
3
3
|
import { ErrorResponse } from "@webiny/handler-graphql";
|
|
4
|
-
import { PluginsContainer } from "@webiny/api-headless-cms/legacy/abstractions.js";
|
|
5
4
|
import { renderInputFields } from "@webiny/api-headless-cms/utils/renderInputFields.js";
|
|
6
5
|
import { CreateTenantUseCase } from "../features/CreateTenant/abstractions.js";
|
|
7
|
-
import { createFieldTypePluginRecords } from "@webiny/api-headless-cms/graphql/schema/createFieldTypePluginRecords.js";
|
|
8
6
|
import { ListModelsUseCase } from "@webiny/api-headless-cms/exports/api/cms/model.js";
|
|
9
7
|
import { TENANT_MODEL_ID } from "../../shared/constants.js";
|
|
8
|
+
import { CmsModelFieldToGraphQLRegistry } from "@webiny/api-headless-cms/exports/api/cms/graphql.js";
|
|
9
|
+
import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
|
|
10
10
|
class CreateTenantSchema {
|
|
11
|
-
constructor(
|
|
12
|
-
this.
|
|
11
|
+
constructor(identityContext, listModelsUseCase, fieldRegistry) {
|
|
12
|
+
this.identityContext = identityContext;
|
|
13
13
|
this.listModelsUseCase = listModelsUseCase;
|
|
14
|
+
this.fieldRegistry = fieldRegistry;
|
|
14
15
|
}
|
|
15
16
|
async execute(builder) {
|
|
16
17
|
const inputCreateFields = await this.getExtensionsInput();
|
|
@@ -22,7 +23,7 @@ class CreateTenantSchema {
|
|
|
22
23
|
name: String!
|
|
23
24
|
description: String
|
|
24
25
|
${inputCreateFields.map(f => f.fields).join("\n")}
|
|
25
|
-
}
|
|
26
|
+
}
|
|
26
27
|
`);
|
|
27
28
|
builder.addTypeDefs(/* GraphQL */`
|
|
28
29
|
extend type TenantManagerMutation {
|
|
@@ -47,10 +48,11 @@ class CreateTenantSchema {
|
|
|
47
48
|
return builder;
|
|
48
49
|
}
|
|
49
50
|
async getExtensionsInput() {
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
const modelsResult = await this.identityContext.withoutAuthorization(() => {
|
|
52
|
+
return this.listModelsUseCase.execute({
|
|
53
|
+
includePlugins: true,
|
|
54
|
+
includePrivate: false
|
|
55
|
+
});
|
|
54
56
|
});
|
|
55
57
|
if (modelsResult.isFail()) {
|
|
56
58
|
return [{
|
|
@@ -64,14 +66,14 @@ class CreateTenantSchema {
|
|
|
64
66
|
models,
|
|
65
67
|
model,
|
|
66
68
|
fields: model.fields.filter(f => f.fieldId === "extensions"),
|
|
67
|
-
|
|
69
|
+
fieldRegistry: this.fieldRegistry
|
|
68
70
|
});
|
|
69
71
|
return inputCreateFields;
|
|
70
72
|
}
|
|
71
73
|
}
|
|
72
74
|
export default GraphQLSchemaFactory.createImplementation({
|
|
73
75
|
implementation: CreateTenantSchema,
|
|
74
|
-
dependencies: [
|
|
76
|
+
dependencies: [IdentityContext, ListModelsUseCase, CmsModelFieldToGraphQLRegistry]
|
|
75
77
|
});
|
|
76
78
|
|
|
77
79
|
//# sourceMappingURL=CreateTenantSchema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["GraphQLSchemaFactory","Response","ErrorResponse","
|
|
1
|
+
{"version":3,"names":["GraphQLSchemaFactory","Response","ErrorResponse","renderInputFields","CreateTenantUseCase","ListModelsUseCase","TENANT_MODEL_ID","CmsModelFieldToGraphQLRegistry","IdentityContext","CreateTenantSchema","constructor","identityContext","listModelsUseCase","fieldRegistry","execute","builder","inputCreateFields","getExtensionsInput","addTypeDefs","map","f","typeDefs","join","fields","addResolver","path","dependencies","resolver","createTenant","args","result","input","isFail","error","modelsResult","withoutAuthorization","includePlugins","includePrivate","models","value","model","find","m","modelId","filter","fieldId","createImplementation","implementation"],"sources":["CreateTenantSchema.ts"],"sourcesContent":["import { GraphQLSchemaFactory } from \"@webiny/handler-graphql/graphql/abstractions.js\";\nimport { Response } from \"@webiny/handler-graphql\";\nimport { ErrorResponse } from \"@webiny/handler-graphql\";\nimport { renderInputFields } from \"@webiny/api-headless-cms/utils/renderInputFields.js\";\nimport { CreateTenantUseCase } from \"../features/CreateTenant/abstractions.js\";\nimport { ListModelsUseCase } from \"@webiny/api-headless-cms/exports/api/cms/model.js\";\nimport { TENANT_MODEL_ID } from \"~/shared/constants.js\";\nimport { CmsModelFieldToGraphQLRegistry } from \"@webiny/api-headless-cms/exports/api/cms/graphql.js\";\nimport { IdentityContext } from \"@webiny/api-core/exports/api/security.js\";\n\nclass CreateTenantSchema implements GraphQLSchemaFactory.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private listModelsUseCase: ListModelsUseCase.Interface,\n private readonly fieldRegistry: CmsModelFieldToGraphQLRegistry.Interface\n ) {}\n\n async execute(\n builder: GraphQLSchemaFactory.SchemaBuilder\n ): Promise<GraphQLSchemaFactory.SchemaBuilder> {\n const inputCreateFields = await this.getExtensionsInput();\n\n builder.addTypeDefs(/* GraphQL */ `\n ${inputCreateFields.map(f => f.typeDefs).join(\"\\n\")}\n\n input CreateTenantInput {\n id: ID\n name: String!\n description: String\n ${inputCreateFields.map(f => f.fields).join(\"\\n\")}\n }\n `);\n\n builder.addTypeDefs(/* GraphQL */ `\n extend type TenantManagerMutation {\n createTenant(input: CreateTenantInput!): BooleanResponse\n }\n `);\n\n builder.addResolver<{ input: CreateTenantUseCase.Input }>({\n path: \"TenantManagerMutation.createTenant\",\n dependencies: [CreateTenantUseCase],\n resolver: (createTenant: CreateTenantUseCase.Interface) => {\n return async ({ args }) => {\n const result = await createTenant.execute(args.input);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(true);\n };\n }\n });\n\n return builder;\n }\n\n private async getExtensionsInput() {\n const modelsResult = await this.identityContext.withoutAuthorization(() => {\n return this.listModelsUseCase.execute({\n includePlugins: true,\n includePrivate: false\n });\n });\n\n if (modelsResult.isFail()) {\n return [\n {\n typeDefs: \"\",\n fields: \"extensions: JSON\"\n }\n ];\n }\n\n const models = modelsResult.value;\n const model = models.find(m => m.modelId === TENANT_MODEL_ID)!;\n\n const inputCreateFields = renderInputFields({\n models,\n model,\n fields: model.fields.filter(f => f.fieldId === \"extensions\"),\n fieldRegistry: this.fieldRegistry\n });\n\n return inputCreateFields;\n }\n}\n\nexport default GraphQLSchemaFactory.createImplementation({\n implementation: CreateTenantSchema,\n dependencies: [IdentityContext, ListModelsUseCase, CmsModelFieldToGraphQLRegistry]\n});\n"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ,iDAAiD;AACtF,SAASC,QAAQ,QAAQ,yBAAyB;AAClD,SAASC,aAAa,QAAQ,yBAAyB;AACvD,SAASC,iBAAiB,QAAQ,qDAAqD;AACvF,SAASC,mBAAmB;AAC5B,SAASC,iBAAiB,QAAQ,mDAAmD;AACrF,SAASC,eAAe;AACxB,SAASC,8BAA8B,QAAQ,qDAAqD;AACpG,SAASC,eAAe,QAAQ,0CAA0C;AAE1E,MAAMC,kBAAkB,CAA2C;EAC/DC,WAAWA,CACCC,eAA0C,EAC1CC,iBAA8C,EACrCC,aAAuD,EAC1E;IAAA,KAHUF,eAA0C,GAA1CA,eAA0C;IAAA,KAC1CC,iBAA8C,GAA9CA,iBAA8C;IAAA,KACrCC,aAAuD,GAAvDA,aAAuD;EACzE;EAEH,MAAMC,OAAOA,CACTC,OAA2C,EACA;IAC3C,MAAMC,iBAAiB,GAAG,MAAM,IAAI,CAACC,kBAAkB,CAAC,CAAC;IAEzDF,OAAO,CAACG,WAAW,CAAC,aAAc;AAC1C,cAAcF,iBAAiB,CAACG,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACC,QAAQ,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;AAC/D;AACA;AACA;AACA;AACA;AACA,kBAAkBN,iBAAiB,CAACG,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACG,MAAM,CAAC,CAACD,IAAI,CAAC,IAAI,CAAC;AACjE;AACA,SAAS,CAAC;IAEFP,OAAO,CAACG,WAAW,CAAC,aAAc;AAC1C;AACA;AACA;AACA,SAAS,CAAC;IAEFH,OAAO,CAACS,WAAW,CAAuC;MACtDC,IAAI,EAAE,oCAAoC;MAC1CC,YAAY,EAAE,CAACtB,mBAAmB,CAAC;MACnCuB,QAAQ,EAAGC,YAA2C,IAAK;QACvD,OAAO,OAAO;UAAEC;QAAK,CAAC,KAAK;UACvB,MAAMC,MAAM,GAAG,MAAMF,YAAY,CAACd,OAAO,CAACe,IAAI,CAACE,KAAK,CAAC;UAErD,IAAID,MAAM,CAACE,MAAM,CAAC,CAAC,EAAE;YACjB,OAAO,IAAI9B,aAAa,CAAC4B,MAAM,CAACG,KAAK,CAAC;UAC1C;UAEA,OAAO,IAAIhC,QAAQ,CAAC,IAAI,CAAC;QAC7B,CAAC;MACL;IACJ,CAAC,CAAC;IAEF,OAAOc,OAAO;EAClB;EAEA,MAAcE,kBAAkBA,CAAA,EAAG;IAC/B,MAAMiB,YAAY,GAAG,MAAM,IAAI,CAACvB,eAAe,CAACwB,oBAAoB,CAAC,MAAM;MACvE,OAAO,IAAI,CAACvB,iBAAiB,CAACE,OAAO,CAAC;QAClCsB,cAAc,EAAE,IAAI;QACpBC,cAAc,EAAE;MACpB,CAAC,CAAC;IACN,CAAC,CAAC;IAEF,IAAIH,YAAY,CAACF,MAAM,CAAC,CAAC,EAAE;MACvB,OAAO,CACH;QACIX,QAAQ,EAAE,EAAE;QACZE,MAAM,EAAE;MACZ,CAAC,CACJ;IACL;IAEA,MAAMe,MAAM,GAAGJ,YAAY,CAACK,KAAK;IACjC,MAAMC,KAAK,GAAGF,MAAM,CAACG,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,OAAO,KAAKrC,eAAe,CAAE;IAE9D,MAAMU,iBAAiB,GAAGb,iBAAiB,CAAC;MACxCmC,MAAM;MACNE,KAAK;MACLjB,MAAM,EAAEiB,KAAK,CAACjB,MAAM,CAACqB,MAAM,CAACxB,CAAC,IAAIA,CAAC,CAACyB,OAAO,KAAK,YAAY,CAAC;MAC5DhC,aAAa,EAAE,IAAI,CAACA;IACxB,CAAC,CAAC;IAEF,OAAOG,iBAAiB;EAC5B;AACJ;AAEA,eAAehB,oBAAoB,CAAC8C,oBAAoB,CAAC;EACrDC,cAAc,EAAEtC,kBAAkB;EAClCiB,YAAY,EAAE,CAAClB,eAAe,EAAEH,iBAAiB,EAAEE,8BAA8B;AACrF,CAAC,CAAC","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/tenant-manager",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.2.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "index.js",
|
|
@@ -13,26 +13,26 @@
|
|
|
13
13
|
"license": "Webiny Enterprise",
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"@apollo/react-hooks": "3.1.5",
|
|
16
|
-
"@webiny/admin-ui": "6.
|
|
17
|
-
"@webiny/api-core": "6.
|
|
18
|
-
"@webiny/api-headless-cms": "6.
|
|
19
|
-
"@webiny/app": "6.
|
|
20
|
-
"@webiny/app-aco": "6.
|
|
21
|
-
"@webiny/app-admin": "6.
|
|
22
|
-
"@webiny/app-headless-cms": "6.
|
|
23
|
-
"@webiny/feature": "6.
|
|
24
|
-
"@webiny/handler-graphql": "6.
|
|
25
|
-
"@webiny/icons": "6.
|
|
26
|
-
"@webiny/project": "6.
|
|
27
|
-
"@webiny/project-aws": "6.
|
|
16
|
+
"@webiny/admin-ui": "6.2.0",
|
|
17
|
+
"@webiny/api-core": "6.2.0",
|
|
18
|
+
"@webiny/api-headless-cms": "6.2.0",
|
|
19
|
+
"@webiny/app": "6.2.0",
|
|
20
|
+
"@webiny/app-aco": "6.2.0",
|
|
21
|
+
"@webiny/app-admin": "6.2.0",
|
|
22
|
+
"@webiny/app-headless-cms": "6.2.0",
|
|
23
|
+
"@webiny/feature": "6.2.0",
|
|
24
|
+
"@webiny/handler-graphql": "6.2.0",
|
|
25
|
+
"@webiny/icons": "6.2.0",
|
|
26
|
+
"@webiny/project": "6.2.0",
|
|
27
|
+
"@webiny/project-aws": "6.2.0",
|
|
28
28
|
"graphql-tag": "2.12.6",
|
|
29
29
|
"mobx": "6.15.0",
|
|
30
30
|
"mobx-react-lite": "4.1.1",
|
|
31
|
-
"react": "18.
|
|
32
|
-
"react-dom": "18.
|
|
31
|
+
"react": "18.3.1",
|
|
32
|
+
"react-dom": "18.3.1"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@webiny/build-tools": "6.
|
|
35
|
+
"@webiny/build-tools": "6.2.0",
|
|
36
36
|
"rimraf": "6.1.3",
|
|
37
37
|
"typescript": "5.9.3"
|
|
38
38
|
},
|
|
@@ -40,5 +40,5 @@
|
|
|
40
40
|
"access": "public",
|
|
41
41
|
"directory": "dist"
|
|
42
42
|
},
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "3d3148358b6febbc857371930871743bec3b3939"
|
|
44
44
|
}
|