@resistdesign/voltra 0.0.0-alpha.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/README.md +86 -0
- package/package.json +103 -0
- package/src/api/DataAccessControl.d.ts +85 -0
- package/src/api/DataAccessControl.js +159 -0
- package/src/api/ORM/DACUtils.d.ts +60 -0
- package/src/api/ORM/DACUtils.js +197 -0
- package/src/api/ORM/ListItemUtils.d.ts +7 -0
- package/src/api/ORM/ListItemUtils.js +22 -0
- package/src/api/ORM/ORMRouteMap.d.ts +19 -0
- package/src/api/ORM/ORMRouteMap.js +82 -0
- package/src/api/ORM/TypeInfoORMService.d.ts +103 -0
- package/src/api/ORM/TypeInfoORMService.js +581 -0
- package/src/api/ORM/drivers/DynamoDBDataItemDBDriver/ConfigTypes.d.ts +63 -0
- package/src/api/ORM/drivers/DynamoDBDataItemDBDriver/ConfigTypes.js +2 -0
- package/src/api/ORM/drivers/DynamoDBDataItemDBDriver.d.ts +36 -0
- package/src/api/ORM/drivers/DynamoDBDataItemDBDriver.js +282 -0
- package/src/api/ORM/drivers/S3FileItemDBDriver/ConfigTypes.d.ts +90 -0
- package/src/api/ORM/drivers/S3FileItemDBDriver/ConfigTypes.js +2 -0
- package/src/api/ORM/drivers/S3FileItemDBDriver/S3FileDriver.d.ts +45 -0
- package/src/api/ORM/drivers/S3FileItemDBDriver/S3FileDriver.js +127 -0
- package/src/api/ORM/drivers/S3FileItemDBDriver.d.ts +44 -0
- package/src/api/ORM/drivers/S3FileItemDBDriver.js +182 -0
- package/src/api/ORM/drivers/common/SupportedTypeInfoORMDBDrivers.d.ts +12 -0
- package/src/api/ORM/drivers/common/SupportedTypeInfoORMDBDrivers.js +20 -0
- package/src/api/ORM/drivers/common/Types.d.ts +77 -0
- package/src/api/ORM/drivers/common/Types.js +14 -0
- package/src/api/ORM/drivers/common/index.d.ts +2 -0
- package/src/api/ORM/drivers/common/index.js +18 -0
- package/src/api/ORM/drivers/index.d.ts +3 -0
- package/src/api/ORM/drivers/index.js +19 -0
- package/src/api/ORM/index.d.ts +4 -0
- package/src/api/ORM/index.js +43 -0
- package/src/api/Router/AWS.d.ts +26 -0
- package/src/api/Router/AWS.js +76 -0
- package/src/api/Router/Auth.d.ts +2 -0
- package/src/api/Router/Auth.js +9 -0
- package/src/api/Router/CORS.d.ts +6 -0
- package/src/api/Router/CORS.js +27 -0
- package/src/api/Router/Types.d.ts +71 -0
- package/src/api/Router/Types.js +2 -0
- package/src/api/Router/index.d.ts +18 -0
- package/src/api/Router/index.js +145 -0
- package/src/api/index.d.ts +3 -0
- package/src/api/index.js +39 -0
- package/src/app/index.d.ts +1 -0
- package/src/app/index.js +37 -0
- package/src/app/utils/ApplicationState.d.ts +52 -0
- package/src/app/utils/ApplicationState.js +86 -0
- package/src/app/utils/ApplicationStateLoader.d.ts +46 -0
- package/src/app/utils/ApplicationStateLoader.js +57 -0
- package/src/app/utils/Controller.d.ts +4 -0
- package/src/app/utils/Controller.js +47 -0
- package/src/app/utils/Debug.d.ts +4 -0
- package/src/app/utils/Debug.js +30 -0
- package/src/app/utils/EasyLayout.d.ts +49 -0
- package/src/app/utils/EasyLayout.js +122 -0
- package/src/app/utils/Route.d.ts +28 -0
- package/src/app/utils/Route.js +102 -0
- package/src/app/utils/Service.d.ts +12 -0
- package/src/app/utils/Service.js +34 -0
- package/src/app/utils/TypeInfoORMAPIUtils.d.ts +20 -0
- package/src/app/utils/TypeInfoORMAPIUtils.js +62 -0
- package/src/app/utils/TypeInfoORMClient.d.ts +24 -0
- package/src/app/utils/TypeInfoORMClient.js +69 -0
- package/src/app/utils/index.d.ts +8 -0
- package/src/app/utils/index.js +24 -0
- package/src/common/CommandLine/collectRequiredEnvironmentVariables.d.ts +1 -0
- package/src/common/CommandLine/collectRequiredEnvironmentVariables.js +16 -0
- package/src/common/HelperTypes.d.ts +3 -0
- package/src/common/HelperTypes.js +2 -0
- package/src/common/IdGeneration/getSimpleId.d.ts +4 -0
- package/src/common/IdGeneration/getSimpleId.js +16 -0
- package/src/common/IdGeneration/index.d.ts +1 -0
- package/src/common/IdGeneration/index.js +17 -0
- package/src/common/ItemRelationshipInfoTypes.d.ts +46 -0
- package/src/common/ItemRelationshipInfoTypes.js +20 -0
- package/src/common/ItemRelationships/ItemRelationshipValidation.d.ts +10 -0
- package/src/common/ItemRelationships/ItemRelationshipValidation.js +43 -0
- package/src/common/ItemRelationships/index.d.ts +1 -0
- package/src/common/ItemRelationships/index.js +17 -0
- package/src/common/Logging/Utils.d.ts +10 -0
- package/src/common/Logging/Utils.js +33 -0
- package/src/common/Logging/index.d.ts +1 -0
- package/src/common/Logging/index.js +17 -0
- package/src/common/Routing.d.ts +25 -0
- package/src/common/Routing.js +102 -0
- package/src/common/SearchTypes.d.ts +98 -0
- package/src/common/SearchTypes.js +39 -0
- package/src/common/SearchUtils.d.ts +22 -0
- package/src/common/SearchUtils.js +134 -0
- package/src/common/SearchValidation.d.ts +17 -0
- package/src/common/SearchValidation.js +90 -0
- package/src/common/Storyboarding/Types.d.ts +25 -0
- package/src/common/Storyboarding/Types.js +2 -0
- package/src/common/StringTransformers.d.ts +17 -0
- package/src/common/StringTransformers.js +36 -0
- package/src/common/Testing/CLI.d.ts +2 -0
- package/src/common/Testing/CLI.js +56 -0
- package/src/common/Testing/Types.d.ts +117 -0
- package/src/common/Testing/Types.js +19 -0
- package/src/common/Testing/Utils.d.ts +48 -0
- package/src/common/Testing/Utils.js +334 -0
- package/src/common/Testing/index.d.ts +2 -0
- package/src/common/Testing/index.js +18 -0
- package/src/common/TypeInfoDataItemUtils.d.ts +10 -0
- package/src/common/TypeInfoDataItemUtils.js +55 -0
- package/src/common/TypeInfoORM/Types.d.ts +76 -0
- package/src/common/TypeInfoORM/Types.js +55 -0
- package/src/common/TypeInfoORM/index.d.ts +1 -0
- package/src/common/TypeInfoORM/index.js +17 -0
- package/src/common/TypeParsing/Constants.d.ts +1 -0
- package/src/common/TypeParsing/Constants.js +4 -0
- package/src/common/TypeParsing/ParsingUtils/Constants.d.ts +5 -0
- package/src/common/TypeParsing/ParsingUtils/Constants.js +8 -0
- package/src/common/TypeParsing/ParsingUtils/checkType.d.ts +8 -0
- package/src/common/TypeParsing/ParsingUtils/checkType.js +46 -0
- package/src/common/TypeParsing/ParsingUtils/checkUnionType.d.ts +6 -0
- package/src/common/TypeParsing/ParsingUtils/checkUnionType.js +15 -0
- package/src/common/TypeParsing/ParsingUtils/extractCommentTags.d.ts +2 -0
- package/src/common/TypeParsing/ParsingUtils/extractCommentTags.js +105 -0
- package/src/common/TypeParsing/ParsingUtils/extractLiteralValues.d.ts +6 -0
- package/src/common/TypeParsing/ParsingUtils/extractLiteralValues.js +42 -0
- package/src/common/TypeParsing/ParsingUtils/extractTypeDetails.d.ts +8 -0
- package/src/common/TypeParsing/ParsingUtils/extractTypeDetails.js +14 -0
- package/src/common/TypeParsing/ParsingUtils/getPrimaryFieldForTypeInfo.d.ts +5 -0
- package/src/common/TypeParsing/ParsingUtils/getPrimaryFieldForTypeInfo.js +27 -0
- package/src/common/TypeParsing/ParsingUtils/getTypeInfo.d.ts +3 -0
- package/src/common/TypeParsing/ParsingUtils/getTypeInfo.js +27 -0
- package/src/common/TypeParsing/ParsingUtils/getTypeInfoField.d.ts +3 -0
- package/src/common/TypeParsing/ParsingUtils/getTypeInfoField.js +44 -0
- package/src/common/TypeParsing/ParsingUtils/getTypeInfoFromAliasType.d.ts +4 -0
- package/src/common/TypeParsing/ParsingUtils/getTypeInfoFromAliasType.js +28 -0
- package/src/common/TypeParsing/ParsingUtils/getTypeInfoFromFieldFilter.d.ts +4 -0
- package/src/common/TypeParsing/ParsingUtils/getTypeInfoFromFieldFilter.js +105 -0
- package/src/common/TypeParsing/ParsingUtils/getTypeInfoFromTypeAlias.d.ts +4 -0
- package/src/common/TypeParsing/ParsingUtils/getTypeInfoFromTypeAlias.js +20 -0
- package/src/common/TypeParsing/ParsingUtils/getTypeKeyword.d.ts +3 -0
- package/src/common/TypeParsing/ParsingUtils/getTypeKeyword.js +17 -0
- package/src/common/TypeParsing/ParsingUtils/getUnionOrIntersectionTypeInfo.d.ts +4 -0
- package/src/common/TypeParsing/ParsingUtils/getUnionOrIntersectionTypeInfo.js +49 -0
- package/src/common/TypeParsing/ParsingUtils/getUnionOrLiteralStringValues.d.ts +2 -0
- package/src/common/TypeParsing/ParsingUtils/getUnionOrLiteralStringValues.js +24 -0
- package/src/common/TypeParsing/TypeInfo.d.ts +142 -0
- package/src/common/TypeParsing/TypeInfo.js +13 -0
- package/src/common/TypeParsing/TypeMapping.d.ts +9 -0
- package/src/common/TypeParsing/TypeMapping.js +32 -0
- package/src/common/TypeParsing/TypeParsing.d.ts +5 -0
- package/src/common/TypeParsing/TypeParsing.js +39 -0
- package/src/common/TypeParsing/Utils.d.ts +21 -0
- package/src/common/TypeParsing/Utils.js +94 -0
- package/src/common/TypeParsing/Validation.d.ts +92 -0
- package/src/common/TypeParsing/Validation.js +340 -0
- package/src/common/TypeParsing/index.d.ts +5 -0
- package/src/common/TypeParsing/index.js +44 -0
- package/src/common/index.d.ts +11 -0
- package/src/common/index.js +47 -0
- package/src/iac/SimpleCFT.d.ts +48 -0
- package/src/iac/SimpleCFT.js +82 -0
- package/src/iac/index.d.ts +9 -0
- package/src/iac/index.js +48 -0
- package/src/iac/packs/auth/user-management.d.ts +14 -0
- package/src/iac/packs/auth/user-management.js +302 -0
- package/src/iac/packs/auth.d.ts +19 -0
- package/src/iac/packs/auth.js +47 -0
- package/src/iac/packs/build/utils.d.ts +100 -0
- package/src/iac/packs/build/utils.js +23 -0
- package/src/iac/packs/build.d.ts +29 -0
- package/src/iac/packs/build.js +217 -0
- package/src/iac/packs/cdn.d.ts +12 -0
- package/src/iac/packs/cdn.js +113 -0
- package/src/iac/packs/cloud-function.d.ts +17 -0
- package/src/iac/packs/cloud-function.js +69 -0
- package/src/iac/packs/database.d.ts +29 -0
- package/src/iac/packs/database.js +27 -0
- package/src/iac/packs/dns.d.ts +13 -0
- package/src/iac/packs/dns.js +26 -0
- package/src/iac/packs/file-storage.d.ts +14 -0
- package/src/iac/packs/file-storage.js +71 -0
- package/src/iac/packs/gateway.d.ts +27 -0
- package/src/iac/packs/gateway.js +342 -0
- package/src/iac/packs/index.d.ts +11 -0
- package/src/iac/packs/index.js +27 -0
- package/src/iac/packs/repo.d.ts +10 -0
- package/src/iac/packs/repo.js +34 -0
- package/src/iac/packs/ssl-certificate.d.ts +10 -0
- package/src/iac/packs/ssl-certificate.js +36 -0
- package/src/iac/types/CloudFormationResourceSpecification.d.ts +2 -0
- package/src/iac/types/Constants.d.ts +9 -0
- package/src/iac/types/Constants.js +20 -0
- package/src/iac/types/IaCTypes.d.ts +234994 -0
- package/src/iac/types/IaCTypes.js +14 -0
- package/src/iac/types/Renderers.d.ts +12 -0
- package/src/iac/types/Renderers.js +112 -0
- package/src/iac/types/Types.d.ts +37 -0
- package/src/iac/types/Types.js +2 -0
- package/src/iac/types/Utils.d.ts +2 -0
- package/src/iac/types/Utils.js +60 -0
- package/src/iac/types/generate.d.ts +1 -0
- package/src/iac/types/generate.js +31 -0
- package/src/iac/utils/index.d.ts +36 -0
- package/src/iac/utils/index.js +105 -0
- package/src/iac/utils/patch-utils.d.ts +15 -0
- package/src/iac/utils/patch-utils.js +62 -0
- package/src/index.d.ts +178 -0
- package/src/index.js +214 -0
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mergeDACDataItemResourceAccessResultMaps = exports.getDACRoleHasAccessToDataItem = exports.getFullORMDACRole = exports.getItemRelationshipOriginDACRole = exports.getItemTypeDACRole = exports.getItemRelationshipOriginDACConstraint = exports.getItemTypeDACConstraint = exports.getDataItemFieldValueDACResourcePath = exports.getItemRelationshipDACResourcePath = exports.getItemRelationshipOriginDACResourcePath = exports.getDataItemDACResourcePath = exports.getItemTypeDACResourcePath = exports.getORMDACResourcePath = void 0;
|
|
4
|
+
const TypeInfoORM_1 = require("../../common/TypeInfoORM");
|
|
5
|
+
const DataAccessControl_1 = require("../DataAccessControl");
|
|
6
|
+
/**
|
|
7
|
+
* Get the DAC Resource Path for a given operation performed using an ORM with the given DAC prefix.
|
|
8
|
+
* */
|
|
9
|
+
const getORMDACResourcePath = (prefixPath = [], operation) => [...prefixPath, operation];
|
|
10
|
+
exports.getORMDACResourcePath = getORMDACResourcePath;
|
|
11
|
+
/**
|
|
12
|
+
* Get the DAC Resource Path for a given item type.
|
|
13
|
+
* */
|
|
14
|
+
const getItemTypeDACResourcePath = (prefixPath = [], operation, typeName) => [
|
|
15
|
+
...(0, exports.getORMDACResourcePath)(prefixPath, operation),
|
|
16
|
+
typeName,
|
|
17
|
+
];
|
|
18
|
+
exports.getItemTypeDACResourcePath = getItemTypeDACResourcePath;
|
|
19
|
+
/**
|
|
20
|
+
* Get the DAC Resource Path for a given data item.
|
|
21
|
+
* */
|
|
22
|
+
const getDataItemDACResourcePath = (prefixPath = [], operation, typeName, primaryKeyValue) => [
|
|
23
|
+
...(0, exports.getItemTypeDACResourcePath)(prefixPath, operation, typeName),
|
|
24
|
+
primaryKeyValue,
|
|
25
|
+
];
|
|
26
|
+
exports.getDataItemDACResourcePath = getDataItemDACResourcePath;
|
|
27
|
+
/**
|
|
28
|
+
* Get the DAC Resource Path for a given item relationship origin.
|
|
29
|
+
* */
|
|
30
|
+
const getItemRelationshipOriginDACResourcePath = (prefixPath = [], operation, itemRelationshipOrigin) => {
|
|
31
|
+
const { fromTypeName, fromTypeFieldName } = itemRelationshipOrigin;
|
|
32
|
+
return [
|
|
33
|
+
...(0, exports.getItemTypeDACResourcePath)(prefixPath, operation, TypeInfoORM_1.ITEM_RELATIONSHIP_DAC_RESOURCE_NAME),
|
|
34
|
+
fromTypeName,
|
|
35
|
+
fromTypeFieldName,
|
|
36
|
+
];
|
|
37
|
+
};
|
|
38
|
+
exports.getItemRelationshipOriginDACResourcePath = getItemRelationshipOriginDACResourcePath;
|
|
39
|
+
/**
|
|
40
|
+
* Get the DAC Resource Path for a given item relationship.
|
|
41
|
+
* */
|
|
42
|
+
const getItemRelationshipDACResourcePath = (prefixPath = [], operation, itemRelationship) => {
|
|
43
|
+
const { fromTypeName, fromTypeFieldName, fromTypePrimaryFieldValue, toTypePrimaryFieldValue, } = itemRelationship;
|
|
44
|
+
return [
|
|
45
|
+
...(0, exports.getItemTypeDACResourcePath)(prefixPath, operation, TypeInfoORM_1.ITEM_RELATIONSHIP_DAC_RESOURCE_NAME),
|
|
46
|
+
fromTypeName,
|
|
47
|
+
fromTypeFieldName,
|
|
48
|
+
fromTypePrimaryFieldValue,
|
|
49
|
+
toTypePrimaryFieldValue,
|
|
50
|
+
];
|
|
51
|
+
};
|
|
52
|
+
exports.getItemRelationshipDACResourcePath = getItemRelationshipDACResourcePath;
|
|
53
|
+
/**
|
|
54
|
+
* Get the DAC Resource Path for a given data item with a specific field value.
|
|
55
|
+
* */
|
|
56
|
+
const getDataItemFieldValueDACResourcePath = (itemPath, fieldName, fieldValue) => [...itemPath, fieldName, fieldValue];
|
|
57
|
+
exports.getDataItemFieldValueDACResourcePath = getDataItemFieldValueDACResourcePath;
|
|
58
|
+
/**
|
|
59
|
+
* Get a DAC Constraint for a given item type.
|
|
60
|
+
* */
|
|
61
|
+
const getItemTypeDACConstraint = (prefixPath = [], operation, typeName, constraintType) => ({
|
|
62
|
+
type: constraintType,
|
|
63
|
+
pathIsPrefix: true,
|
|
64
|
+
resourcePath: (0, exports.getItemTypeDACResourcePath)(prefixPath, operation, typeName),
|
|
65
|
+
});
|
|
66
|
+
exports.getItemTypeDACConstraint = getItemTypeDACConstraint;
|
|
67
|
+
/**
|
|
68
|
+
* Get a DAC Constraint for a given item relationship origin.
|
|
69
|
+
* */
|
|
70
|
+
const getItemRelationshipOriginDACConstraint = (prefixPath = [], operation, itemRelationshipOrigin, constraintType) => ({
|
|
71
|
+
type: constraintType,
|
|
72
|
+
pathIsPrefix: true,
|
|
73
|
+
resourcePath: (0, exports.getItemRelationshipOriginDACResourcePath)(prefixPath, operation, itemRelationshipOrigin),
|
|
74
|
+
});
|
|
75
|
+
exports.getItemRelationshipOriginDACConstraint = getItemRelationshipOriginDACConstraint;
|
|
76
|
+
/**
|
|
77
|
+
* Get a DAC Role for a given item type.
|
|
78
|
+
* */
|
|
79
|
+
const getItemTypeDACRole = (prefixPath = [], operation, typeName, constraintType) => ({
|
|
80
|
+
constraints: [
|
|
81
|
+
(0, exports.getItemTypeDACConstraint)(prefixPath, operation, typeName, constraintType),
|
|
82
|
+
],
|
|
83
|
+
});
|
|
84
|
+
exports.getItemTypeDACRole = getItemTypeDACRole;
|
|
85
|
+
/**
|
|
86
|
+
* Get a DAC Role for a given item type.
|
|
87
|
+
* */
|
|
88
|
+
const getItemRelationshipOriginDACRole = (prefixPath = [], operation, itemRelationshipOrigin, constraintType) => ({
|
|
89
|
+
constraints: [
|
|
90
|
+
(0, exports.getItemRelationshipOriginDACConstraint)(prefixPath, operation, itemRelationshipOrigin, constraintType),
|
|
91
|
+
],
|
|
92
|
+
});
|
|
93
|
+
exports.getItemRelationshipOriginDACRole = getItemRelationshipOriginDACRole;
|
|
94
|
+
/**
|
|
95
|
+
* Get a DAC Role encompassing all operations for all types and relationships for an ORM with the given DAC prefix.
|
|
96
|
+
* */
|
|
97
|
+
const getFullORMDACRole = (prefixPath = [], constraintType) => ({
|
|
98
|
+
constraints: [
|
|
99
|
+
{
|
|
100
|
+
type: constraintType,
|
|
101
|
+
pathIsPrefix: true,
|
|
102
|
+
resourcePath: (0, exports.getORMDACResourcePath)(prefixPath, TypeInfoORM_1.OperationGroup.ALL_OPERATIONS),
|
|
103
|
+
},
|
|
104
|
+
],
|
|
105
|
+
});
|
|
106
|
+
exports.getFullORMDACRole = getFullORMDACRole;
|
|
107
|
+
/**
|
|
108
|
+
* Get the access to a given data item resource for a given DAC role.
|
|
109
|
+
* */
|
|
110
|
+
const getDACRoleHasAccessToDataItem = (prefixPath, operation, typeName, dataItem, typeInfo, role, getDACRoleById,
|
|
111
|
+
/**
|
|
112
|
+
* SECURITY: Don't use this if you want realtime role resolution.
|
|
113
|
+
* */
|
|
114
|
+
dacRoleCache) => {
|
|
115
|
+
const cleanItemPathPrefix = prefixPath ? prefixPath : [];
|
|
116
|
+
const resultMap = {
|
|
117
|
+
allowed: false,
|
|
118
|
+
denied: false,
|
|
119
|
+
fieldsResources: {},
|
|
120
|
+
};
|
|
121
|
+
if (typeof dataItem === "object" &&
|
|
122
|
+
dataItem !== null &&
|
|
123
|
+
typeName &&
|
|
124
|
+
typeInfo) {
|
|
125
|
+
const { primaryField, fields = {} } = typeInfo;
|
|
126
|
+
if (primaryField) {
|
|
127
|
+
const cleanPrimaryField = primaryField;
|
|
128
|
+
const primaryFieldValue = typeof dataItem[cleanPrimaryField] === "undefined"
|
|
129
|
+
? null
|
|
130
|
+
: dataItem[cleanPrimaryField];
|
|
131
|
+
if (typeof primaryFieldValue !== "undefined" &&
|
|
132
|
+
primaryFieldValue !== null &&
|
|
133
|
+
!Array.isArray(primaryFieldValue)) {
|
|
134
|
+
const dataItemFields = Object.keys(dataItem);
|
|
135
|
+
const primaryResourcePath = (0, exports.getDataItemDACResourcePath)(cleanItemPathPrefix, operation, typeName, primaryFieldValue);
|
|
136
|
+
const { allowed: primaryResourceAllowed, denied: primaryResourceDenied, } = (0, DataAccessControl_1.getResourceAccessByDACRole)(primaryResourcePath, role, getDACRoleById, dacRoleCache);
|
|
137
|
+
resultMap.allowed = primaryResourceAllowed;
|
|
138
|
+
resultMap.denied = primaryResourceDenied;
|
|
139
|
+
for (const dIF of dataItemFields) {
|
|
140
|
+
const typeInfoField = fields[dIF];
|
|
141
|
+
if (typeInfoField) {
|
|
142
|
+
const { typeReference, array: fieldIsArray } = typeInfoField;
|
|
143
|
+
if (!typeReference && !fieldIsArray) {
|
|
144
|
+
const fieldResourcePath = (0, exports.getDataItemFieldValueDACResourcePath)(primaryResourcePath, dIF, dataItem[dIF]);
|
|
145
|
+
const { allowed: fieldResourceAllowed, denied: fieldResourceDenied, } = (0, DataAccessControl_1.getResourceAccessByDACRole)(fieldResourcePath, role, getDACRoleById, dacRoleCache);
|
|
146
|
+
resultMap.fieldsResources = {
|
|
147
|
+
...resultMap.fieldsResources,
|
|
148
|
+
[dIF]: {
|
|
149
|
+
allowed: fieldResourceAllowed,
|
|
150
|
+
denied: fieldResourceDenied,
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return resultMap;
|
|
160
|
+
};
|
|
161
|
+
exports.getDACRoleHasAccessToDataItem = getDACRoleHasAccessToDataItem;
|
|
162
|
+
/**
|
|
163
|
+
* Merge multiple DAC data item resource access result maps.
|
|
164
|
+
* */
|
|
165
|
+
const mergeDACDataItemResourceAccessResultMaps = (...maps) => {
|
|
166
|
+
let outputMap = {
|
|
167
|
+
allowed: false,
|
|
168
|
+
denied: false,
|
|
169
|
+
fieldsResources: {},
|
|
170
|
+
};
|
|
171
|
+
for (const m of maps) {
|
|
172
|
+
const { fieldsResources: mFR = {} } = m;
|
|
173
|
+
const { fieldsResources: oFR = {} } = outputMap;
|
|
174
|
+
const fRFieldNames = [...Object.keys(mFR), ...Object.keys(oFR)];
|
|
175
|
+
let newFieldsResources = {};
|
|
176
|
+
for (const mFRField of fRFieldNames) {
|
|
177
|
+
const mFRFieldData = mFR[mFRField] || {
|
|
178
|
+
allowed: false,
|
|
179
|
+
denied: false,
|
|
180
|
+
};
|
|
181
|
+
const oFRFieldData = oFR[mFRField] || {
|
|
182
|
+
allowed: false,
|
|
183
|
+
denied: false,
|
|
184
|
+
};
|
|
185
|
+
newFieldsResources = {
|
|
186
|
+
...newFieldsResources,
|
|
187
|
+
[mFRField]: (0, DataAccessControl_1.mergeDACAccessResults)(mFRFieldData, oFRFieldData),
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
outputMap = {
|
|
191
|
+
...(0, DataAccessControl_1.mergeDACAccessResults)(m, outputMap),
|
|
192
|
+
fieldsResources: newFieldsResources,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
return outputMap;
|
|
196
|
+
};
|
|
197
|
+
exports.mergeDACDataItemResourceAccessResultMaps = mergeDACDataItemResourceAccessResultMaps;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { DataItemDBDriver } from "./drivers";
|
|
2
|
+
import { TypeInfoDataItem } from "../../common/TypeParsing/TypeInfo";
|
|
3
|
+
import { ListItemsConfig, ListItemsResults } from "../../common/SearchTypes";
|
|
4
|
+
/**
|
|
5
|
+
* Execute a list items request against a data item driver.
|
|
6
|
+
* */
|
|
7
|
+
export declare const executeDriverListItems: (driver: DataItemDBDriver<any, any>, config: ListItemsConfig, filter?: (item: Partial<TypeInfoDataItem>) => boolean, transform?: (item: Partial<TypeInfoDataItem>) => Partial<TypeInfoDataItem>, selectedFields?: (keyof TypeInfoDataItem)[]) => Promise<ListItemsResults<Partial<TypeInfoDataItem>>>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.executeDriverListItems = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Execute a list items request against a data item driver.
|
|
6
|
+
* */
|
|
7
|
+
const executeDriverListItems = async (driver, config, filter, transform, selectedFields) => {
|
|
8
|
+
const filteredItems = [];
|
|
9
|
+
const { items = [], cursor: newCursor } = (await driver.listItems(config, filter ? undefined : selectedFields));
|
|
10
|
+
for (const itm of items) {
|
|
11
|
+
const includeItem = filter ? filter(itm) : true;
|
|
12
|
+
if (includeItem) {
|
|
13
|
+
const transformedItem = transform ? transform(itm) : itm;
|
|
14
|
+
filteredItems.push(transformedItem);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
items: filteredItems,
|
|
19
|
+
cursor: newCursor,
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
exports.executeDriverListItems = executeDriverListItems;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { BaseTypeInfoORMServiceConfig, TypeInfoORMDACConfig } from "./TypeInfoORMService";
|
|
2
|
+
import { AuthInfo, RouteAuthConfig, RouteMap } from "../Router/Types";
|
|
3
|
+
import { TypeInfoORMAPI } from "../../common/TypeInfoORM";
|
|
4
|
+
import { DACRole } from "../DataAccessControl";
|
|
5
|
+
/**
|
|
6
|
+
* A collection of errors that can occur when creating or using a Type Info ORM Route Map.
|
|
7
|
+
* */
|
|
8
|
+
export declare enum TYPE_INFO_ORM_ROUTE_MAP_ERRORS {
|
|
9
|
+
MISSING_ACCESSING_ROLE = "MISSING_ACCESSING_ROLE",
|
|
10
|
+
MISSING_ACCESSING_ROLE_GETTER = "MISSING_ACCESSING_ROLE_GETTER"
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* A map of Type Info ORM API paths to method names.
|
|
14
|
+
* */
|
|
15
|
+
export declare const TYPE_INFO_ORM_API_PATH_METHOD_NAME_MAP: Record<string, keyof TypeInfoORMAPI>;
|
|
16
|
+
/**
|
|
17
|
+
* Get a route map for a Type Info ORM service.
|
|
18
|
+
* */
|
|
19
|
+
export declare const getTypeInfoORMRouteMap: (config: BaseTypeInfoORMServiceConfig, dacConfig?: Omit<TypeInfoORMDACConfig, "accessingRole">, getAccessingRole?: (authInfo: AuthInfo) => DACRole, authConfig?: RouteAuthConfig) => RouteMap;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTypeInfoORMRouteMap = exports.TYPE_INFO_ORM_API_PATH_METHOD_NAME_MAP = exports.TYPE_INFO_ORM_ROUTE_MAP_ERRORS = void 0;
|
|
4
|
+
const TypeInfoORMService_1 = require("./TypeInfoORMService");
|
|
5
|
+
const Router_1 = require("../Router");
|
|
6
|
+
/**
|
|
7
|
+
* A collection of errors that can occur when creating or using a Type Info ORM Route Map.
|
|
8
|
+
* */
|
|
9
|
+
var TYPE_INFO_ORM_ROUTE_MAP_ERRORS;
|
|
10
|
+
(function (TYPE_INFO_ORM_ROUTE_MAP_ERRORS) {
|
|
11
|
+
TYPE_INFO_ORM_ROUTE_MAP_ERRORS["MISSING_ACCESSING_ROLE"] = "MISSING_ACCESSING_ROLE";
|
|
12
|
+
TYPE_INFO_ORM_ROUTE_MAP_ERRORS["MISSING_ACCESSING_ROLE_GETTER"] = "MISSING_ACCESSING_ROLE_GETTER";
|
|
13
|
+
})(TYPE_INFO_ORM_ROUTE_MAP_ERRORS || (exports.TYPE_INFO_ORM_ROUTE_MAP_ERRORS = TYPE_INFO_ORM_ROUTE_MAP_ERRORS = {}));
|
|
14
|
+
/**
|
|
15
|
+
* A map of Type Info ORM API paths to method names.
|
|
16
|
+
* */
|
|
17
|
+
exports.TYPE_INFO_ORM_API_PATH_METHOD_NAME_MAP = {
|
|
18
|
+
"create-relationship": "createRelationship",
|
|
19
|
+
"delete-relationship": "deleteRelationship",
|
|
20
|
+
"list-relationships": "listRelationships",
|
|
21
|
+
create: "create",
|
|
22
|
+
read: "read",
|
|
23
|
+
update: "update",
|
|
24
|
+
delete: "delete",
|
|
25
|
+
list: "list",
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Get a route map for a Type Info ORM service.
|
|
29
|
+
* */
|
|
30
|
+
const getTypeInfoORMRouteMap = (config, dacConfig, getAccessingRole, authConfig) => {
|
|
31
|
+
if (dacConfig && !getAccessingRole) {
|
|
32
|
+
throw {
|
|
33
|
+
message: TYPE_INFO_ORM_ROUTE_MAP_ERRORS.MISSING_ACCESSING_ROLE_GETTER,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
const ormMethodFactory = (methodName, eventData) => {
|
|
38
|
+
const { authInfo } = eventData;
|
|
39
|
+
const accessingRole = getAccessingRole
|
|
40
|
+
? getAccessingRole(authInfo)
|
|
41
|
+
: undefined;
|
|
42
|
+
if (dacConfig && !accessingRole) {
|
|
43
|
+
throw {
|
|
44
|
+
message: TYPE_INFO_ORM_ROUTE_MAP_ERRORS.MISSING_ACCESSING_ROLE,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
const dacOptions = dacConfig
|
|
49
|
+
? {
|
|
50
|
+
useDAC: true,
|
|
51
|
+
dacConfig: {
|
|
52
|
+
...dacConfig,
|
|
53
|
+
accessingRole: accessingRole,
|
|
54
|
+
},
|
|
55
|
+
}
|
|
56
|
+
: {
|
|
57
|
+
useDAC: false,
|
|
58
|
+
};
|
|
59
|
+
// TODO: Maybe don't instantiate a new ORM service for each method.
|
|
60
|
+
const orm = new TypeInfoORMService_1.TypeInfoORMService({
|
|
61
|
+
...config,
|
|
62
|
+
...dacOptions,
|
|
63
|
+
});
|
|
64
|
+
return orm[methodName];
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
const getRoute = (path, methodName) => ({
|
|
68
|
+
path,
|
|
69
|
+
authConfig: authConfig ?? {
|
|
70
|
+
anyAuthorized: true,
|
|
71
|
+
},
|
|
72
|
+
handlerFactory: (eventData) => ormMethodFactory(methodName, eventData),
|
|
73
|
+
});
|
|
74
|
+
let routeMap = {};
|
|
75
|
+
for (const p in exports.TYPE_INFO_ORM_API_PATH_METHOD_NAME_MAP) {
|
|
76
|
+
const m = exports.TYPE_INFO_ORM_API_PATH_METHOD_NAME_MAP[p];
|
|
77
|
+
routeMap = (0, Router_1.addRouteToRouteMap)(routeMap, getRoute(p, m));
|
|
78
|
+
}
|
|
79
|
+
return routeMap;
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
exports.getTypeInfoORMRouteMap = getTypeInfoORMRouteMap;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { LiteralValue, TypeInfo, TypeInfoDataItem, TypeInfoMap, TypeOperation } from "../../common/TypeParsing/TypeInfo";
|
|
2
|
+
import { CustomTypeInfoFieldValidatorMap } from "../../common/TypeParsing/Validation";
|
|
3
|
+
import { ListItemsConfig, ListItemsResults, ListRelationshipsConfig } from "../../common/SearchTypes";
|
|
4
|
+
import { DeleteRelationshipResults, RelationshipOperation, TypeInfoORMAPI } from "../../common/TypeInfoORM";
|
|
5
|
+
import { DataItemDBDriver, ItemRelationshipDBDriver } from "./drivers";
|
|
6
|
+
import { BaseItemRelationshipInfo, ItemRelationshipInfo, ItemRelationshipInfoKeys, ItemRelationshipInfoType, ItemRelationshipOriginatingItemInfo } from "../../common/ItemRelationshipInfoTypes";
|
|
7
|
+
import { DACAccessResult, DACDataItemResourceAccessResultMap, DACRole } from "../DataAccessControl";
|
|
8
|
+
export declare const cleanRelationshipItem: (relationshipItem: BaseItemRelationshipInfo) => BaseItemRelationshipInfo;
|
|
9
|
+
export declare const getDriverMethodWithModifiedError: <ItemType extends TypeInfoDataItem, UniquelyIdentifyingFieldName extends keyof ItemType, DriverMethodNameType extends keyof DataItemDBDriver<ItemType, UniquelyIdentifyingFieldName>, MethodType extends DataItemDBDriver<ItemType, UniquelyIdentifyingFieldName>[DriverMethodNameType]>(extendedData: Record<any, any>, driver: DataItemDBDriver<ItemType, UniquelyIdentifyingFieldName>, driverMethodName: DriverMethodNameType) => MethodType;
|
|
10
|
+
/**
|
|
11
|
+
* The configuration for the TypeInfoORMService DAC features.
|
|
12
|
+
* */
|
|
13
|
+
export type TypeInfoORMDACConfig = {
|
|
14
|
+
itemResourcePathPrefix: LiteralValue[];
|
|
15
|
+
relationshipResourcePathPrefix: LiteralValue[];
|
|
16
|
+
accessingRole: DACRole;
|
|
17
|
+
getDACRoleById: (id: string) => DACRole;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* The basis for the configuration for the TypeInfoORMService.
|
|
21
|
+
* */
|
|
22
|
+
export type BaseTypeInfoORMServiceConfig = {
|
|
23
|
+
typeInfoMap: TypeInfoMap;
|
|
24
|
+
getDriver: (typeName: string) => DataItemDBDriver<any, any>;
|
|
25
|
+
getRelationshipDriver: (typeName: string, fieldName: string) => ItemRelationshipDBDriver;
|
|
26
|
+
createRelationshipCleanupItem?: (relationshipOriginatingItem: ItemRelationshipOriginatingItemInfo) => Promise<void>;
|
|
27
|
+
customValidators?: CustomTypeInfoFieldValidatorMap;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* The options determining the usage of DAC features in a {@link TypeInfoORMServiceConfig}.
|
|
31
|
+
* */
|
|
32
|
+
export type TypeInfoORMServiceDACOptions = {
|
|
33
|
+
useDAC: true;
|
|
34
|
+
dacConfig: TypeInfoORMDACConfig;
|
|
35
|
+
} | {
|
|
36
|
+
useDAC: false;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* The configuration for the TypeInfoORMService, including DAC features.
|
|
40
|
+
* */
|
|
41
|
+
export type TypeInfoORMServiceConfig = BaseTypeInfoORMServiceConfig & TypeInfoORMServiceDACOptions;
|
|
42
|
+
/**
|
|
43
|
+
* A service using TypeInfo to perform ORM operations with one or many `DBServiceItemDriver` instances.
|
|
44
|
+
* */
|
|
45
|
+
export declare class TypeInfoORMService implements TypeInfoORMAPI {
|
|
46
|
+
protected config: TypeInfoORMServiceConfig;
|
|
47
|
+
protected dacRoleCache: Record<string, DACRole>;
|
|
48
|
+
constructor(config: TypeInfoORMServiceConfig);
|
|
49
|
+
protected getItemDACValidation: (item: Partial<TypeInfoDataItem>, typeName: string, typeOperation: TypeOperation) => DACDataItemResourceAccessResultMap;
|
|
50
|
+
protected getRelationshipDACValidation: (itemRelationship: BaseItemRelationshipInfo, relationshipOperation: RelationshipOperation) => DACAccessResult;
|
|
51
|
+
protected getWrappedDriverWithExtendedErrorData: <ItemType extends TypeInfoDataItem, UniquelyIdentifyingFieldName extends keyof ItemType>(driver: DataItemDBDriver<ItemType, UniquelyIdentifyingFieldName>, extendedData: Record<any, any>) => DataItemDBDriver<ItemType, UniquelyIdentifyingFieldName>;
|
|
52
|
+
protected getDriverInternal: (typeName: string) => DataItemDBDriver<any, any>;
|
|
53
|
+
protected getRelationshipDriverInternal: (typeName: string, fieldName: string) => ItemRelationshipDBDriver;
|
|
54
|
+
protected getTypeInfo: (typeName: string) => TypeInfo;
|
|
55
|
+
protected validateReadOperation: (typeName: string, selectedFields?: (keyof TypeInfoDataItem)[]) => void;
|
|
56
|
+
protected validate: (typeName: string, item: TypeInfoDataItem, typeOperation: TypeOperation, itemIsPartial?: boolean) => void;
|
|
57
|
+
protected getCleanItem: (typeName: string, item: Partial<TypeInfoDataItem>, dacFieldResources?: Partial<Record<keyof TypeInfoDataItem, DACAccessResult>>, selectedFields?: (keyof TypeInfoDataItem)[]) => Partial<TypeInfoDataItem>;
|
|
58
|
+
protected getCleanSelectedFields: (typeName: string, selectedFields?: (keyof TypeInfoDataItem)[]) => (keyof TypeInfoDataItem)[] | undefined;
|
|
59
|
+
protected validateRelationshipItem: (relationshipItem: ItemRelationshipInfoType, omitFields?: ItemRelationshipInfoKeys[]) => void;
|
|
60
|
+
protected cleanupRelationships: (relationshipOriginatingItem: ItemRelationshipOriginatingItemInfo) => Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Create a new relationship between two items.
|
|
63
|
+
* */
|
|
64
|
+
createRelationship: (relationshipItem: BaseItemRelationshipInfo) => Promise<boolean>;
|
|
65
|
+
/**
|
|
66
|
+
* Delete a relationship between two items.
|
|
67
|
+
* */
|
|
68
|
+
deleteRelationship: (relationshipItem: BaseItemRelationshipInfo) => Promise<DeleteRelationshipResults>;
|
|
69
|
+
/**
|
|
70
|
+
* List the relationships for a given item.
|
|
71
|
+
* */
|
|
72
|
+
listRelationships: (config: ListRelationshipsConfig) => Promise<ListItemsResults<ItemRelationshipInfo>>;
|
|
73
|
+
listRelatedItems: (config: ListRelationshipsConfig, selectedFields?: (keyof TypeInfoDataItem)[]) => Promise<{
|
|
74
|
+
items: Partial<TypeInfoDataItem>[];
|
|
75
|
+
cursor: string | undefined;
|
|
76
|
+
}>;
|
|
77
|
+
/**
|
|
78
|
+
* Create a new item of the given type.
|
|
79
|
+
* */
|
|
80
|
+
create: (typeName: string, item: TypeInfoDataItem) => Promise<any>;
|
|
81
|
+
/**
|
|
82
|
+
* Read an existing item of the given type.
|
|
83
|
+
* */
|
|
84
|
+
read: (typeName: string, primaryFieldValue: any, selectedFields?: string[]) => Promise<Partial<TypeInfoDataItem>>;
|
|
85
|
+
/**
|
|
86
|
+
* Update an existing item of the given type.
|
|
87
|
+
*
|
|
88
|
+
* This update will always act as a **patch**.
|
|
89
|
+
* Use `null` to signify the deletion of a field.
|
|
90
|
+
* Assign values to **all** fields to perform a **replacement**.
|
|
91
|
+
*
|
|
92
|
+
* The `item` **must always** contain its **primary field value**.
|
|
93
|
+
* */
|
|
94
|
+
update: (typeName: string, item: TypeInfoDataItem) => Promise<boolean>;
|
|
95
|
+
/**
|
|
96
|
+
* Delete an existing item of the given type.
|
|
97
|
+
* */
|
|
98
|
+
delete: (typeName: string, primaryFieldValue: any) => Promise<boolean>;
|
|
99
|
+
/**
|
|
100
|
+
* List items of the given type, with the given criteria.
|
|
101
|
+
* */
|
|
102
|
+
list: (typeName: string, config: ListItemsConfig, selectedFields?: (keyof TypeInfoDataItem)[]) => Promise<ListItemsResults<Partial<TypeInfoDataItem>>>;
|
|
103
|
+
}
|