@decaf-ts/integrations 0.3.5 → 0.3.7
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/dist/integrations.cjs +1608 -7
- package/dist/integrations.js +1841 -5
- package/lib/cjs/graph/execution/SwitchGraphNodeExecutor.cjs +13 -5
- package/lib/cjs/graph/nodes/base.cjs +35 -0
- package/lib/cjs/graph/nodes/flow-control.cjs +31 -3
- package/lib/cjs/graph/nodes/index.cjs +3 -2
- package/lib/cjs/graph/types.cjs +2 -2
- package/lib/cjs/index.cjs +6 -5
- package/lib/cjs/namespaces/index.cjs +26 -0
- package/lib/cjs/namespaces/models/authorization-model.cjs +12 -0
- package/lib/cjs/namespaces/models/effective-permission.model.cjs +95 -0
- package/lib/cjs/namespaces/models/group-membership.model.cjs +66 -0
- package/lib/cjs/namespaces/models/group.model.cjs +74 -0
- package/lib/cjs/namespaces/models/index.cjs +39 -0
- package/lib/cjs/namespaces/models/inheritance-block.model.cjs +76 -0
- package/lib/cjs/namespaces/models/org-unit-closure.model.cjs +66 -0
- package/lib/cjs/namespaces/models/org-unit-membership.model.cjs +73 -0
- package/lib/cjs/namespaces/models/org-unit-profile.model.cjs +64 -0
- package/lib/cjs/namespaces/models/org-unit.model.cjs +102 -0
- package/lib/cjs/namespaces/models/permission.model.cjs +64 -0
- package/lib/cjs/namespaces/models/principal.model.cjs +77 -0
- package/lib/cjs/namespaces/models/protected-resource.model.cjs +99 -0
- package/lib/cjs/namespaces/models/resource-grant.model.cjs +88 -0
- package/lib/cjs/namespaces/models/role-assignment.model.cjs +98 -0
- package/lib/cjs/namespaces/models/role-permission.model.cjs +55 -0
- package/lib/cjs/namespaces/models/role.model.cjs +84 -0
- package/lib/cjs/namespaces/models/storage-binding.model.cjs +85 -0
- package/lib/cjs/namespaces/models/tenant-membership.model.cjs +67 -0
- package/lib/cjs/namespaces/models/tenant-profile.model.cjs +64 -0
- package/lib/cjs/namespaces/models/tenant.model.cjs +88 -0
- package/lib/cjs/namespaces/models/user.model.cjs +75 -0
- package/lib/cjs/namespaces/org-based-authorization-system.cjs +286 -0
- package/lib/cjs/namespaces/org-based-authorization-system.models.cjs +968 -0
- package/lib/cjs/namespaces/org-based-authorization-system.services.cjs +1046 -0
- package/lib/cjs/namespaces/services/authz.service.cjs +76 -0
- package/lib/cjs/namespaces/services/bootstrap.service.cjs +112 -0
- package/lib/cjs/namespaces/services/effective-permission.service.cjs +150 -0
- package/lib/cjs/namespaces/services/group-membership.service.cjs +42 -0
- package/lib/cjs/namespaces/services/group.service.cjs +30 -0
- package/lib/cjs/namespaces/services/index.cjs +42 -0
- package/lib/cjs/namespaces/services/inheritance-block.service.cjs +32 -0
- package/lib/cjs/namespaces/services/org-unit-closure.service.cjs +55 -0
- package/lib/cjs/namespaces/services/org-unit-membership.service.cjs +34 -0
- package/lib/cjs/namespaces/services/org-unit-profile.service.cjs +23 -0
- package/lib/cjs/namespaces/services/org-unit.service.cjs +160 -0
- package/lib/cjs/namespaces/services/permission.service.cjs +29 -0
- package/lib/cjs/namespaces/services/principal.service.cjs +35 -0
- package/lib/cjs/namespaces/services/protected-resource.service.cjs +43 -0
- package/lib/cjs/namespaces/services/resource-grant.service.cjs +45 -0
- package/lib/cjs/namespaces/services/resource-lifecycle.service.cjs +24 -0
- package/lib/cjs/namespaces/services/role-assignment.service.cjs +41 -0
- package/lib/cjs/namespaces/services/role-permission.service.cjs +51 -0
- package/lib/cjs/namespaces/services/role.service.cjs +45 -0
- package/lib/cjs/namespaces/services/storage-binding.service.cjs +39 -0
- package/lib/cjs/namespaces/services/system-management.service.cjs +102 -0
- package/lib/cjs/namespaces/services/tenant-membership.service.cjs +33 -0
- package/lib/cjs/namespaces/services/tenant-profile.service.cjs +28 -0
- package/lib/cjs/namespaces/services/tenant.service.cjs +36 -0
- package/lib/cjs/namespaces/services/user.service.cjs +32 -0
- package/lib/cjs/namespaces/types.cjs +67 -0
- package/lib/cjs/namespaces/utils.cjs +161 -0
- package/lib/cjs/nest/authService.cjs +5 -2
- package/lib/cjs/nest/graph/GraphExecutionController.cjs +153 -0
- package/lib/cjs/nest/graph/GraphExecutionModule.cjs +84 -0
- package/lib/cjs/nest/graph/GraphExecutionResultModel.cjs +82 -0
- package/lib/cjs/nest/graph/GraphExecutionResultRepository.cjs +66 -0
- package/lib/cjs/nest/graph/GraphExecutorRegistryFactory.cjs +35 -0
- package/lib/cjs/nest/graph/index.cjs +28 -0
- package/lib/cjs/nest/index.cjs +3 -2
- package/lib/esm/graph/execution/SwitchGraphNodeExecutor.js +12 -4
- package/lib/esm/graph/nodes/base.js +30 -0
- package/lib/esm/graph/nodes/flow-control.js +31 -3
- package/lib/esm/graph/nodes/index.js +2 -1
- package/lib/esm/graph/types.js +1 -1
- package/lib/esm/index.js +5 -4
- package/lib/esm/namespaces/index.js +9 -0
- package/lib/esm/namespaces/models/authorization-model.js +7 -0
- package/lib/esm/namespaces/models/effective-permission.model.js +86 -0
- package/lib/esm/namespaces/models/group-membership.model.js +57 -0
- package/lib/esm/namespaces/models/group.model.js +65 -0
- package/lib/esm/namespaces/models/index.js +22 -0
- package/lib/esm/namespaces/models/inheritance-block.model.js +67 -0
- package/lib/esm/namespaces/models/org-unit-closure.model.js +57 -0
- package/lib/esm/namespaces/models/org-unit-membership.model.js +64 -0
- package/lib/esm/namespaces/models/org-unit-profile.model.js +55 -0
- package/lib/esm/namespaces/models/org-unit.model.js +93 -0
- package/lib/esm/namespaces/models/permission.model.js +55 -0
- package/lib/esm/namespaces/models/principal.model.js +68 -0
- package/lib/esm/namespaces/models/protected-resource.model.js +90 -0
- package/lib/esm/namespaces/models/resource-grant.model.js +79 -0
- package/lib/esm/namespaces/models/role-assignment.model.js +89 -0
- package/lib/esm/namespaces/models/role-permission.model.js +46 -0
- package/lib/esm/namespaces/models/role.model.js +75 -0
- package/lib/esm/namespaces/models/storage-binding.model.js +76 -0
- package/lib/esm/namespaces/models/tenant-membership.model.js +58 -0
- package/lib/esm/namespaces/models/tenant-profile.model.js +55 -0
- package/lib/esm/namespaces/models/tenant.model.js +79 -0
- package/lib/esm/namespaces/models/user.model.js +66 -0
- package/lib/esm/namespaces/org-based-authorization-system.js +283 -0
- package/lib/esm/namespaces/org-based-authorization-system.models.js +958 -0
- package/lib/esm/namespaces/org-based-authorization-system.services.js +1014 -0
- package/lib/esm/namespaces/services/authz.service.js +71 -0
- package/lib/esm/namespaces/services/bootstrap.service.js +102 -0
- package/lib/esm/namespaces/services/effective-permission.service.js +140 -0
- package/lib/esm/namespaces/services/group-membership.service.js +37 -0
- package/lib/esm/namespaces/services/group.service.js +25 -0
- package/lib/esm/namespaces/services/index.js +25 -0
- package/lib/esm/namespaces/services/inheritance-block.service.js +27 -0
- package/lib/esm/namespaces/services/org-unit-closure.service.js +50 -0
- package/lib/esm/namespaces/services/org-unit-membership.service.js +29 -0
- package/lib/esm/namespaces/services/org-unit-profile.service.js +18 -0
- package/lib/esm/namespaces/services/org-unit.service.js +150 -0
- package/lib/esm/namespaces/services/permission.service.js +24 -0
- package/lib/esm/namespaces/services/principal.service.js +30 -0
- package/lib/esm/namespaces/services/protected-resource.service.js +38 -0
- package/lib/esm/namespaces/services/resource-grant.service.js +40 -0
- package/lib/esm/namespaces/services/resource-lifecycle.service.js +19 -0
- package/lib/esm/namespaces/services/role-assignment.service.js +36 -0
- package/lib/esm/namespaces/services/role-permission.service.js +46 -0
- package/lib/esm/namespaces/services/role.service.js +40 -0
- package/lib/esm/namespaces/services/storage-binding.service.js +34 -0
- package/lib/esm/namespaces/services/system-management.service.js +92 -0
- package/lib/esm/namespaces/services/tenant-membership.service.js +28 -0
- package/lib/esm/namespaces/services/tenant-profile.service.js +23 -0
- package/lib/esm/namespaces/services/tenant.service.js +31 -0
- package/lib/esm/namespaces/services/user.service.js +27 -0
- package/lib/esm/namespaces/types.js +71 -0
- package/lib/esm/namespaces/utils.js +143 -0
- package/lib/esm/nest/authService.js +4 -1
- package/lib/esm/nest/graph/GraphExecutionController.js +144 -0
- package/lib/esm/nest/graph/GraphExecutionModule.js +76 -0
- package/lib/esm/nest/graph/GraphExecutionResultModel.js +73 -0
- package/lib/esm/nest/graph/GraphExecutionResultRepository.js +60 -0
- package/lib/esm/nest/graph/GraphExecutorRegistryFactory.js +31 -0
- package/lib/esm/nest/graph/index.js +11 -0
- package/lib/esm/nest/index.js +2 -1
- package/lib/types/graph/nodes/base.d.cts +28 -0
- package/lib/types/graph/nodes/base.d.mts +28 -0
- package/lib/types/graph/nodes/flow-control.d.cts +9 -1
- package/lib/types/graph/nodes/flow-control.d.mts +9 -1
- package/lib/types/graph/nodes/index.d.cts +1 -0
- package/lib/types/graph/nodes/index.d.mts +1 -0
- package/lib/types/graph/types.d.cts +15 -1
- package/lib/types/graph/types.d.mts +15 -1
- package/lib/types/index.d.cts +3 -2
- package/lib/types/index.d.mts +3 -2
- package/lib/types/namespaces/index.d.cts +8 -0
- package/lib/types/namespaces/index.d.mts +8 -0
- package/lib/types/namespaces/models/authorization-model.d.cts +4 -0
- package/lib/types/namespaces/models/authorization-model.d.mts +4 -0
- package/lib/types/namespaces/models/effective-permission.model.d.cts +18 -0
- package/lib/types/namespaces/models/effective-permission.model.d.mts +18 -0
- package/lib/types/namespaces/models/group-membership.model.d.cts +13 -0
- package/lib/types/namespaces/models/group-membership.model.d.mts +13 -0
- package/lib/types/namespaces/models/group.model.d.cts +15 -0
- package/lib/types/namespaces/models/group.model.d.mts +15 -0
- package/lib/types/namespaces/models/index.d.cts +21 -0
- package/lib/types/namespaces/models/index.d.mts +21 -0
- package/lib/types/namespaces/models/inheritance-block.model.d.cts +15 -0
- package/lib/types/namespaces/models/inheritance-block.model.d.mts +15 -0
- package/lib/types/namespaces/models/org-unit-closure.model.d.cts +12 -0
- package/lib/types/namespaces/models/org-unit-closure.model.d.mts +12 -0
- package/lib/types/namespaces/models/org-unit-membership.model.d.cts +15 -0
- package/lib/types/namespaces/models/org-unit-membership.model.d.mts +15 -0
- package/lib/types/namespaces/models/org-unit-profile.model.d.cts +11 -0
- package/lib/types/namespaces/models/org-unit-profile.model.d.mts +11 -0
- package/lib/types/namespaces/models/org-unit.model.d.cts +23 -0
- package/lib/types/namespaces/models/org-unit.model.d.mts +23 -0
- package/lib/types/namespaces/models/permission.model.d.cts +11 -0
- package/lib/types/namespaces/models/permission.model.d.mts +11 -0
- package/lib/types/namespaces/models/principal.model.d.cts +16 -0
- package/lib/types/namespaces/models/principal.model.d.mts +16 -0
- package/lib/types/namespaces/models/protected-resource.model.d.cts +21 -0
- package/lib/types/namespaces/models/protected-resource.model.d.mts +21 -0
- package/lib/types/namespaces/models/resource-grant.model.d.cts +18 -0
- package/lib/types/namespaces/models/resource-grant.model.d.mts +18 -0
- package/lib/types/namespaces/models/role-assignment.model.d.cts +20 -0
- package/lib/types/namespaces/models/role-assignment.model.d.mts +20 -0
- package/lib/types/namespaces/models/role-permission.model.d.cts +10 -0
- package/lib/types/namespaces/models/role-permission.model.d.mts +10 -0
- package/lib/types/namespaces/models/role.model.d.cts +17 -0
- package/lib/types/namespaces/models/role.model.d.mts +17 -0
- package/lib/types/namespaces/models/storage-binding.model.d.cts +15 -0
- package/lib/types/namespaces/models/storage-binding.model.d.mts +15 -0
- package/lib/types/namespaces/models/tenant-membership.model.d.cts +13 -0
- package/lib/types/namespaces/models/tenant-membership.model.d.mts +13 -0
- package/lib/types/namespaces/models/tenant-profile.model.d.cts +11 -0
- package/lib/types/namespaces/models/tenant-profile.model.d.mts +11 -0
- package/lib/types/namespaces/models/tenant.model.d.cts +19 -0
- package/lib/types/namespaces/models/tenant.model.d.mts +19 -0
- package/lib/types/namespaces/models/user.model.d.cts +14 -0
- package/lib/types/namespaces/models/user.model.d.mts +14 -0
- package/lib/types/namespaces/org-based-authorization-system.d.cts +299 -0
- package/lib/types/namespaces/org-based-authorization-system.d.mts +299 -0
- package/lib/types/namespaces/org-based-authorization-system.models.d.cts +212 -0
- package/lib/types/namespaces/org-based-authorization-system.models.d.mts +212 -0
- package/lib/types/namespaces/org-based-authorization-system.services.d.cts +217 -0
- package/lib/types/namespaces/org-based-authorization-system.services.d.mts +217 -0
- package/lib/types/namespaces/services/authz.service.d.cts +10 -0
- package/lib/types/namespaces/services/authz.service.d.mts +10 -0
- package/lib/types/namespaces/services/bootstrap.service.d.cts +21 -0
- package/lib/types/namespaces/services/bootstrap.service.d.mts +21 -0
- package/lib/types/namespaces/services/effective-permission.service.d.cts +13 -0
- package/lib/types/namespaces/services/effective-permission.service.d.mts +13 -0
- package/lib/types/namespaces/services/group-membership.service.d.cts +10 -0
- package/lib/types/namespaces/services/group-membership.service.d.mts +10 -0
- package/lib/types/namespaces/services/group.service.d.cts +9 -0
- package/lib/types/namespaces/services/group.service.d.mts +9 -0
- package/lib/types/namespaces/services/index.d.cts +24 -0
- package/lib/types/namespaces/services/index.d.mts +24 -0
- package/lib/types/namespaces/services/inheritance-block.service.d.cts +10 -0
- package/lib/types/namespaces/services/inheritance-block.service.d.mts +10 -0
- package/lib/types/namespaces/services/org-unit-closure.service.d.cts +11 -0
- package/lib/types/namespaces/services/org-unit-closure.service.d.mts +11 -0
- package/lib/types/namespaces/services/org-unit-membership.service.d.cts +11 -0
- package/lib/types/namespaces/services/org-unit-membership.service.d.mts +11 -0
- package/lib/types/namespaces/services/org-unit-profile.service.d.cts +7 -0
- package/lib/types/namespaces/services/org-unit-profile.service.d.mts +7 -0
- package/lib/types/namespaces/services/org-unit.service.d.cts +18 -0
- package/lib/types/namespaces/services/org-unit.service.d.mts +18 -0
- package/lib/types/namespaces/services/permission.service.d.cts +10 -0
- package/lib/types/namespaces/services/permission.service.d.mts +10 -0
- package/lib/types/namespaces/services/principal.service.d.cts +11 -0
- package/lib/types/namespaces/services/principal.service.d.mts +11 -0
- package/lib/types/namespaces/services/protected-resource.service.d.cts +13 -0
- package/lib/types/namespaces/services/protected-resource.service.d.mts +13 -0
- package/lib/types/namespaces/services/resource-grant.service.d.cts +12 -0
- package/lib/types/namespaces/services/resource-grant.service.d.mts +12 -0
- package/lib/types/namespaces/services/resource-lifecycle.service.d.cts +10 -0
- package/lib/types/namespaces/services/resource-lifecycle.service.d.mts +10 -0
- package/lib/types/namespaces/services/role-assignment.service.d.cts +12 -0
- package/lib/types/namespaces/services/role-assignment.service.d.mts +12 -0
- package/lib/types/namespaces/services/role-permission.service.d.cts +12 -0
- package/lib/types/namespaces/services/role-permission.service.d.mts +12 -0
- package/lib/types/namespaces/services/role.service.d.cts +12 -0
- package/lib/types/namespaces/services/role.service.d.mts +12 -0
- package/lib/types/namespaces/services/storage-binding.service.d.cts +12 -0
- package/lib/types/namespaces/services/storage-binding.service.d.mts +12 -0
- package/lib/types/namespaces/services/system-management.service.d.cts +14 -0
- package/lib/types/namespaces/services/system-management.service.d.mts +14 -0
- package/lib/types/namespaces/services/tenant-membership.service.d.cts +11 -0
- package/lib/types/namespaces/services/tenant-membership.service.d.mts +11 -0
- package/lib/types/namespaces/services/tenant-profile.service.d.cts +8 -0
- package/lib/types/namespaces/services/tenant-profile.service.d.mts +8 -0
- package/lib/types/namespaces/services/tenant.service.d.cts +12 -0
- package/lib/types/namespaces/services/tenant.service.d.mts +12 -0
- package/lib/types/namespaces/services/user.service.d.cts +11 -0
- package/lib/types/namespaces/services/user.service.d.mts +11 -0
- package/lib/types/namespaces/types.d.cts +230 -0
- package/lib/types/namespaces/types.d.mts +230 -0
- package/lib/types/namespaces/utils.d.cts +68 -0
- package/lib/types/namespaces/utils.d.mts +68 -0
- package/lib/types/nest/authService.d.cts +1 -0
- package/lib/types/nest/authService.d.mts +1 -0
- package/lib/types/nest/graph/GraphExecutionController.d.cts +62 -0
- package/lib/types/nest/graph/GraphExecutionController.d.mts +62 -0
- package/lib/types/nest/graph/GraphExecutionModule.d.cts +39 -0
- package/lib/types/nest/graph/GraphExecutionModule.d.mts +39 -0
- package/lib/types/nest/graph/GraphExecutionResultModel.d.cts +46 -0
- package/lib/types/nest/graph/GraphExecutionResultModel.d.mts +46 -0
- package/lib/types/nest/graph/GraphExecutionResultRepository.d.cts +38 -0
- package/lib/types/nest/graph/GraphExecutionResultRepository.d.mts +38 -0
- package/lib/types/nest/graph/GraphExecutorRegistryFactory.d.cts +17 -0
- package/lib/types/nest/graph/GraphExecutorRegistryFactory.d.mts +17 -0
- package/lib/types/nest/graph/index.d.cts +10 -0
- package/lib/types/nest/graph/index.d.mts +10 -0
- package/lib/types/nest/index.d.cts +1 -0
- package/lib/types/nest/index.d.mts +1 -0
- package/package.json +16 -5
- package/sql/001_constraints.sql +11 -0
- package/sql/002_rls.sql +20 -0
- package/sql/003_indexes.sql +2 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { column, createdAt, manyToOne, pk, table, updatedAt, uuid } from "@decaf-ts/core";
|
|
11
|
+
import { model, option, required, type as typeOf } from "@decaf-ts/decorator-validation";
|
|
12
|
+
import { MembershipStatus, MembershipStatusOptions } from "./../types.js";
|
|
13
|
+
import { REL_CASCADE_DEPENDENT } from "./../utils.js";
|
|
14
|
+
import { AuthorizationModel } from "./authorization-model.js";
|
|
15
|
+
import { Tenant } from "./tenant.model";
|
|
16
|
+
import { User } from "./user.model";
|
|
17
|
+
let TenantMembership = class TenantMembership extends AuthorizationModel {
|
|
18
|
+
constructor(data) {
|
|
19
|
+
super(data);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
__decorate([
|
|
23
|
+
pk({ type: String }),
|
|
24
|
+
uuid(),
|
|
25
|
+
__metadata("design:type", String)
|
|
26
|
+
], TenantMembership.prototype, "id", void 0);
|
|
27
|
+
__decorate([
|
|
28
|
+
manyToOne(() => Tenant, REL_CASCADE_DEPENDENT, false, undefined, "fk_tenant_memberships_tenant"),
|
|
29
|
+
required(),
|
|
30
|
+
__metadata("design:type", Object)
|
|
31
|
+
], TenantMembership.prototype, "tenant", void 0);
|
|
32
|
+
__decorate([
|
|
33
|
+
manyToOne(() => User, REL_CASCADE_DEPENDENT, false, undefined, "fk_tenant_memberships_user"),
|
|
34
|
+
required(),
|
|
35
|
+
__metadata("design:type", Object)
|
|
36
|
+
], TenantMembership.prototype, "user", void 0);
|
|
37
|
+
__decorate([
|
|
38
|
+
required(),
|
|
39
|
+
typeOf(String),
|
|
40
|
+
option(MembershipStatusOptions),
|
|
41
|
+
column(),
|
|
42
|
+
__metadata("design:type", String)
|
|
43
|
+
], TenantMembership.prototype, "status", void 0);
|
|
44
|
+
__decorate([
|
|
45
|
+
createdAt(),
|
|
46
|
+
__metadata("design:type", Date)
|
|
47
|
+
], TenantMembership.prototype, "createdAt", void 0);
|
|
48
|
+
__decorate([
|
|
49
|
+
updatedAt(),
|
|
50
|
+
__metadata("design:type", Date)
|
|
51
|
+
], TenantMembership.prototype, "updatedAt", void 0);
|
|
52
|
+
TenantMembership = __decorate([
|
|
53
|
+
table("tenant_memberships"),
|
|
54
|
+
model(),
|
|
55
|
+
__metadata("design:paramtypes", [Object])
|
|
56
|
+
], TenantMembership);
|
|
57
|
+
export { TenantMembership };
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LW1lbWJlcnNoaXAubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmFtZXNwYWNlcy9tb2RlbHMvdGVuYW50LW1lbWJlcnNoaXAubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLHNCQUFpQjtBQUNyRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsc0JBQWlCO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxpQ0FBOEI7QUFDM0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFJN0IsSUFBTSxnQkFBZ0IsR0FBdEIsTUFBTSxnQkFBaUIsU0FBUSxrQkFBa0I7SUFDdEQsWUFBWSxJQUFjO1FBQ3hCLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNkLENBQUM7Q0FZRixDQUFBO0FBVitCO0lBQTdCLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUFFLElBQUksRUFBRTs7NENBQWE7QUFHMUM7SUFGQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsOEJBQThCLENBQUM7SUFDaEcsUUFBUSxFQUFFOztnREFDYztBQUd6QjtJQUZDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUscUJBQXFCLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSw0QkFBNEIsQ0FBQztJQUM1RixRQUFRLEVBQUU7OzhDQUNVO0FBQ2tEO0lBQXRFLFFBQVEsRUFBRTtJQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFBRSxNQUFNLENBQUMsdUJBQXVCLENBQUM7SUFBRSxNQUFNLEVBQUU7O2dEQUEyQjtBQUNwRjtJQUFaLFNBQVMsRUFBRTs4QkFBYSxJQUFJO21EQUFDO0FBQ2pCO0lBQVosU0FBUyxFQUFFOzhCQUFhLElBQUk7bURBQUM7QUFkbkIsZ0JBQWdCO0lBRjVCLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQztJQUMzQixLQUFLLEVBQUU7O0dBQ0ssZ0JBQWdCLENBZTVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29sdW1uLCBjcmVhdGVkQXQsIG1hbnlUb09uZSwgcGssIHRhYmxlLCB1cGRhdGVkQXQsIHV1aWQgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IG1vZGVsLCBvcHRpb24sIHJlcXVpcmVkLCB0eXBlIGFzIHR5cGVPZiB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IE1lbWJlcnNoaXBTdGF0dXMsIE1lbWJlcnNoaXBTdGF0dXNPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBSRUxfQ0FTQ0FERV9ERVBFTkRFTlQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IEF1dGhvcml6YXRpb25Nb2RlbCB9IGZyb20gXCIuL2F1dGhvcml6YXRpb24tbW9kZWxcIjtcbmltcG9ydCB7IFRlbmFudCB9IGZyb20gXCIuL3RlbmFudC5tb2RlbFwiO1xuaW1wb3J0IHsgVXNlciB9IGZyb20gXCIuL3VzZXIubW9kZWxcIjtcblxuQHRhYmxlKFwidGVuYW50X21lbWJlcnNoaXBzXCIpXG5AbW9kZWwoKVxuZXhwb3J0IGNsYXNzIFRlbmFudE1lbWJlcnNoaXAgZXh0ZW5kcyBBdXRob3JpemF0aW9uTW9kZWwge1xuICBjb25zdHJ1Y3RvcihkYXRhPzogdW5rbm93bikge1xuICAgIHN1cGVyKGRhdGEpO1xuICB9XG5cbiAgQHBrKHsgdHlwZTogU3RyaW5nIH0pIEB1dWlkKCkgaWQhOiBzdHJpbmc7XG4gIEBtYW55VG9PbmUoKCkgPT4gVGVuYW50LCBSRUxfQ0FTQ0FERV9ERVBFTkRFTlQsIGZhbHNlLCB1bmRlZmluZWQsIFwiZmtfdGVuYW50X21lbWJlcnNoaXBzX3RlbmFudFwiKVxuICBAcmVxdWlyZWQoKVxuICB0ZW5hbnQhOiBUZW5hbnQgfCBzdHJpbmc7XG4gIEBtYW55VG9PbmUoKCkgPT4gVXNlciwgUkVMX0NBU0NBREVfREVQRU5ERU5ULCBmYWxzZSwgdW5kZWZpbmVkLCBcImZrX3RlbmFudF9tZW1iZXJzaGlwc191c2VyXCIpXG4gIEByZXF1aXJlZCgpXG4gIHVzZXIhOiBVc2VyIHwgc3RyaW5nO1xuICBAcmVxdWlyZWQoKSBAdHlwZU9mKFN0cmluZykgQG9wdGlvbihNZW1iZXJzaGlwU3RhdHVzT3B0aW9ucykgQGNvbHVtbigpIHN0YXR1cyE6IE1lbWJlcnNoaXBTdGF0dXM7XG4gIEBjcmVhdGVkQXQoKSBjcmVhdGVkQXQhOiBEYXRlO1xuICBAdXBkYXRlZEF0KCkgdXBkYXRlZEF0ITogRGF0ZTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { column, createdAt, manyToOne, pk, table, updatedAt, uuid } from "@decaf-ts/core";
|
|
11
|
+
import { model, required, type as typeOf } from "@decaf-ts/decorator-validation";
|
|
12
|
+
import { REL_CASCADE_DEPENDENT } from "./../utils.js";
|
|
13
|
+
import { AuthorizationModel } from "./authorization-model.js";
|
|
14
|
+
import { Tenant } from "./tenant.model";
|
|
15
|
+
let TenantProfile = class TenantProfile extends AuthorizationModel {
|
|
16
|
+
constructor(data) {
|
|
17
|
+
super(data);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
__decorate([
|
|
21
|
+
pk({ type: String }),
|
|
22
|
+
uuid(),
|
|
23
|
+
__metadata("design:type", String)
|
|
24
|
+
], TenantProfile.prototype, "id", void 0);
|
|
25
|
+
__decorate([
|
|
26
|
+
manyToOne(() => Tenant, REL_CASCADE_DEPENDENT, false, undefined, "fk_tenant_profiles_tenant"),
|
|
27
|
+
required(),
|
|
28
|
+
__metadata("design:type", Object)
|
|
29
|
+
], TenantProfile.prototype, "tenant", void 0);
|
|
30
|
+
__decorate([
|
|
31
|
+
required(),
|
|
32
|
+
typeOf(String),
|
|
33
|
+
column(),
|
|
34
|
+
__metadata("design:type", String)
|
|
35
|
+
], TenantProfile.prototype, "profileKey", void 0);
|
|
36
|
+
__decorate([
|
|
37
|
+
typeOf(Object),
|
|
38
|
+
column(),
|
|
39
|
+
__metadata("design:type", Object)
|
|
40
|
+
], TenantProfile.prototype, "metadata", void 0);
|
|
41
|
+
__decorate([
|
|
42
|
+
createdAt(),
|
|
43
|
+
__metadata("design:type", Date)
|
|
44
|
+
], TenantProfile.prototype, "createdAt", void 0);
|
|
45
|
+
__decorate([
|
|
46
|
+
updatedAt(),
|
|
47
|
+
__metadata("design:type", Date)
|
|
48
|
+
], TenantProfile.prototype, "updatedAt", void 0);
|
|
49
|
+
TenantProfile = __decorate([
|
|
50
|
+
table("tenant_profiles"),
|
|
51
|
+
model(),
|
|
52
|
+
__metadata("design:paramtypes", [Object])
|
|
53
|
+
], TenantProfile);
|
|
54
|
+
export { TenantProfile };
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LXByb2ZpbGUubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmFtZXNwYWNlcy9tb2RlbHMvdGVuYW50LXByb2ZpbGUubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsc0JBQWlCO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxpQ0FBOEI7QUFDM0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSWpDLElBQU0sYUFBYSxHQUFuQixNQUFNLGFBQWMsU0FBUSxrQkFBa0I7SUFDbkQsWUFBWSxJQUFjO1FBQ3hCLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNkLENBQUM7Q0FVRixDQUFBO0FBUitCO0lBQTdCLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUFFLElBQUksRUFBRTs7eUNBQWE7QUFHMUM7SUFGQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsMkJBQTJCLENBQUM7SUFDN0YsUUFBUSxFQUFFOzs2Q0FDYztBQUNhO0lBQXJDLFFBQVEsRUFBRTtJQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFBRSxNQUFNLEVBQUU7O2lEQUFxQjtBQUNoQztJQUF6QixNQUFNLENBQUMsTUFBTSxDQUFDO0lBQUUsTUFBTSxFQUFFOzsrQ0FBb0M7QUFDaEQ7SUFBWixTQUFTLEVBQUU7OEJBQWEsSUFBSTtnREFBQztBQUNqQjtJQUFaLFNBQVMsRUFBRTs4QkFBYSxJQUFJO2dEQUFDO0FBWm5CLGFBQWE7SUFGekIsS0FBSyxDQUFDLGlCQUFpQixDQUFDO0lBQ3hCLEtBQUssRUFBRTs7R0FDSyxhQUFhLENBYXpCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29sdW1uLCBjcmVhdGVkQXQsIG1hbnlUb09uZSwgcGssIHRhYmxlLCB1cGRhdGVkQXQsIHV1aWQgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IG1vZGVsLCByZXF1aXJlZCwgdHlwZSBhcyB0eXBlT2YgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBSRUxfQ0FTQ0FERV9ERVBFTkRFTlQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IEF1dGhvcml6YXRpb25Nb2RlbCB9IGZyb20gXCIuL2F1dGhvcml6YXRpb24tbW9kZWxcIjtcbmltcG9ydCB7IFRlbmFudCB9IGZyb20gXCIuL3RlbmFudC5tb2RlbFwiO1xuXG5AdGFibGUoXCJ0ZW5hbnRfcHJvZmlsZXNcIilcbkBtb2RlbCgpXG5leHBvcnQgY2xhc3MgVGVuYW50UHJvZmlsZSBleHRlbmRzIEF1dGhvcml6YXRpb25Nb2RlbCB7XG4gIGNvbnN0cnVjdG9yKGRhdGE/OiB1bmtub3duKSB7XG4gICAgc3VwZXIoZGF0YSk7XG4gIH1cblxuICBAcGsoeyB0eXBlOiBTdHJpbmcgfSkgQHV1aWQoKSBpZCE6IHN0cmluZztcbiAgQG1hbnlUb09uZSgoKSA9PiBUZW5hbnQsIFJFTF9DQVNDQURFX0RFUEVOREVOVCwgZmFsc2UsIHVuZGVmaW5lZCwgXCJma190ZW5hbnRfcHJvZmlsZXNfdGVuYW50XCIpXG4gIEByZXF1aXJlZCgpXG4gIHRlbmFudCE6IFRlbmFudCB8IHN0cmluZztcbiAgQHJlcXVpcmVkKCkgQHR5cGVPZihTdHJpbmcpIEBjb2x1bW4oKSBwcm9maWxlS2V5ITogc3RyaW5nO1xuICBAdHlwZU9mKE9iamVjdCkgQGNvbHVtbigpIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIEBjcmVhdGVkQXQoKSBjcmVhdGVkQXQhOiBEYXRlO1xuICBAdXBkYXRlZEF0KCkgdXBkYXRlZEF0ITogRGF0ZTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { column, createdAt, oneToMany, pk, table, unique, updatedAt, uuid } from "@decaf-ts/core";
|
|
11
|
+
import { model, option, required, type as typeOf } from "@decaf-ts/decorator-validation";
|
|
12
|
+
import { IsolationTier, IsolationTierOptions } from "./../types.js";
|
|
13
|
+
import { REL_RESTRICT } from "./../utils.js";
|
|
14
|
+
import { AuthorizationModel } from "./authorization-model.js";
|
|
15
|
+
import { OrgUnit } from "./org-unit.model";
|
|
16
|
+
import { TenantMembership } from "./tenant-membership.model";
|
|
17
|
+
import { Principal } from "./principal.model";
|
|
18
|
+
import { StorageBinding } from "./storage-binding.model";
|
|
19
|
+
let Tenant = class Tenant extends AuthorizationModel {
|
|
20
|
+
constructor(data) {
|
|
21
|
+
super(data);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
__decorate([
|
|
25
|
+
pk({ type: String }),
|
|
26
|
+
uuid(),
|
|
27
|
+
__metadata("design:type", String)
|
|
28
|
+
], Tenant.prototype, "id", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
unique(),
|
|
31
|
+
required(),
|
|
32
|
+
typeOf(String),
|
|
33
|
+
column(),
|
|
34
|
+
__metadata("design:type", String)
|
|
35
|
+
], Tenant.prototype, "slug", void 0);
|
|
36
|
+
__decorate([
|
|
37
|
+
required(),
|
|
38
|
+
typeOf(String),
|
|
39
|
+
column(),
|
|
40
|
+
__metadata("design:type", String)
|
|
41
|
+
], Tenant.prototype, "name", void 0);
|
|
42
|
+
__decorate([
|
|
43
|
+
required(),
|
|
44
|
+
typeOf(String),
|
|
45
|
+
option(IsolationTierOptions),
|
|
46
|
+
column(),
|
|
47
|
+
__metadata("design:type", String)
|
|
48
|
+
], Tenant.prototype, "isolationTier", void 0);
|
|
49
|
+
__decorate([
|
|
50
|
+
oneToMany(() => OrgUnit, REL_RESTRICT, false),
|
|
51
|
+
__metadata("design:type", Array)
|
|
52
|
+
], Tenant.prototype, "orgUnits", void 0);
|
|
53
|
+
__decorate([
|
|
54
|
+
oneToMany(() => TenantMembership, REL_RESTRICT, false),
|
|
55
|
+
__metadata("design:type", Array)
|
|
56
|
+
], Tenant.prototype, "memberships", void 0);
|
|
57
|
+
__decorate([
|
|
58
|
+
oneToMany(() => Principal, REL_RESTRICT, false),
|
|
59
|
+
__metadata("design:type", Array)
|
|
60
|
+
], Tenant.prototype, "principals", void 0);
|
|
61
|
+
__decorate([
|
|
62
|
+
oneToMany(() => StorageBinding, REL_RESTRICT, false),
|
|
63
|
+
__metadata("design:type", Array)
|
|
64
|
+
], Tenant.prototype, "storageBindings", void 0);
|
|
65
|
+
__decorate([
|
|
66
|
+
createdAt(),
|
|
67
|
+
__metadata("design:type", Date)
|
|
68
|
+
], Tenant.prototype, "createdAt", void 0);
|
|
69
|
+
__decorate([
|
|
70
|
+
updatedAt(),
|
|
71
|
+
__metadata("design:type", Date)
|
|
72
|
+
], Tenant.prototype, "updatedAt", void 0);
|
|
73
|
+
Tenant = __decorate([
|
|
74
|
+
table("tenants"),
|
|
75
|
+
model(),
|
|
76
|
+
__metadata("design:paramtypes", [Object])
|
|
77
|
+
], Tenant);
|
|
78
|
+
export { Tenant };
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25hbWVzcGFjZXMvbW9kZWxzL3RlbmFudC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBYSxTQUFTLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdHLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekYsT0FBTyxFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxzQkFBaUI7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxzQkFBaUI7QUFDeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlDQUE4QjtBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUlsRCxJQUFNLE1BQU0sR0FBWixNQUFNLE1BQU8sU0FBUSxrQkFBa0I7SUFDNUMsWUFBWSxJQUFjO1FBQ3hCLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNkLENBQUM7Q0FZRixDQUFBO0FBVitCO0lBQTdCLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUFFLElBQUksRUFBRTs7a0NBQWE7QUFDTTtJQUEvQyxNQUFNLEVBQUU7SUFBRSxRQUFRLEVBQUU7SUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQUUsTUFBTSxFQUFFOztvQ0FBZTtBQUN4QjtJQUFyQyxRQUFRLEVBQUU7SUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQUUsTUFBTSxFQUFFOztvQ0FBZTtBQUNnQjtJQUFuRSxRQUFRLEVBQUU7SUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQUUsTUFBTSxDQUFDLG9CQUFvQixDQUFDO0lBQUUsTUFBTSxFQUFFOzs2Q0FBK0I7QUFDbkQ7SUFBOUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDOzt3Q0FBaUM7QUFDdkI7SUFBdkQsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixFQUFFLFlBQVksRUFBRSxLQUFLLENBQUM7OzJDQUE2QztBQUNuRDtJQUFoRCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUM7OzBDQUFxQztBQUMvQjtJQUFyRCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUM7OytDQUErQztBQUN2RjtJQUFaLFNBQVMsRUFBRTs4QkFBYSxJQUFJO3lDQUFDO0FBQ2pCO0lBQVosU0FBUyxFQUFFOzhCQUFhLElBQUk7eUNBQUM7QUFkbkIsTUFBTTtJQUZsQixLQUFLLENBQUMsU0FBUyxDQUFDO0lBQ2hCLEtBQUssRUFBRTs7R0FDSyxNQUFNLENBZWxCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29sdW1uLCBjcmVhdGVkQXQsIG1hbnlUb09uZSwgb25lVG9NYW55LCBwaywgdGFibGUsIHVuaXF1ZSwgdXBkYXRlZEF0LCB1dWlkIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBtb2RlbCwgb3B0aW9uLCByZXF1aXJlZCwgdHlwZSBhcyB0eXBlT2YgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBJc29sYXRpb25UaWVyLCBJc29sYXRpb25UaWVyT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgUkVMX1JFU1RSSUNUIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBBdXRob3JpemF0aW9uTW9kZWwgfSBmcm9tIFwiLi9hdXRob3JpemF0aW9uLW1vZGVsXCI7XG5pbXBvcnQgeyBPcmdVbml0IH0gZnJvbSBcIi4vb3JnLXVuaXQubW9kZWxcIjtcbmltcG9ydCB7IFRlbmFudE1lbWJlcnNoaXAgfSBmcm9tIFwiLi90ZW5hbnQtbWVtYmVyc2hpcC5tb2RlbFwiO1xuaW1wb3J0IHsgUHJpbmNpcGFsIH0gZnJvbSBcIi4vcHJpbmNpcGFsLm1vZGVsXCI7XG5pbXBvcnQgeyBTdG9yYWdlQmluZGluZyB9IGZyb20gXCIuL3N0b3JhZ2UtYmluZGluZy5tb2RlbFwiO1xuXG5AdGFibGUoXCJ0ZW5hbnRzXCIpXG5AbW9kZWwoKVxuZXhwb3J0IGNsYXNzIFRlbmFudCBleHRlbmRzIEF1dGhvcml6YXRpb25Nb2RlbCB7XG4gIGNvbnN0cnVjdG9yKGRhdGE/OiB1bmtub3duKSB7XG4gICAgc3VwZXIoZGF0YSk7XG4gIH1cblxuICBAcGsoeyB0eXBlOiBTdHJpbmcgfSkgQHV1aWQoKSBpZCE6IHN0cmluZztcbiAgQHVuaXF1ZSgpIEByZXF1aXJlZCgpIEB0eXBlT2YoU3RyaW5nKSBAY29sdW1uKCkgc2x1ZyE6IHN0cmluZztcbiAgQHJlcXVpcmVkKCkgQHR5cGVPZihTdHJpbmcpIEBjb2x1bW4oKSBuYW1lITogc3RyaW5nO1xuICBAcmVxdWlyZWQoKSBAdHlwZU9mKFN0cmluZykgQG9wdGlvbihJc29sYXRpb25UaWVyT3B0aW9ucykgQGNvbHVtbigpIGlzb2xhdGlvblRpZXIhOiBJc29sYXRpb25UaWVyO1xuICBAb25lVG9NYW55KCgpID0+IE9yZ1VuaXQsIFJFTF9SRVNUUklDVCwgZmFsc2UpIG9yZ1VuaXRzPzogT3JnVW5pdFtdIHwgc3RyaW5nW107XG4gIEBvbmVUb01hbnkoKCkgPT4gVGVuYW50TWVtYmVyc2hpcCwgUkVMX1JFU1RSSUNULCBmYWxzZSkgbWVtYmVyc2hpcHM/OiBUZW5hbnRNZW1iZXJzaGlwW10gfCBzdHJpbmdbXTtcbiAgQG9uZVRvTWFueSgoKSA9PiBQcmluY2lwYWwsIFJFTF9SRVNUUklDVCwgZmFsc2UpIHByaW5jaXBhbHM/OiBQcmluY2lwYWxbXSB8IHN0cmluZ1tdO1xuICBAb25lVG9NYW55KCgpID0+IFN0b3JhZ2VCaW5kaW5nLCBSRUxfUkVTVFJJQ1QsIGZhbHNlKSBzdG9yYWdlQmluZGluZ3M/OiBTdG9yYWdlQmluZGluZ1tdIHwgc3RyaW5nW107XG4gIEBjcmVhdGVkQXQoKSBjcmVhdGVkQXQhOiBEYXRlO1xuICBAdXBkYXRlZEF0KCkgdXBkYXRlZEF0ITogRGF0ZTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { column, createdAt, oneToMany, pk, table, unique, updatedAt, uuid, } from "@decaf-ts/core";
|
|
11
|
+
import { model, required, type } from "@decaf-ts/decorator-validation";
|
|
12
|
+
import { REL_RESTRICT } from "./../utils.js";
|
|
13
|
+
import { AuthorizationModel } from "./authorization-model.js";
|
|
14
|
+
import { TenantMembership } from "./tenant-membership.model";
|
|
15
|
+
import { OrgUnitMembership } from "./org-unit-membership.model";
|
|
16
|
+
let User = class User extends AuthorizationModel {
|
|
17
|
+
constructor(data) {
|
|
18
|
+
super(data);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
__decorate([
|
|
22
|
+
pk({ type: String }),
|
|
23
|
+
uuid(),
|
|
24
|
+
__metadata("design:type", String)
|
|
25
|
+
], User.prototype, "id", void 0);
|
|
26
|
+
__decorate([
|
|
27
|
+
unique(),
|
|
28
|
+
type(String),
|
|
29
|
+
column(),
|
|
30
|
+
__metadata("design:type", String)
|
|
31
|
+
], User.prototype, "email", void 0);
|
|
32
|
+
__decorate([
|
|
33
|
+
unique(),
|
|
34
|
+
type(String),
|
|
35
|
+
column(),
|
|
36
|
+
__metadata("design:type", String)
|
|
37
|
+
], User.prototype, "phone", void 0);
|
|
38
|
+
__decorate([
|
|
39
|
+
required(),
|
|
40
|
+
type(String),
|
|
41
|
+
column(),
|
|
42
|
+
__metadata("design:type", String)
|
|
43
|
+
], User.prototype, "displayName", void 0);
|
|
44
|
+
__decorate([
|
|
45
|
+
oneToMany(() => TenantMembership, REL_RESTRICT, false),
|
|
46
|
+
__metadata("design:type", Array)
|
|
47
|
+
], User.prototype, "tenantMemberships", void 0);
|
|
48
|
+
__decorate([
|
|
49
|
+
oneToMany(() => OrgUnitMembership, REL_RESTRICT, false),
|
|
50
|
+
__metadata("design:type", Array)
|
|
51
|
+
], User.prototype, "orgUnitMemberships", void 0);
|
|
52
|
+
__decorate([
|
|
53
|
+
createdAt(),
|
|
54
|
+
__metadata("design:type", Date)
|
|
55
|
+
], User.prototype, "createdAt", void 0);
|
|
56
|
+
__decorate([
|
|
57
|
+
updatedAt(),
|
|
58
|
+
__metadata("design:type", Date)
|
|
59
|
+
], User.prototype, "updatedAt", void 0);
|
|
60
|
+
User = __decorate([
|
|
61
|
+
table("users"),
|
|
62
|
+
model(),
|
|
63
|
+
__metadata("design:paramtypes", [Object])
|
|
64
|
+
], User);
|
|
65
|
+
export { User };
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uYW1lc3BhY2VzL21vZGVscy91c2VyLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxFQUFFLEVBQ0YsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsSUFBSSxHQUNMLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxzQkFBaUI7QUFDeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlDQUE4QjtBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUl6RCxJQUFNLElBQUksR0FBVixNQUFNLElBQUssU0FBUSxrQkFBa0I7SUFnQzFDLFlBQVksSUFBYztRQUN4QixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDZCxDQUFDO0NBQ0YsQ0FBQTtBQWhDQztJQUZDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUNwQixJQUFJLEVBQUU7O2dDQUNLO0FBS1o7SUFIQyxNQUFNLEVBQUU7SUFDUixJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ1osTUFBTSxFQUFFOzttQ0FDTTtBQUtmO0lBSEMsTUFBTSxFQUFFO0lBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNaLE1BQU0sRUFBRTs7bUNBQ007QUFLZjtJQUhDLFFBQVEsRUFBRTtJQUNWLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDWixNQUFNLEVBQUU7O3lDQUNZO0FBR3JCO0lBREMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixFQUFFLFlBQVksRUFBRSxLQUFLLENBQUM7OytDQUNMO0FBR2xEO0lBREMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixFQUFFLFlBQVksRUFBRSxLQUFLLENBQUM7O2dEQUNKO0FBR3BEO0lBREMsU0FBUyxFQUFFOzhCQUNBLElBQUk7dUNBQUM7QUFHakI7SUFEQyxTQUFTLEVBQUU7OEJBQ0EsSUFBSTt1Q0FBQztBQTlCTixJQUFJO0lBRmhCLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDZCxLQUFLLEVBQUU7O0dBQ0ssSUFBSSxDQW1DaEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjb2x1bW4sXG4gIGNyZWF0ZWRBdCxcbiAgb25lVG9NYW55LFxuICBwayxcbiAgdGFibGUsXG4gIHVuaXF1ZSxcbiAgdXBkYXRlZEF0LFxuICB1dWlkLFxufSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IG1vZGVsLCByZXF1aXJlZCwgdHlwZSB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IFJFTF9SRVNUUklDVCB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgQXV0aG9yaXphdGlvbk1vZGVsIH0gZnJvbSBcIi4vYXV0aG9yaXphdGlvbi1tb2RlbFwiO1xuaW1wb3J0IHsgVGVuYW50TWVtYmVyc2hpcCB9IGZyb20gXCIuL3RlbmFudC1tZW1iZXJzaGlwLm1vZGVsXCI7XG5pbXBvcnQgeyBPcmdVbml0TWVtYmVyc2hpcCB9IGZyb20gXCIuL29yZy11bml0LW1lbWJlcnNoaXAubW9kZWxcIjtcblxuQHRhYmxlKFwidXNlcnNcIilcbkBtb2RlbCgpXG5leHBvcnQgY2xhc3MgVXNlciBleHRlbmRzIEF1dGhvcml6YXRpb25Nb2RlbCB7XG4gIEBwayh7IHR5cGU6IFN0cmluZyB9KVxuICBAdXVpZCgpXG4gIGlkITogc3RyaW5nO1xuXG4gIEB1bmlxdWUoKVxuICBAdHlwZShTdHJpbmcpXG4gIEBjb2x1bW4oKVxuICBlbWFpbD86IHN0cmluZztcblxuICBAdW5pcXVlKClcbiAgQHR5cGUoU3RyaW5nKVxuICBAY29sdW1uKClcbiAgcGhvbmU/OiBzdHJpbmc7XG5cbiAgQHJlcXVpcmVkKClcbiAgQHR5cGUoU3RyaW5nKVxuICBAY29sdW1uKClcbiAgZGlzcGxheU5hbWUhOiBzdHJpbmc7XG5cbiAgQG9uZVRvTWFueSgoKSA9PiBUZW5hbnRNZW1iZXJzaGlwLCBSRUxfUkVTVFJJQ1QsIGZhbHNlKVxuICB0ZW5hbnRNZW1iZXJzaGlwcz86IFRlbmFudE1lbWJlcnNoaXBbXSB8IHN0cmluZ1tdO1xuXG4gIEBvbmVUb01hbnkoKCkgPT4gT3JnVW5pdE1lbWJlcnNoaXAsIFJFTF9SRVNUUklDVCwgZmFsc2UpXG4gIG9yZ1VuaXRNZW1iZXJzaGlwcz86IE9yZ1VuaXRNZW1iZXJzaGlwW10gfCBzdHJpbmdbXTtcblxuICBAY3JlYXRlZEF0KClcbiAgY3JlYXRlZEF0ITogRGF0ZTtcblxuICBAdXBkYXRlZEF0KClcbiAgdXBkYXRlZEF0ITogRGF0ZTtcblxuICBjb25zdHJ1Y3RvcihkYXRhPzogdW5rbm93bikge1xuICAgIHN1cGVyKGRhdGEpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import { AuthorizationError, Cascade, ModelService, transactional } from "@decaf-ts/core";
|
|
2
|
+
export var IsolationTier;
|
|
3
|
+
(function (IsolationTier) {
|
|
4
|
+
IsolationTier["Pooled"] = "pooled";
|
|
5
|
+
IsolationTier["Bridge"] = "bridge";
|
|
6
|
+
IsolationTier["Silo"] = "silo";
|
|
7
|
+
})(IsolationTier || (IsolationTier = {}));
|
|
8
|
+
export var MembershipStatus;
|
|
9
|
+
(function (MembershipStatus) {
|
|
10
|
+
MembershipStatus["Invited"] = "invited";
|
|
11
|
+
MembershipStatus["Active"] = "active";
|
|
12
|
+
MembershipStatus["Suspended"] = "suspended";
|
|
13
|
+
MembershipStatus["Removed"] = "removed";
|
|
14
|
+
})(MembershipStatus || (MembershipStatus = {}));
|
|
15
|
+
export var PrincipalKind;
|
|
16
|
+
(function (PrincipalKind) {
|
|
17
|
+
PrincipalKind["User"] = "user";
|
|
18
|
+
PrincipalKind["Group"] = "group";
|
|
19
|
+
PrincipalKind["ServiceAccount"] = "service_account";
|
|
20
|
+
PrincipalKind["Agent"] = "agent";
|
|
21
|
+
PrincipalKind["ApiKey"] = "api_key";
|
|
22
|
+
})(PrincipalKind || (PrincipalKind = {}));
|
|
23
|
+
export var ScopeKind;
|
|
24
|
+
(function (ScopeKind) {
|
|
25
|
+
ScopeKind["Tenant"] = "tenant";
|
|
26
|
+
ScopeKind["OrgUnit"] = "org_unit";
|
|
27
|
+
ScopeKind["Resource"] = "resource";
|
|
28
|
+
})(ScopeKind || (ScopeKind = {}));
|
|
29
|
+
export var PermissionCategory;
|
|
30
|
+
(function (PermissionCategory) {
|
|
31
|
+
PermissionCategory["Admin"] = "admin";
|
|
32
|
+
PermissionCategory["ContentRead"] = "content_read";
|
|
33
|
+
PermissionCategory["ContentWrite"] = "content_write";
|
|
34
|
+
PermissionCategory["Memory"] = "memory";
|
|
35
|
+
PermissionCategory["Graph"] = "graph";
|
|
36
|
+
PermissionCategory["Vector"] = "vector";
|
|
37
|
+
PermissionCategory["Export"] = "export";
|
|
38
|
+
PermissionCategory["Billing"] = "billing";
|
|
39
|
+
PermissionCategory["Audit"] = "audit";
|
|
40
|
+
PermissionCategory["Security"] = "security";
|
|
41
|
+
PermissionCategory["Data"] = "data";
|
|
42
|
+
PermissionCategory["Automation"] = "automation";
|
|
43
|
+
})(PermissionCategory || (PermissionCategory = {}));
|
|
44
|
+
export var ResourceVisibility;
|
|
45
|
+
(function (ResourceVisibility) {
|
|
46
|
+
ResourceVisibility["Private"] = "private";
|
|
47
|
+
ResourceVisibility["ResourceAcl"] = "resource_acl";
|
|
48
|
+
ResourceVisibility["OrgUnit"] = "org_unit";
|
|
49
|
+
ResourceVisibility["OrgSubtree"] = "org_subtree";
|
|
50
|
+
ResourceVisibility["Tenant"] = "tenant";
|
|
51
|
+
})(ResourceVisibility || (ResourceVisibility = {}));
|
|
52
|
+
export var StorageKind;
|
|
53
|
+
(function (StorageKind) {
|
|
54
|
+
StorageKind["Postgres"] = "postgres";
|
|
55
|
+
StorageKind["Arango"] = "arango";
|
|
56
|
+
StorageKind["Qdrant"] = "qdrant";
|
|
57
|
+
StorageKind["ObjectStorage"] = "object_storage";
|
|
58
|
+
})(StorageKind || (StorageKind = {}));
|
|
59
|
+
export var StorageBindingKind;
|
|
60
|
+
(function (StorageBindingKind) {
|
|
61
|
+
StorageBindingKind["Shared"] = "shared";
|
|
62
|
+
StorageBindingKind["Dedicated"] = "dedicated";
|
|
63
|
+
})(StorageBindingKind || (StorageBindingKind = {}));
|
|
64
|
+
export const IsolationTierOptions = Object.values(IsolationTier);
|
|
65
|
+
export const MembershipStatusOptions = Object.values(MembershipStatus);
|
|
66
|
+
export const PrincipalKindOptions = Object.values(PrincipalKind);
|
|
67
|
+
export const ScopeKindOptions = Object.values(ScopeKind);
|
|
68
|
+
export const PermissionCategoryOptions = Object.values(PermissionCategory);
|
|
69
|
+
export const ResourceVisibilityOptions = Object.values(ResourceVisibility);
|
|
70
|
+
export const StorageKindOptions = Object.values(StorageKind);
|
|
71
|
+
export const StorageBindingKindOptions = Object.values(StorageBindingKind);
|
|
72
|
+
export const REL_RESTRICT = {
|
|
73
|
+
update: Cascade.NONE,
|
|
74
|
+
delete: Cascade.NONE,
|
|
75
|
+
nullable: false,
|
|
76
|
+
};
|
|
77
|
+
export const REL_NULLIFY = {
|
|
78
|
+
update: Cascade.NONE,
|
|
79
|
+
delete: Cascade.NONE,
|
|
80
|
+
nullable: true,
|
|
81
|
+
};
|
|
82
|
+
export const REL_CASCADE_DEPENDENT = {
|
|
83
|
+
update: Cascade.CASCADE,
|
|
84
|
+
delete: Cascade.CASCADE,
|
|
85
|
+
nullable: false,
|
|
86
|
+
};
|
|
87
|
+
export const REL_CASCADE_INSERT_UPDATE = {
|
|
88
|
+
update: Cascade.CASCADE,
|
|
89
|
+
delete: Cascade.NONE,
|
|
90
|
+
nullable: false,
|
|
91
|
+
};
|
|
92
|
+
function isTimeValid(at, startsAt, expiresAt) {
|
|
93
|
+
const instant = at ?? new Date();
|
|
94
|
+
if (startsAt && instant < startsAt)
|
|
95
|
+
return false;
|
|
96
|
+
if (expiresAt && instant > expiresAt)
|
|
97
|
+
return false;
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
function scopeKey(scopeKind, scopeId) {
|
|
101
|
+
return `${scopeKind}:${scopeId}`;
|
|
102
|
+
}
|
|
103
|
+
function toArray(value) {
|
|
104
|
+
return value ?? [];
|
|
105
|
+
}
|
|
106
|
+
export function buildArangoContext(options) {
|
|
107
|
+
return {
|
|
108
|
+
tenantId: options.tenantId,
|
|
109
|
+
principalId: options.principalId,
|
|
110
|
+
permissionKey: options.permissionKey,
|
|
111
|
+
allowedOrgUnitIds: [...options.allowedOrgUnitIds],
|
|
112
|
+
allowedResourceIds: [...options.allowedResourceIds],
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
export function buildQdrantFilter(options) {
|
|
116
|
+
return {
|
|
117
|
+
must: [
|
|
118
|
+
{
|
|
119
|
+
key: "tenant_id",
|
|
120
|
+
match: { value: options.tenantId },
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
should: [
|
|
124
|
+
{ key: "org_unit_id", match: { any: options.allowedOrgUnitIds } },
|
|
125
|
+
{
|
|
126
|
+
key: "protected_resource_id",
|
|
127
|
+
match: { any: options.allowedResourceIds },
|
|
128
|
+
},
|
|
129
|
+
{ key: "owner_principal_id", match: { value: options.principalId } },
|
|
130
|
+
],
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
export function buildAccessContext(options) {
|
|
136
|
+
const permissionsByScope = {};
|
|
137
|
+
const allowedOrgUnitIdsByPermission = {};
|
|
138
|
+
for (const permission of options.permissions) {
|
|
139
|
+
const key = scopeKey(permission.scopeKind, permission.scopeId);
|
|
140
|
+
permissionsByScope[key] = permissionsByScope[key] ?? [];
|
|
141
|
+
permissionsByScope[key].push(permission.permissionKey);
|
|
142
|
+
if (permission.scopeKind === ScopeKind.OrgUnit) {
|
|
143
|
+
allowedOrgUnitIdsByPermission[permission.permissionKey] =
|
|
144
|
+
allowedOrgUnitIdsByPermission[permission.permissionKey] ?? [];
|
|
145
|
+
allowedOrgUnitIdsByPermission[permission.permissionKey].push(permission.scopeId);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
tenantId: options.tenantId,
|
|
150
|
+
principalId: options.principalId,
|
|
151
|
+
permissionsByScope,
|
|
152
|
+
allowedOrgUnitIdsByPermission,
|
|
153
|
+
resourceGrants: options.grants.map((grant) => ({
|
|
154
|
+
resourceId: grant.resourceId,
|
|
155
|
+
permissionKey: grant.permissionKey,
|
|
156
|
+
})),
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
export class BaseModelService extends ModelService {
|
|
160
|
+
constructor(clazz) {
|
|
161
|
+
super(clazz);
|
|
162
|
+
}
|
|
163
|
+
newModel(clazz, data) {
|
|
164
|
+
return Object.assign(new clazz(), data);
|
|
165
|
+
}
|
|
166
|
+
async createOne(data, ...args) {
|
|
167
|
+
return this.repo.create(Object.assign({}, data), ...args);
|
|
168
|
+
}
|
|
169
|
+
async getById(id, ...args) {
|
|
170
|
+
return this.repo.read(id, ...args);
|
|
171
|
+
}
|
|
172
|
+
async updateOne(id, patch, ...args) {
|
|
173
|
+
const existing = await this.repo.read(id, ...args);
|
|
174
|
+
return this.repo.update(Object.assign(existing, patch), ...args);
|
|
175
|
+
}
|
|
176
|
+
async deleteById(id, ...args) {
|
|
177
|
+
await this.repo.delete(id, ...args);
|
|
178
|
+
}
|
|
179
|
+
async findOneBy(key, value, ...args) {
|
|
180
|
+
return this.repo.findOneBy(key, value, ...args);
|
|
181
|
+
}
|
|
182
|
+
async findManyBy(key, value, ...args) {
|
|
183
|
+
return this.repo.select().where({ [key]: value }).execute(...args);
|
|
184
|
+
}
|
|
185
|
+
async listAll(...args) {
|
|
186
|
+
return this.repo.select().execute(...args);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
export function id() {
|
|
190
|
+
return crypto.randomUUID();
|
|
191
|
+
}
|
|
192
|
+
export function relationId(value) {
|
|
193
|
+
return typeof value === "string" ? value : value.id;
|
|
194
|
+
}
|
|
195
|
+
export class AuthzService {
|
|
196
|
+
constructor(dataSources = {}) {
|
|
197
|
+
this.dataSources = dataSources;
|
|
198
|
+
}
|
|
199
|
+
async canAccess(input, ...args) {
|
|
200
|
+
const at = input.at ?? new Date();
|
|
201
|
+
if (input.scopeKind && input.scopeId) {
|
|
202
|
+
const permissions = await this.dataSources.listEffectivePermissionsForScope?.(input.tenantId, input.scopeKind, input.scopeId);
|
|
203
|
+
return toArray(permissions).some((permission) => permission.permissionKey === input.permissionKey &&
|
|
204
|
+
isTimeValid(at, permission.startsAt, permission.expiresAt));
|
|
205
|
+
}
|
|
206
|
+
if (!input.resourceProtectedId)
|
|
207
|
+
return false;
|
|
208
|
+
const resource = await this.dataSources.loadResource?.(input.tenantId, input.resourceProtectedId);
|
|
209
|
+
if (!resource)
|
|
210
|
+
return false;
|
|
211
|
+
if (resource.tenantId !== input.tenantId)
|
|
212
|
+
return false;
|
|
213
|
+
if (resource.ownerPrincipalId === input.principalId)
|
|
214
|
+
return true;
|
|
215
|
+
const grants = toArray(await this.dataSources.listResourceGrants?.(input.tenantId, input.resourceProtectedId)).filter((grant) => grant.principalId === input.principalId &&
|
|
216
|
+
grant.permissionKey === input.permissionKey &&
|
|
217
|
+
isTimeValid(at, grant.startsAt, grant.expiresAt));
|
|
218
|
+
if (grants.length > 0)
|
|
219
|
+
return true;
|
|
220
|
+
const visibility = resource.visibility;
|
|
221
|
+
if (visibility === ResourceVisibility.Private ||
|
|
222
|
+
visibility === ResourceVisibility.ResourceAcl) {
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
if (visibility === ResourceVisibility.OrgUnit ||
|
|
226
|
+
visibility === ResourceVisibility.OrgSubtree) {
|
|
227
|
+
const effectivePermissions = toArray(await this.dataSources.listEffectivePermissionsForScope?.(input.tenantId, ScopeKind.OrgUnit, resource.orgUnitId));
|
|
228
|
+
return effectivePermissions.some((permission) => permission.permissionKey === input.permissionKey &&
|
|
229
|
+
isTimeValid(at, permission.startsAt, permission.expiresAt));
|
|
230
|
+
}
|
|
231
|
+
if (visibility === ResourceVisibility.Tenant) {
|
|
232
|
+
const effectivePermissions = toArray(await this.dataSources.listEffectivePermissionsForScope?.(input.tenantId, ScopeKind.Tenant, input.tenantId));
|
|
233
|
+
return effectivePermissions.some((permission) => permission.permissionKey === input.permissionKey &&
|
|
234
|
+
isTimeValid(at, permission.startsAt, permission.expiresAt));
|
|
235
|
+
}
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
async requireAccess(input, ...args) {
|
|
239
|
+
if (!(await this.canAccess(input, ...args))) {
|
|
240
|
+
throw new AuthorizationError(`Access denied for ${input.permissionKey} on ${input.resourceProtectedId ?? scopeKey(input.scopeKind ?? ScopeKind.Resource, input.scopeId ?? "")}`);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
async buildAccessContext(tenantId, principalId, ...args) {
|
|
244
|
+
const permissions = toArray(await this.dataSources.listEffectivePermissions?.(tenantId, principalId));
|
|
245
|
+
const grants = toArray(await this.dataSources.listPrincipalGrants?.(tenantId, principalId));
|
|
246
|
+
return buildAccessContext({
|
|
247
|
+
tenantId,
|
|
248
|
+
principalId,
|
|
249
|
+
permissions,
|
|
250
|
+
grants,
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
async buildArangoContext(tenantId, principalId, permissionKey, ...args) {
|
|
254
|
+
const access = await this.buildAccessContext(tenantId, principalId, ...args);
|
|
255
|
+
const allowedOrgUnitIds = access.allowedOrgUnitIdsByPermission[permissionKey] ?? [];
|
|
256
|
+
const allowedResourceIds = access.resourceGrants
|
|
257
|
+
.filter((grant) => grant.permissionKey === permissionKey)
|
|
258
|
+
.map((grant) => grant.resourceId);
|
|
259
|
+
return buildArangoContext({
|
|
260
|
+
tenantId,
|
|
261
|
+
principalId,
|
|
262
|
+
permissionKey,
|
|
263
|
+
allowedOrgUnitIds,
|
|
264
|
+
allowedResourceIds,
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
async buildQdrantFilter(tenantId, principalId, permissionKey, ...args) {
|
|
268
|
+
const access = await this.buildAccessContext(tenantId, principalId, ...args);
|
|
269
|
+
const allowedOrgUnitIds = access.allowedOrgUnitIdsByPermission[permissionKey] ?? [];
|
|
270
|
+
const allowedResourceIds = access.resourceGrants
|
|
271
|
+
.filter((grant) => grant.permissionKey === permissionKey)
|
|
272
|
+
.map((grant) => grant.resourceId);
|
|
273
|
+
return buildQdrantFilter({
|
|
274
|
+
tenantId,
|
|
275
|
+
principalId,
|
|
276
|
+
permissionKey,
|
|
277
|
+
allowedOrgUnitIds,
|
|
278
|
+
allowedResourceIds,
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
export { transactional };
|
|
283
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWJhc2VkLWF1dGhvcml6YXRpb24tc3lzdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25hbWVzcGFjZXMvb3JnLWJhc2VkLWF1dGhvcml6YXRpb24tc3lzdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFjLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3RHLE1BQU0sQ0FBTixJQUFZLGFBSVg7QUFKRCxXQUFZLGFBQWE7SUFDdkIsa0NBQWlCLENBQUE7SUFDakIsa0NBQWlCLENBQUE7SUFDakIsOEJBQWEsQ0FBQTtBQUNmLENBQUMsRUFKVyxhQUFhLEtBQWIsYUFBYSxRQUl4QjtBQUVELE1BQU0sQ0FBTixJQUFZLGdCQUtYO0FBTEQsV0FBWSxnQkFBZ0I7SUFDMUIsdUNBQW1CLENBQUE7SUFDbkIscUNBQWlCLENBQUE7SUFDakIsMkNBQXVCLENBQUE7SUFDdkIsdUNBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUxXLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFLM0I7QUFFRCxNQUFNLENBQU4sSUFBWSxhQU1YO0FBTkQsV0FBWSxhQUFhO0lBQ3ZCLDhCQUFhLENBQUE7SUFDYixnQ0FBZSxDQUFBO0lBQ2YsbURBQWtDLENBQUE7SUFDbEMsZ0NBQWUsQ0FBQTtJQUNmLG1DQUFrQixDQUFBO0FBQ3BCLENBQUMsRUFOVyxhQUFhLEtBQWIsYUFBYSxRQU14QjtBQUVELE1BQU0sQ0FBTixJQUFZLFNBSVg7QUFKRCxXQUFZLFNBQVM7SUFDbkIsOEJBQWlCLENBQUE7SUFDakIsaUNBQW9CLENBQUE7SUFDcEIsa0NBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQUpXLFNBQVMsS0FBVCxTQUFTLFFBSXBCO0FBRUQsTUFBTSxDQUFOLElBQVksa0JBYVg7QUFiRCxXQUFZLGtCQUFrQjtJQUM1QixxQ0FBZSxDQUFBO0lBQ2Ysa0RBQTRCLENBQUE7SUFD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S0FBSyxDQUFDLGFBQWEsS0FBSyxhQUFhLENBQUM7YUFDeEQsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEMsT0FBTyxpQkFBaUIsQ0FBQztZQUN2QixRQUFRO1lBQ1IsV0FBVztZQUNYLGFBQWE7WUFDYixpQkFBaUI7WUFDakIsa0JBQWtCO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQUVELE9BQU8sRUFBRSxhQUFhLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF1dGhvcml6YXRpb25FcnJvciwgQ2FzY2FkZSwgTW9kZWxTZXJ2aWNlLCBSZXBvc2l0b3J5LCB0cmFuc2FjdGlvbmFsIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcblxuZXhwb3J0IGVudW0gSXNvbGF0aW9uVGllciB7XG4gIFBvb2xlZCA9IFwicG9vbGVkXCIsXG4gIEJyaWRnZSA9IFwiYnJpZGdlXCIsXG4gIFNpbG8gPSBcInNpbG9cIixcbn1cblxuZXhwb3J0IGVudW0gTWVtYmVyc2hpcFN0YXR1cyB7XG4gIEludml0ZWQgPSBcImludml0ZWRcIixcbiAgQWN0aXZlID0gXCJhY3RpdmVcIixcbiAgU3VzcGVuZGVkID0gXCJzdXNwZW5kZWRcIixcbiAgUmVtb3ZlZCA9IFwicmVtb3ZlZFwiLFxufVxuXG5leHBvcnQgZW51bSBQcmluY2lwYWxLaW5kIHtcbiAgVXNlciA9IFwidXNlclwiLFxuICBHcm91cCA9IFwiZ3JvdXBcIixcbiAgU2VydmljZUFjY291bnQgPSBcInNlcnZpY2VfYWNjb3VudFwiLFxuICBBZ2VudCA9IFwiYWdlbnRcIixcbiAgQXBpS2V5ID0gXCJhcGlfa2V5XCIsXG59XG5cbmV4cG9ydCBlbnVtIFNjb3BlS2luZCB7XG4gIFRlbmFudCA9IFwidGVuYW50XCIsXG4gIE9yZ1VuaXQgPSBcIm9yZ191bml0XCIsXG4gIFJlc291cmNlID0gXCJyZXNvdXJjZVwiLFxufVxuXG5leHBvcnQgZW51bSBQZXJtaXNzaW9uQ2F0ZWdvcnkge1xuICBBZG1pbiA9IFwiYWRtaW5cIixcbiAgQ29udGVudFJlYWQgPSBcImNvbnRlbnRfcmVhZFwiLFxuICBDb250ZW50V3JpdGUgPSBcImNvbnRlbnRfd3JpdGVcIixcbiAgTWVtb3J5ID0gXCJtZW1vcnlcIixcbiAgR3JhcGggPSBcImdyYXBoXCIsXG4gIFZlY3RvciA9IFwidmVjdG9yXCIsXG4gIEV4cG9ydCA9IFwiZXhwb3J0XCIsXG4gIEJpbGxpbmcgPSBcImJpbGxpbmdcIixcbiAgQXVkaXQgPSBcImF1ZGl0XCIsXG4gIFNlY3VyaXR5ID0gXCJzZWN1cml0eVwiLFxuICBEYXRhID0gXCJkYXRhXCIsXG4gIEF1dG9tYXRpb24gPSBcImF1dG9tYXRpb25cIixcbn1cblxuZXhwb3J0IGVudW0gUmVzb3VyY2VWaXNpYmlsaXR5IHtcbiAgUHJpdmF0ZSA9IFwicHJpdmF0ZVwiLFxuICBSZXNvdXJjZUFjbCA9IFwicmVzb3VyY2VfYWNsXCIsXG4gIE9yZ1VuaXQgPSBcIm9yZ191bml0XCIsXG4gIE9yZ1N1YnRyZWUgPSBcIm9yZ19zdWJ0cmVlXCIsXG4gIFRlbmFudCA9IFwidGVuYW50XCIsXG59XG5cbmV4cG9ydCBlbnVtIFN0b3JhZ2VLaW5kIHtcbiAgUG9zdGdyZXMgPSBcInBvc3RncmVzXCIsXG4gIEFyYW5nbyA9IFwiYXJhbmdvXCIsXG4gIFFkcmFudCA9IFwicWRyYW50XCIsXG4gIE9iamVjdFN0b3JhZ2UgPSBcIm9iamVjdF9zdG9yYWdlXCIsXG59XG5cbmV4cG9ydCBlbnVtIFN0b3JhZ2VCaW5kaW5nS2luZCB7XG4gIFNoYXJlZCA9IFwic2hhcmVkXCIsXG4gIERlZGljYXRlZCA9IFwiZGVkaWNhdGVkXCIsXG59XG5cbmV4cG9ydCBjb25zdCBJc29sYXRpb25UaWVyT3B0aW9ucyA9IE9iamVjdC52YWx1ZXMoSXNvbGF0aW9uVGllcik7XG5leHBvcnQgY29uc3QgTWVtYmVyc2hpcFN0YXR1c09wdGlvbnMgPSBPYmplY3QudmFsdWVzKE1lbWJlcnNoaXBTdGF0dXMpO1xuZXhwb3J0IGNvbnN0IFByaW5jaXBhbEtpbmRPcHRpb25zID0gT2JqZWN0LnZhbHVlcyhQcmluY2lwYWxLaW5kKTtcbmV4cG9ydCBjb25zdCBTY29wZUtpbmRPcHRpb25zID0gT2JqZWN0LnZhbHVlcyhTY29wZUtpbmQpO1xuZXhwb3J0IGNvbnN0IFBlcm1pc3Npb25DYXRlZ29yeU9wdGlvbnMgPSBPYmplY3QudmFsdWVzKFBlcm1pc3Npb25DYXRlZ29yeSk7XG5leHBvcnQgY29uc3QgUmVzb3VyY2VWaXNpYmlsaXR5T3B0aW9ucyA9IE9iamVjdC52YWx1ZXMoUmVzb3VyY2VWaXNpYmlsaXR5KTtcbmV4cG9ydCBjb25zdCBTdG9yYWdlS2luZE9wdGlvbnMgPSBPYmplY3QudmFsdWVzKFN0b3JhZ2VLaW5kKTtcbmV4cG9ydCBjb25zdCBTdG9yYWdlQmluZGluZ0tpbmRPcHRpb25zID0gT2JqZWN0LnZhbHVlcyhTdG9yYWdlQmluZGluZ0tpbmQpO1xuXG5leHBvcnQgY29uc3QgUkVMX1JFU1RSSUNUID0ge1xuICB1cGRhdGU6IENhc2NhZGUuTk9ORSxcbiAgZGVsZXRlOiBDYXNjYWRlLk5PTkUsXG4gIG51bGxhYmxlOiBmYWxzZSxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBSRUxfTlVMTElGWSA9IHtcbiAgdXBkYXRlOiBDYXNjYWRlLk5PTkUsXG4gIGRlbGV0ZTogQ2FzY2FkZS5OT05FLFxuICBudWxsYWJsZTogdHJ1ZSxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBSRUxfQ0FTQ0FERV9ERVBFTkRFTlQgPSB7XG4gIHVwZGF0ZTogQ2FzY2FkZS5DQVNDQURFLFxuICBkZWxldGU6IENhc2NhZGUuQ0FTQ0FERSxcbiAgbnVsbGFibGU6IGZhbHNlLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IFJFTF9DQVNDQURFX0lOU0VSVF9VUERBVEUgPSB7XG4gIHVwZGF0ZTogQ2FzY2FkZS5DQVNDQURFLFxuICBkZWxldGU6IENhc2NhZGUuTk9ORSxcbiAgbnVsbGFibGU6IGZhbHNlLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgVHhBcmdzID0gYW55W107XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlVGVuYW50SW5wdXQge1xuICBzbHVnOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgaXNvbGF0aW9uVGllcj86IElzb2xhdGlvblRpZXI7XG4gIHByb2ZpbGVLZXk/OiBzdHJpbmc7XG4gIHByb2ZpbGVNZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVVzZXJJbnB1dCB7XG4gIGVtYWlsPzogc3RyaW5nO1xuICBwaG9uZT86IHN0cmluZztcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVPcmdVbml0SW5wdXQge1xuICB0ZW5hbnRJZDogc3RyaW5nO1xuICBwYXJlbnRPcmdVbml0SWQ/OiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcHJvZmlsZUtleT86IHN0cmluZztcbiAgcHJvZmlsZU1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlUm9sZUlucHV0IHtcbiAgdGVuYW50SWQ/OiBzdHJpbmc7XG4gIGtleTogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVBlcm1pc3Npb25JbnB1dCB7XG4gIGtleTogc3RyaW5nO1xuICBjYXRlZ29yeTogUGVybWlzc2lvbkNhdGVnb3J5O1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBc3NpZ25Sb2xlSW5wdXQge1xuICB0ZW5hbnRJZDogc3RyaW5nO1xuICBwcmluY2lwYWxJZDogc3RyaW5nO1xuICByb2xlSWQ6IHN0cmluZztcbiAgc2NvcGVLaW5kOiBTY29wZUtpbmQ7XG4gIHNjb3BlSWQ6IHN0cmluZztcbiAgaW5oZXJpdERvd24/OiBib29sZWFuO1xuICBzdGFydHNBdD86IERhdGU7XG4gIGV4cGlyZXNBdD86IERhdGU7XG4gIGNvbmRpdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlclJlc291cmNlSW5wdXQge1xuICB0ZW5hbnRJZDogc3RyaW5nO1xuICBvcmdVbml0SWQ6IHN0cmluZztcbiAgcmVzb3VyY2VUeXBlOiBzdHJpbmc7XG4gIHJlc291cmNlSWQ6IHN0cmluZztcbiAgdmlzaWJpbGl0eTogUmVzb3VyY2VWaXNpYmlsaXR5O1xuICBvd25lclByaW5jaXBhbElkPzogc3RyaW5nO1xuICBzZW5zaXRpdml0eT86IHN0cmluZztcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcmFudFJlc291cmNlSW5wdXQge1xuICB0ZW5hbnRJZDogc3RyaW5nO1xuICByZXNvdXJjZUlkOiBzdHJpbmc7XG4gIHByaW5jaXBhbElkOiBzdHJpbmc7XG4gIHBlcm1pc3Npb25LZXk6IHN0cmluZztcbiAgc3RhcnRzQXQ/OiBEYXRlO1xuICBleHBpcmVzQXQ/OiBEYXRlO1xuICBjb25kaXRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNyZWF0ZWRCeVByaW5jaXBhbElkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbkFjY2Vzc0lucHV0IHtcbiAgdGVuYW50SWQ6IHN0cmluZztcbiAgcHJpbmNpcGFsSWQ6IHN0cmluZztcbiAgcGVybWlzc2lvbktleTogc3RyaW5nO1xuICByZXNvdXJjZVByb3RlY3RlZElkPzogc3RyaW5nO1xuICBzY29wZUtpbmQ/OiBTY29wZUtpbmQ7XG4gIHNjb3BlSWQ/OiBzdHJpbmc7XG4gIGF0PzogRGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBY2Nlc3NDb250ZXh0IHtcbiAgdGVuYW50SWQ6IHN0cmluZztcbiAgcHJpbmNpcGFsSWQ6IHN0cmluZztcbiAgcGVybWlzc2lvbnNCeVNjb3BlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT47XG4gIGFsbG93ZWRPcmdVbml0SWRzQnlQZXJtaXNzaW9uOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT47XG4gIHJlc291cmNlR3JhbnRzOiBBcnJheTx7IHJlc291cmNlSWQ6IHN0cmluZzsgcGVybWlzc2lvbktleTogc3RyaW5nIH0+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFyYW5nb0F1dGhDb250ZXh0IHtcbiAgdGVuYW50SWQ6IHN0cmluZztcbiAgcHJpbmNpcGFsSWQ6IHN0cmluZztcbiAgcGVybWlzc2lvbktleTogc3RyaW5nO1xuICBhbGxvd2VkT3JnVW5pdElkczogc3RyaW5nW107XG4gIGFsbG93ZWRSZXNvdXJjZUlkczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUWRyYW50QXV0aEZpbHRlciB7XG4gIG11c3Q6IEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcbiAgbXVzdF9ub3Q/OiBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlU3RvcmFnZUJpbmRpbmdJbnB1dCB7XG4gIHRlbmFudElkOiBzdHJpbmc7XG4gIHN0b3JhZ2VLaW5kOiBTdG9yYWdlS2luZDtcbiAgYmluZGluZ0tpbmQ6IFN0b3JhZ2VCaW5kaW5nS2luZDtcbiAgYmluZGluZ0tleTogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbiAgY29uZmlnPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9vdHN0cmFwUGVybWlzc2lvbiB7XG4gIGtleTogc3RyaW5nO1xuICBjYXRlZ29yeTogUGVybWlzc2lvbkNhdGVnb3J5O1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCb290c3RyYXBSb2xlIHtcbiAga2V5OiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHBlcm1pc3Npb25LZXlzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCb290c3RyYXBPcmdVbml0IHtcbiAgbmFtZTogc3RyaW5nO1xuICBwcm9maWxlS2V5Pzogc3RyaW5nO1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjaGlsZHJlbj86IEJvb3RzdHJhcE9yZ1VuaXRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCb290c3RyYXBUZW1wbGF0ZSB7XG4gIHRlbmFudDogQ3JlYXRlVGVuYW50SW5wdXQ7XG4gIHJvb3RPcmdVbml0OiBCb290c3RyYXBPcmdVbml0O1xuICBwZXJtaXNzaW9uczogQm9vdHN0cmFwUGVybWlzc2lvbltdO1xuICByb2xlczogQm9vdHN0cmFwUm9sZVtdO1xuICBvd25lclVzZXI6IENyZWF0ZVVzZXJJbnB1dDtcbiAgb3duZXJSb2xlS2V5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VTbmFwc2hvdCB7XG4gIGlkOiBzdHJpbmc7XG4gIHRlbmFudElkOiBzdHJpbmc7XG4gIG9yZ1VuaXRJZDogc3RyaW5nO1xuICByZXNvdXJjZVR5cGU6IHN0cmluZztcbiAgcmVzb3VyY2VJZDogc3RyaW5nO1xuICB2aXNpYmlsaXR5OiBSZXNvdXJjZVZpc2liaWxpdHk7XG4gIG93bmVyUHJpbmNpcGFsSWQ/OiBzdHJpbmc7XG4gIHNlbnNpdGl2aXR5Pzogc3RyaW5nO1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyYW50U25hcHNob3Qge1xuICBpZDogc3RyaW5nO1xuICB0ZW5hbnRJZDogc3RyaW5nO1xuICByZXNvdXJjZUlkOiBzdHJpbmc7XG4gIHByaW5jaXBhbElkOiBzdHJpbmc7XG4gIHBlcm1pc3Npb25LZXk6IHN0cmluZztcbiAgc3RhcnRzQXQ/OiBEYXRlO1xuICBleHBpcmVzQXQ/OiBEYXRlO1xuICBjb25kaXRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNyZWF0ZWRCeVByaW5jaXBhbElkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVmZmVjdGl2ZVBlcm1pc3Npb25TbmFwc2hvdCB7XG4gIGlkOiBzdHJpbmc7XG4gIHRlbmFudElkOiBzdHJpbmc7XG4gIHByaW5jaXBhbElkOiBzdHJpbmc7XG4gIHBlcm1pc3Npb25LZXk6IHN0cmluZztcbiAgc2NvcGVLaW5kOiBTY29wZUtpbmQ7XG4gIHNjb3BlSWQ6IHN0cmluZztcbiAgc291cmNlS2luZDogc3RyaW5nO1xuICBzb3VyY2VJZDogc3RyaW5nO1xuICBzdGFydHNBdD86IERhdGU7XG4gIGV4cGlyZXNBdD86IERhdGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aHpEYXRhU291cmNlcyB7XG4gIGxvYWRSZXNvdXJjZT86ICh0ZW5hbnRJZDogc3RyaW5nLCBwcm90ZWN0ZWRSZXNvdXJjZUlkOiBzdHJpbmcpID0+IFByb21pc2U8UmVzb3VyY2VTbmFwc2hvdCB8IHVuZGVmaW5lZD47XG4gIGxpc3RSZXNvdXJjZUdyYW50cz86ICh0ZW5hbnRJZDogc3RyaW5nLCBwcm90ZWN0ZWRSZXNvdXJjZUlkOiBzdHJpbmcpID0+IFByb21pc2U8R3JhbnRTbmFwc2hvdFtdPjtcbiAgbGlzdFByaW5jaXBhbEdyYW50cz86ICh0ZW5hbnRJZDogc3RyaW5nLCBwcmluY2lwYWxJZDogc3RyaW5nKSA9PiBQcm9taXNlPEdyYW50U25hcHNob3RbXT47XG4gIGxpc3RFZmZlY3RpdmVQZXJtaXNzaW9ucz86IChcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIHByaW5jaXBhbElkOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPEVmZmVjdGl2ZVBlcm1pc3Npb25TbmFwc2hvdFtdPjtcbiAgbGlzdEVmZmVjdGl2ZVBlcm1pc3Npb25zRm9yU2NvcGU/OiAoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBzY29wZUtpbmQ6IFNjb3BlS2luZCxcbiAgICBzY29wZUlkOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPEVmZmVjdGl2ZVBlcm1pc3Npb25TbmFwc2hvdFtdPjtcbn1cblxuZnVuY3Rpb24gaXNUaW1lVmFsaWQoXG4gIGF0OiBEYXRlIHwgdW5kZWZpbmVkLFxuICBzdGFydHNBdD86IERhdGUsXG4gIGV4cGlyZXNBdD86IERhdGVcbik6IGJvb2xlYW4ge1xuICBjb25zdCBpbnN0YW50ID0gYXQgPz8gbmV3IERhdGUoKTtcbiAgaWYgKHN0YXJ0c0F0ICYmIGluc3RhbnQgPCBzdGFydHNBdCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoZXhwaXJlc0F0ICYmIGluc3RhbnQgPiBleHBpcmVzQXQpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNjb3BlS2V5KHNjb3BlS2luZDogU2NvcGVLaW5kLCBzY29wZUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7c2NvcGVLaW5kfToke3Njb3BlSWR9YDtcbn1cblxuZnVuY3Rpb24gdG9BcnJheTxUPih2YWx1ZTogVFtdIHwgdW5kZWZpbmVkKTogVFtdIHtcbiAgcmV0dXJuIHZhbHVlID8/IFtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBcmFuZ29Db250ZXh0KG9wdGlvbnM6IHtcbiAgdGVuYW50SWQ6IHN0cmluZztcbiAgcHJpbmNpcGFsSWQ6IHN0cmluZztcbiAgcGVybWlzc2lvbktleTogc3RyaW5nO1xuICBhbGxvd2VkT3JnVW5pdElkczogc3RyaW5nW107XG4gIGFsbG93ZWRSZXNvdXJjZUlkczogc3RyaW5nW107XG59KTogQXJhbmdvQXV0aENvbnRleHQge1xuICByZXR1cm4ge1xuICAgIHRlbmFudElkOiBvcHRpb25zLnRlbmFudElkLFxuICAgIHByaW5jaXBhbElkOiBvcHRpb25zLnByaW5jaXBhbElkLFxuICAgIHBlcm1pc3Npb25LZXk6IG9wdGlvbnMucGVybWlzc2lvbktleSxcbiAgICBhbGxvd2VkT3JnVW5pdElkczogWy4uLm9wdGlvbnMuYWxsb3dlZE9yZ1VuaXRJZHNdLFxuICAgIGFsbG93ZWRSZXNvdXJjZUlkczogWy4uLm9wdGlvbnMuYWxsb3dlZFJlc291cmNlSWRzXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUWRyYW50RmlsdGVyKG9wdGlvbnM6IHtcbiAgdGVuYW50SWQ6IHN0cmluZztcbiAgcHJpbmNpcGFsSWQ6IHN0cmluZztcbiAgcGVybWlzc2lvbktleTogc3RyaW5nO1xuICBhbGxvd2VkT3JnVW5pdElkczogc3RyaW5nW107XG4gIGFsbG93ZWRSZXNvdXJjZUlkczogc3RyaW5nW107XG59KTogUWRyYW50QXV0aEZpbHRlciB7XG4gIHJldHVybiB7XG4gICAgbXVzdDogW1xuICAgICAge1xuICAgICAgICBrZXk6IFwidGVuYW50X2lkXCIsXG4gICAgICAgIG1hdGNoOiB7IHZhbHVlOiBvcHRpb25zLnRlbmFudElkIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzaG91bGQ6IFtcbiAgICAgICAgICB7IGtleTogXCJvcmdfdW5pdF9pZFwiLCBtYXRjaDogeyBhbnk6IG9wdGlvbnMuYWxsb3dlZE9yZ1VuaXRJZHMgfSB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJwcm90ZWN0ZWRfcmVzb3VyY2VfaWRcIixcbiAgICAgICAgICAgIG1hdGNoOiB7IGFueTogb3B0aW9ucy5hbGxvd2VkUmVzb3VyY2VJZHMgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsga2V5OiBcIm93bmVyX3ByaW5jaXBhbF9pZFwiLCBtYXRjaDogeyB2YWx1ZTogb3B0aW9ucy5wcmluY2lwYWxJZCB9IH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFjY2Vzc0NvbnRleHQob3B0aW9uczoge1xuICB0ZW5hbnRJZDogc3RyaW5nO1xuICBwcmluY2lwYWxJZDogc3RyaW5nO1xuICBwZXJtaXNzaW9uczogRWZmZWN0aXZlUGVybWlzc2lvblNuYXBzaG90W107XG4gIGdyYW50czogR3JhbnRTbmFwc2hvdFtdO1xufSk6IEFjY2Vzc0NvbnRleHQge1xuICBjb25zdCBwZXJtaXNzaW9uc0J5U2NvcGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuICBjb25zdCBhbGxvd2VkT3JnVW5pdElkc0J5UGVybWlzc2lvbjogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cbiAgZm9yIChjb25zdCBwZXJtaXNzaW9uIG9mIG9wdGlvbnMucGVybWlzc2lvbnMpIHtcbiAgICBjb25zdCBrZXkgPSBzY29wZUtleShwZXJtaXNzaW9uLnNjb3BlS2luZCwgcGVybWlzc2lvbi5zY29wZUlkKTtcbiAgICBwZXJtaXNzaW9uc0J5U2NvcGVba2V5XSA9IHBlcm1pc3Npb25zQnlTY29wZVtrZXldID8/IFtdO1xuICAgIHBlcm1pc3Npb25zQnlTY29wZVtrZXldLnB1c2gocGVybWlzc2lvbi5wZXJtaXNzaW9uS2V5KTtcbiAgICBpZiAocGVybWlzc2lvbi5zY29wZUtpbmQgPT09IFNjb3BlS2luZC5PcmdVbml0KSB7XG4gICAgICBhbGxvd2VkT3JnVW5pdElkc0J5UGVybWlzc2lvbltwZXJtaXNzaW9uLnBlcm1pc3Npb25LZXldID1cbiAgICAgICAgYWxsb3dlZE9yZ1VuaXRJZHNCeVBlcm1pc3Npb25bcGVybWlzc2lvbi5wZXJtaXNzaW9uS2V5XSA/PyBbXTtcbiAgICAgIGFsbG93ZWRPcmdVbml0SWRzQnlQZXJtaXNzaW9uW3Blcm1pc3Npb24ucGVybWlzc2lvbktleV0ucHVzaChcbiAgICAgICAgcGVybWlzc2lvbi5zY29wZUlkXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGVuYW50SWQ6IG9wdGlvbnMudGVuYW50SWQsXG4gICAgcHJpbmNpcGFsSWQ6IG9wdGlvbnMucHJpbmNpcGFsSWQsXG4gICAgcGVybWlzc2lvbnNCeVNjb3BlLFxuICAgIGFsbG93ZWRPcmdVbml0SWRzQnlQZXJtaXNzaW9uLFxuICAgIHJlc291cmNlR3JhbnRzOiBvcHRpb25zLmdyYW50cy5tYXAoKGdyYW50KSA9PiAoe1xuICAgICAgcmVzb3VyY2VJZDogZ3JhbnQucmVzb3VyY2VJZCxcbiAgICAgIHBlcm1pc3Npb25LZXk6IGdyYW50LnBlcm1pc3Npb25LZXksXG4gICAgfSkpLFxuICB9O1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZU1vZGVsU2VydmljZTxNIGV4dGVuZHMgTW9kZWw8Ym9vbGVhbj4gJiB7IGlkOiBzdHJpbmcgfT4gZXh0ZW5kcyBNb2RlbFNlcnZpY2U8XG4gIE0sXG4gIFJlcG9zaXRvcnk8TSwgYW55PlxuPiB7XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihjbGF6ejogbmV3ICgpID0+IE0pIHtcbiAgICBzdXBlcihjbGF6eik7XG4gIH1cblxuICBwcm90ZWN0ZWQgbmV3TW9kZWw8VD4oY2xheno6IG5ldyAoKSA9PiBULCBkYXRhOiBQYXJ0aWFsPFQ+KTogVCB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IGNsYXp6KCkgYXMgb2JqZWN0LCBkYXRhIGFzIG9iamVjdCkgYXMgVDtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU9uZShkYXRhOiBQYXJ0aWFsPE0+LCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8TT4ge1xuICAgIHJldHVybiB0aGlzLnJlcG8uY3JlYXRlKE9iamVjdC5hc3NpZ24oe30gYXMgTSwgZGF0YSBhcyBvYmplY3QpLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGdldEJ5SWQoaWQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPE0+IHtcbiAgICByZXR1cm4gdGhpcy5yZXBvLnJlYWQoaWQsIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlT25lKGlkOiBzdHJpbmcsIHBhdGNoOiBQYXJ0aWFsPE0+LCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8TT4ge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgdGhpcy5yZXBvLnJlYWQoaWQsIC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzLnJlcG8udXBkYXRlKE9iamVjdC5hc3NpZ24oZXhpc3RpbmcsIHBhdGNoKSwgLi4uYXJncyk7XG4gIH1cblxuICBhc3luYyBkZWxldGVCeUlkKGlkOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5yZXBvLmRlbGV0ZShpZCwgLi4uYXJncyk7XG4gIH1cblxuICBhc3luYyBmaW5kT25lQnk8SyBleHRlbmRzIGtleW9mIE0gJiBzdHJpbmc+KFxuICAgIGtleTogSyxcbiAgICB2YWx1ZTogTVtLXSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPE0+IHtcbiAgICByZXR1cm4gdGhpcy5yZXBvLmZpbmRPbmVCeShrZXksIHZhbHVlLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmRNYW55Qnk8SyBleHRlbmRzIGtleW9mIE0gJiBzdHJpbmc+KFxuICAgIGtleTogSyxcbiAgICB2YWx1ZTogTVtLXSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPE1bXT4ge1xuICAgIHJldHVybiB0aGlzLnJlcG8uc2VsZWN0KCkud2hlcmUoeyBba2V5XTogdmFsdWUgfSBhcyBhbnkpLmV4ZWN1dGUoLi4uYXJncyk7XG4gIH1cblxuICBhc3luYyBsaXN0QWxsKC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNW10+IHtcbiAgICByZXR1cm4gdGhpcy5yZXBvLnNlbGVjdCgpLmV4ZWN1dGUoLi4uYXJncyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkKCk6IHN0cmluZyB7XG4gIHJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVsYXRpb25JZCh2YWx1ZTogc3RyaW5nIHwgeyBpZDogc3RyaW5nIH0pOiBzdHJpbmcge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUgOiB2YWx1ZS5pZDtcbn1cblxuZXhwb3J0IGNsYXNzIEF1dGh6U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YVNvdXJjZXM6IEF1dGh6RGF0YVNvdXJjZXM7XG5cbiAgY29uc3RydWN0b3IoZGF0YVNvdXJjZXM6IEF1dGh6RGF0YVNvdXJjZXMgPSB7fSkge1xuICAgIHRoaXMuZGF0YVNvdXJjZXMgPSBkYXRhU291cmNlcztcbiAgfVxuXG4gIGFzeW5jIGNhbkFjY2VzcyhpbnB1dDogQ2FuQWNjZXNzSW5wdXQsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgYXQgPSBpbnB1dC5hdCA/PyBuZXcgRGF0ZSgpO1xuXG4gICAgaWYgKGlucHV0LnNjb3BlS2luZCAmJiBpbnB1dC5zY29wZUlkKSB7XG4gICAgICBjb25zdCBwZXJtaXNzaW9ucyA9IGF3YWl0IHRoaXMuZGF0YVNvdXJjZXMubGlzdEVmZmVjdGl2ZVBlcm1pc3Npb25zRm9yU2NvcGU/LihcbiAgICAgICAgaW5wdXQudGVuYW50SWQsXG4gICAgICAgIGlucHV0LnNjb3BlS2luZCxcbiAgICAgICAgaW5wdXQuc2NvcGVJZFxuICAgICAgKTtcbiAgICAgIHJldHVybiB0b0FycmF5KHBlcm1pc3Npb25zKS5zb21lKFxuICAgICAgICAocGVybWlzc2lvbikgPT5cbiAgICAgICAgICBwZXJtaXNzaW9uLnBlcm1pc3Npb25LZXkgPT09IGlucHV0LnBlcm1pc3Npb25LZXkgJiZcbiAgICAgICAgICBpc1RpbWVWYWxpZChhdCwgcGVybWlzc2lvbi5zdGFydHNBdCwgcGVybWlzc2lvbi5leHBpcmVzQXQpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghaW5wdXQucmVzb3VyY2VQcm90ZWN0ZWRJZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgcmVzb3VyY2UgPSBhd2FpdCB0aGlzLmRhdGFTb3VyY2VzLmxvYWRSZXNvdXJjZT8uKFxuICAgICAgaW5wdXQudGVuYW50SWQsXG4gICAgICBpbnB1dC5yZXNvdXJjZVByb3RlY3RlZElkXG4gICAgKTtcbiAgICBpZiAoIXJlc291cmNlKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHJlc291cmNlLnRlbmFudElkICE9PSBpbnB1dC50ZW5hbnRJZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKHJlc291cmNlLm93bmVyUHJpbmNpcGFsSWQgPT09IGlucHV0LnByaW5jaXBhbElkKSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IGdyYW50cyA9IHRvQXJyYXkoXG4gICAgICBhd2FpdCB0aGlzLmRhdGFTb3VyY2VzLmxpc3RSZXNvdXJjZUdyYW50cz8uKFxuICAgICAgICBpbnB1dC50ZW5hbnRJZCxcbiAgICAgICAgaW5wdXQucmVzb3VyY2VQcm90ZWN0ZWRJZFxuICAgICAgKVxuICAgICkuZmlsdGVyKFxuICAgICAgKGdyYW50KSA9PlxuICAgICAgICBncmFudC5wcmluY2lwYWxJZCA9PT0gaW5wdXQucHJpbmNpcGFsSWQgJiZcbiAgICAgICAgZ3JhbnQucGVybWlzc2lvbktleSA9PT0gaW5wdXQucGVybWlzc2lvbktleSAmJlxuICAgICAgICBpc1RpbWVWYWxpZChhdCwgZ3JhbnQuc3RhcnRzQXQsIGdyYW50LmV4cGlyZXNBdClcbiAgICApO1xuICAgIGlmIChncmFudHMubGVuZ3RoID4gMCkgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCB2aXNpYmlsaXR5ID0gcmVzb3VyY2UudmlzaWJpbGl0eTtcbiAgICBpZiAoXG4gICAgICB2aXNpYmlsaXR5ID09PSBSZXNvdXJjZVZpc2liaWxpdHkuUHJpdmF0ZSB8fFxuICAgICAgdmlzaWJpbGl0eSA9PT0gUmVzb3VyY2VWaXNpYmlsaXR5LlJlc291cmNlQWNsXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdmlzaWJpbGl0eSA9PT0gUmVzb3VyY2VWaXNpYmlsaXR5Lk9yZ1VuaXQgfHxcbiAgICAgIHZpc2liaWxpdHkgPT09IFJlc291cmNlVmlzaWJpbGl0eS5PcmdTdWJ0cmVlXG4gICAgKSB7XG4gICAgICBjb25zdCBlZmZlY3RpdmVQZXJtaXNzaW9ucyA9IHRvQXJyYXkoXG4gICAgICAgIGF3YWl0IHRoaXMuZGF0YVNvdXJjZXMubGlzdEVmZmVjdGl2ZVBlcm1pc3Npb25zRm9yU2NvcGU/LihcbiAgICAgICAgICBpbnB1dC50ZW5hbnRJZCxcbiAgICAgICAgICBTY29wZUtpbmQuT3JnVW5pdCxcbiAgICAgICAgICByZXNvdXJjZS5vcmdVbml0SWRcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBlZmZlY3RpdmVQZXJtaXNzaW9ucy5zb21lKFxuICAgICAgICAocGVybWlzc2lvbikgPT5cbiAgICAgICAgICBwZXJtaXNzaW9uLnBlcm1pc3Npb25LZXkgPT09IGlucHV0LnBlcm1pc3Npb25LZXkgJiZcbiAgICAgICAgICBpc1RpbWVWYWxpZChhdCwgcGVybWlzc2lvbi5zdGFydHNBdCwgcGVybWlzc2lvbi5leHBpcmVzQXQpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh2aXNpYmlsaXR5ID09PSBSZXNvdXJjZVZpc2liaWxpdHkuVGVuYW50KSB7XG4gICAgICBjb25zdCBlZmZlY3RpdmVQZXJtaXNzaW9ucyA9IHRvQXJyYXkoXG4gICAgICAgIGF3YWl0IHRoaXMuZGF0YVNvdXJjZXMubGlzdEVmZmVjdGl2ZVBlcm1pc3Npb25zRm9yU2NvcGU/LihcbiAgICAgICAgICBpbnB1dC50ZW5hbnRJZCxcbiAgICAgICAgICBTY29wZUtpbmQuVGVuYW50LFxuICAgICAgICAgIGlucHV0LnRlbmFudElkXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gZWZmZWN0aXZlUGVybWlzc2lvbnMuc29tZShcbiAgICAgICAgKHBlcm1pc3Npb24pID0+XG4gICAgICAgICAgcGVybWlzc2lvbi5wZXJtaXNzaW9uS2V5ID09PSBpbnB1dC5wZXJtaXNzaW9uS2V5ICYmXG4gICAgICAgICAgaXNUaW1lVmFsaWQoYXQsIHBlcm1pc3Npb24uc3RhcnRzQXQsIHBlcm1pc3Npb24uZXhwaXJlc0F0KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhc3luYyByZXF1aXJlQWNjZXNzKGlucHV0OiBDYW5BY2Nlc3NJbnB1dCwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIShhd2FpdCB0aGlzLmNhbkFjY2VzcyhpbnB1dCwgLi4uYXJncykpKSB7XG4gICAgICB0aHJvdyBuZXcgQXV0aG9yaXphdGlvbkVycm9yKFxuICAgICAgICBgQWNjZXNzIGRlbmllZCBmb3IgJHtpbnB1dC5wZXJtaXNzaW9uS2V5fSBvbiAke2lucHV0LnJlc291cmNlUHJvdGVjdGVkSWQgPz8gc2NvcGVLZXkoaW5wdXQuc2NvcGVLaW5kID8/IFNjb3BlS2luZC5SZXNvdXJjZSwgaW5wdXQuc2NvcGVJZCA/PyBcIlwiKX1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGJ1aWxkQWNjZXNzQ29udGV4dChcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIHByaW5jaXBhbElkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxBY2Nlc3NDb250ZXh0PiB7XG4gICAgY29uc3QgcGVybWlzc2lvbnMgPSB0b0FycmF5KFxuICAgICAgYXdhaXQgdGhpcy5kYXRhU291cmNlcy5saXN0RWZmZWN0aXZlUGVybWlzc2lvbnM/Lih0ZW5hbnRJZCwgcHJpbmNpcGFsSWQpXG4gICAgKTtcbiAgICBjb25zdCBncmFudHMgPSB0b0FycmF5KFxuICAgICAgYXdhaXQgdGhpcy5kYXRhU291cmNlcy5saXN0UHJpbmNpcGFsR3JhbnRzPy4odGVuYW50SWQsIHByaW5jaXBhbElkKVxuICAgICk7XG4gICAgcmV0dXJuIGJ1aWxkQWNjZXNzQ29udGV4dCh7XG4gICAgICB0ZW5hbnRJZCxcbiAgICAgIHByaW5jaXBhbElkLFxuICAgICAgcGVybWlzc2lvbnMsXG4gICAgICBncmFudHMsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBidWlsZEFyYW5nb0NvbnRleHQoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBwcmluY2lwYWxJZDogc3RyaW5nLFxuICAgIHBlcm1pc3Npb25LZXk6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPEFyYW5nb0F1dGhDb250ZXh0PiB7XG4gICAgY29uc3QgYWNjZXNzID0gYXdhaXQgdGhpcy5idWlsZEFjY2Vzc0NvbnRleHQodGVuYW50SWQsIHByaW5jaXBhbElkLCAuLi5hcmdzKTtcbiAgICBjb25zdCBhbGxvd2VkT3JnVW5pdElkcyA9IGFjY2Vzcy5hbGxvd2VkT3JnVW5pdElkc0J5UGVybWlzc2lvbltwZXJtaXNzaW9uS2V5XSA/PyBbXTtcbiAgICBjb25zdCBhbGxvd2VkUmVzb3VyY2VJZHMgPSBhY2Nlc3MucmVzb3VyY2VHcmFudHNcbiAgICAgIC5maWx0ZXIoKGdyYW50KSA9PiBncmFudC5wZXJtaXNzaW9uS2V5ID09PSBwZXJtaXNzaW9uS2V5KVxuICAgICAgLm1hcCgoZ3JhbnQpID0+IGdyYW50LnJlc291cmNlSWQpO1xuICAgIHJldHVybiBidWlsZEFyYW5nb0NvbnRleHQoe1xuICAgICAgdGVuYW50SWQsXG4gICAgICBwcmluY2lwYWxJZCxcbiAgICAgIHBlcm1pc3Npb25LZXksXG4gICAgICBhbGxvd2VkT3JnVW5pdElkcyxcbiAgICAgIGFsbG93ZWRSZXNvdXJjZUlkcyxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkUWRyYW50RmlsdGVyKFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgcHJpbmNpcGFsSWQ6IHN0cmluZyxcbiAgICBwZXJtaXNzaW9uS2V5OiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxRZHJhbnRBdXRoRmlsdGVyPiB7XG4gICAgY29uc3QgYWNjZXNzID0gYXdhaXQgdGhpcy5idWlsZEFjY2Vzc0NvbnRleHQodGVuYW50SWQsIHByaW5jaXBhbElkLCAuLi5hcmdzKTtcbiAgICBjb25zdCBhbGxvd2VkT3JnVW5pdElkcyA9IGFjY2Vzcy5hbGxvd2VkT3JnVW5pdElkc0J5UGVybWlzc2lvbltwZXJtaXNzaW9uS2V5XSA/PyBbXTtcbiAgICBjb25zdCBhbGxvd2VkUmVzb3VyY2VJZHMgPSBhY2Nlc3MucmVzb3VyY2VHcmFudHNcbiAgICAgIC5maWx0ZXIoKGdyYW50KSA9PiBncmFudC5wZXJtaXNzaW9uS2V5ID09PSBwZXJtaXNzaW9uS2V5KVxuICAgICAgLm1hcCgoZ3JhbnQpID0+IGdyYW50LnJlc291cmNlSWQpO1xuICAgIHJldHVybiBidWlsZFFkcmFudEZpbHRlcih7XG4gICAgICB0ZW5hbnRJZCxcbiAgICAgIHByaW5jaXBhbElkLFxuICAgICAgcGVybWlzc2lvbktleSxcbiAgICAgIGFsbG93ZWRPcmdVbml0SWRzLFxuICAgICAgYWxsb3dlZFJlc291cmNlSWRzLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCB7IHRyYW5zYWN0aW9uYWwgfTtcbiJdfQ==
|