@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
package/README.md
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Voltra
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
|
|
5
|
+
<style>
|
|
6
|
+
|
|
7
|
+
.nav-button {
|
|
8
|
+
background: linear-gradient(145deg, #b285c9, #5e3a76); color: white; border: none; border-radius: 50px; padding:
|
|
9
|
+
15px 30px; font-size: 18px; font-weight: bold; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1), 0
|
|
10
|
+
8px 15px rgba(0, 0, 0, 0.1); transition: all 0.3s ease; cursor: pointer; text-decoration: none; display: inline-block;"
|
|
11
|
+
onmouseover="this.style.background='linear-gradient(145deg, #a374b9, #4d2d61)'; this.style.boxShadow='0 6px 8px rgba(0,
|
|
12
|
+
0, 0, 0.2), 0 12px 20px rgba(0, 0, 0, 0.2)'; this.style.transform='translateY(-2px)';" onmouseout="
|
|
13
|
+
this.style.background='linear-gradient(145deg, #b285c9, #5e3a76)'; this.style.boxShadow='0 4px 6px rgba(0, 0, 0, 0.1), 0
|
|
14
|
+
8px 15px rgba(0, 0, 0, 0.1)'; this.style.transform='translateY(0)';
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
</style>
|
|
18
|
+
|
|
19
|
+
------------
|
|
20
|
+
|
|
21
|
+
<a class="nav-button" href="https://docs.voltra.app">See The Demos</a>
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
### Install
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
yarn add @resistdesign/voltra
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## With our powers combined!
|
|
32
|
+
|
|
33
|
+
<table style="border: 0 solid black;">
|
|
34
|
+
<tbody>
|
|
35
|
+
<tr>
|
|
36
|
+
<td>Voltra is a state-of-the-art platform designed to streamline the creation of cloud infrastructure and complex web
|
|
37
|
+
applications. It features a robust API with RPC, CORS, and versatile authentication options, alongside dynamic app
|
|
38
|
+
development tools like TypeScript-driven form generation. The platform excels in Infrastructure as Code (IaC), offering
|
|
39
|
+
features like chainable stacks and comprehensive parameter support. Its intuitive interface simplifies the addition of
|
|
40
|
+
databases, storage, authentication, and functions through easy-to-use packs. Furthermore, Voltra enhances development
|
|
41
|
+
workflows with advanced state management, and a smart, lightweight routing system for React
|
|
42
|
+
front-end apps.</td>
|
|
43
|
+
<td><img src="https://docs.voltra.app/images/Voltra%20Robot%20Coming%20Together.png" style="width: 200em;" /></td>
|
|
44
|
+
</tr>
|
|
45
|
+
</tbody>
|
|
46
|
+
</table>
|
|
47
|
+
|
|
48
|
+
## Features
|
|
49
|
+
|
|
50
|
+
| API | App | IaC |
|
|
51
|
+
|-----------------------------------------------------------------------------|-----------------------------------------------|---------------------------------------------------------------|
|
|
52
|
+
| RPC | Easy Layout | Full Parameter Support: Groups/Labels/Types/etc... |
|
|
53
|
+
| Auth: Public/Secured/Role Based | State Management | Packs: Easy to add Database/Storage/Auth/Functions/etc... |
|
|
54
|
+
| Routing: Nesting/Handlers/Injected Handlers | Routing: Param Handlers/Parallel Routes/Hooks | Utilities: Patching Stacks/Constants/Standard Includes/etc... |
|
|
55
|
+
| ORM: TypeScript Type Driven Auto-generated Data Contexts with Relationships | | Typed Build Spec Creation |
|
|
56
|
+
| | | Typed Resource Parameters |
|
|
57
|
+
|
|
58
|
+
## Releasing
|
|
59
|
+
|
|
60
|
+
Voltra publishes npm packages from GitHub Releases. The release tag is used verbatim
|
|
61
|
+
as the npm package version, so it must be valid SemVer without a leading `v`.
|
|
62
|
+
|
|
63
|
+
### Stable releases
|
|
64
|
+
|
|
65
|
+
Use tags like:
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
3.0.0
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Pre-releases (alpha, beta, rc)
|
|
72
|
+
|
|
73
|
+
Use tags like:
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
3.0.0-alpha.0
|
|
77
|
+
3.0.0-beta.1
|
|
78
|
+
3.0.0-rc.1
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
When the GitHub Release is marked as a prerelease, the npm publish step uses the
|
|
82
|
+
`next` dist-tag instead of `latest`. Consumers can install prereleases with:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
npm install @resistdesign/voltra@next
|
|
86
|
+
```
|
package/package.json
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@resistdesign/voltra",
|
|
3
|
+
"version": "0.0.0-alpha.0",
|
|
4
|
+
"description": "With our powers combined!",
|
|
5
|
+
"homepage": "https://voltra.app",
|
|
6
|
+
"repository": "git@github.com:resistdesign/voltra.git",
|
|
7
|
+
"author": "Resist Design",
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"bin": {
|
|
10
|
+
"vest": "src/common/Testing/CLI.ts"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"src/**/*",
|
|
14
|
+
"README.md",
|
|
15
|
+
"package.json",
|
|
16
|
+
"!src/iac/types/CloudFormationResourceSpecification.js"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsc && yarn prep-dist",
|
|
20
|
+
"test": "ts-node src/common/Testing/CLI.ts ./src/**/*.spec.json",
|
|
21
|
+
"test:gen": "ts-node src/common/Testing/CLI.ts --generate ./src/**/*.spec.json",
|
|
22
|
+
"doc": "typedoc",
|
|
23
|
+
"doc:dev": "typedoc --watch",
|
|
24
|
+
"doc-to-site": "cp -r ./docs site-dist/app/",
|
|
25
|
+
"prep-dist": "cp package.json dist/ && cp README.md dist/ && cp .npmignore dist/",
|
|
26
|
+
"site:build:app": "parcel build site/app/index.html --dist-dir site-dist --target app && yarn finalize-site",
|
|
27
|
+
"site:build:api": "parcel build site/api/index.ts --target api --dist-dir site-dist --no-source-maps --no-optimize --no-scope-hoist",
|
|
28
|
+
"site:build:iac": "ts-node ./site/iac/index.ts",
|
|
29
|
+
"start": "parcel site/app/index.html --host docs-local.demo.voltra.app --dist-dir site-dist/app --https",
|
|
30
|
+
"finalize-site": "yarn doc && yarn doc-to-site && cp CNAME site-dist/app/ && cp -r ./images site-dist/app/",
|
|
31
|
+
"iac:types:gen": "ts-node ./src/iac/types/generate.ts"
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@aws-sdk/client-dynamodb": "^3.490.0",
|
|
35
|
+
"@aws-sdk/client-s3": "^3.490.0",
|
|
36
|
+
"@aws-sdk/s3-request-presigner": "^3.490.0",
|
|
37
|
+
"@aws-sdk/util-dynamodb": "^3.490.0",
|
|
38
|
+
"@picocss/pico": "^2.1.1",
|
|
39
|
+
"ace-builds": "^1.32.3",
|
|
40
|
+
"fast-glob": "^3.3.3",
|
|
41
|
+
"picocolors": "^1.1.1",
|
|
42
|
+
"react": "^18.2.0",
|
|
43
|
+
"react-ace": "^10.1.0",
|
|
44
|
+
"react-dom": "^18.3.1",
|
|
45
|
+
"styled-components": "^6.1.8",
|
|
46
|
+
"ts-node": "^10.9.2",
|
|
47
|
+
"typescript": "^5.3.3",
|
|
48
|
+
"uuid": "^11.0.3",
|
|
49
|
+
"yaml": "^2.3.4"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@parcel/packager-raw-url": "2.13.3",
|
|
53
|
+
"@parcel/packager-ts": "2.13.3",
|
|
54
|
+
"@parcel/transformer-inline-string": "2.13.3",
|
|
55
|
+
"@parcel/transformer-typescript-types": "2.11.0",
|
|
56
|
+
"@parcel/transformer-webmanifest": "2.13.3",
|
|
57
|
+
"@types/cfn-response": "^1.0.8",
|
|
58
|
+
"@types/node": "^20.11.6",
|
|
59
|
+
"@types/react-dom": "^18.3.0",
|
|
60
|
+
"@types/styled-components": "^5.1.34",
|
|
61
|
+
"aws-lambda": "^1.0.7",
|
|
62
|
+
"aws-sdk": "^2.1545.0",
|
|
63
|
+
"buffer": "^5.5.0||^6.0.0",
|
|
64
|
+
"cfn-response": "^1.0.1",
|
|
65
|
+
"parcel": "^2.13.3",
|
|
66
|
+
"prettier": "^3.6.2",
|
|
67
|
+
"process": "^0.11.10",
|
|
68
|
+
"svgo": "^3",
|
|
69
|
+
"ts-morph": "^24.0.0",
|
|
70
|
+
"typedoc": "^0.25.8",
|
|
71
|
+
"typedoc-material-theme": "^1.0.2"
|
|
72
|
+
},
|
|
73
|
+
"targets": {
|
|
74
|
+
"app": {
|
|
75
|
+
"context": "browser",
|
|
76
|
+
"engines": {
|
|
77
|
+
"browsers": [
|
|
78
|
+
"last 2 version",
|
|
79
|
+
"not dead",
|
|
80
|
+
"> 0.2%"
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
"includeNodeModules": true,
|
|
84
|
+
"outputFormat": "commonjs",
|
|
85
|
+
"isLibrary": false,
|
|
86
|
+
"scopeHoist": false
|
|
87
|
+
},
|
|
88
|
+
"api": {
|
|
89
|
+
"context": "node",
|
|
90
|
+
"engines": {
|
|
91
|
+
"node": ">=20"
|
|
92
|
+
},
|
|
93
|
+
"outputFormat": "commonjs",
|
|
94
|
+
"includeNodeModules": true,
|
|
95
|
+
"isLibrary": false,
|
|
96
|
+
"scopeHoist": false
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
"@parcel/transformer-js": {
|
|
100
|
+
"inlineFS": true,
|
|
101
|
+
"inlineEnvironment": true
|
|
102
|
+
}
|
|
103
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { LiteralValue } from "../common/TypeParsing/TypeInfo";
|
|
2
|
+
/**
|
|
3
|
+
* The possible types of a data access control (DAC) constraint.
|
|
4
|
+
* */
|
|
5
|
+
export declare enum DACConstraintType {
|
|
6
|
+
ALLOW = "ALLOW",
|
|
7
|
+
DENY = "DENY"
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* A data access control (DAC) constraint.
|
|
11
|
+
* */
|
|
12
|
+
export type DACConstraint = {
|
|
13
|
+
type: DACConstraintType;
|
|
14
|
+
resourcePath: LiteralValue[];
|
|
15
|
+
pathIsPrefix?: boolean;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* The primary properties for a data access control (DAC) role.
|
|
19
|
+
* */
|
|
20
|
+
export type BaseDACRole = {
|
|
21
|
+
childRoleIds?: string[];
|
|
22
|
+
constraints: DACConstraint[];
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* A data access control (DAC) role which has been stored and can be accessed by an `id`.
|
|
26
|
+
* */
|
|
27
|
+
export type DACRole = {
|
|
28
|
+
id: string;
|
|
29
|
+
} & BaseDACRole;
|
|
30
|
+
/**
|
|
31
|
+
* The result of a data access control (DAC) check.
|
|
32
|
+
* */
|
|
33
|
+
export type DACAccessResult = {
|
|
34
|
+
allowed: boolean;
|
|
35
|
+
denied: boolean;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* The result of a data access control (DAC) check for a data item.
|
|
39
|
+
* */
|
|
40
|
+
export type DACDataItemResourceAccessResultMap = DACAccessResult & {
|
|
41
|
+
fieldsResources?: Record<string, DACAccessResult>;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* The result of matching a DAC path to a resource path.
|
|
45
|
+
* */
|
|
46
|
+
export type DACPathMatchResults = {
|
|
47
|
+
prefixMatch: boolean;
|
|
48
|
+
exactMatch: boolean;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* The prototype of a DAC wildcard signifier.
|
|
52
|
+
* */
|
|
53
|
+
export declare const WILDCARD_SIGNIFIER_PROTOTYPE: Record<string, string>;
|
|
54
|
+
/**
|
|
55
|
+
* Check if a given DAC path part value is a DAC wildcard signifier.
|
|
56
|
+
* */
|
|
57
|
+
export declare const getValueIsWildcardSignifier: (value: any) => boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Check if a given DAC path matches a given resource path.
|
|
60
|
+
*
|
|
61
|
+
* Includes checking if the DAC path is a prefix of the
|
|
62
|
+
* resource path and if the DAC path is an exact match of
|
|
63
|
+
* the resource path.
|
|
64
|
+
*
|
|
65
|
+
* The DAC path can include wildcard signifier objects at
|
|
66
|
+
* various indices in order to facilitate dynamic matches
|
|
67
|
+
* and grouping by common resource aspects.
|
|
68
|
+
* */
|
|
69
|
+
export declare const getDACPathsMatch: (dacPath: LiteralValue[], resourcePath: LiteralValue[]) => DACPathMatchResults;
|
|
70
|
+
/**
|
|
71
|
+
* Get the flattened constraints of a DAC role.
|
|
72
|
+
* */
|
|
73
|
+
export declare const getFlattenedDACConstraints: (role: DACRole, getDACRoleById: (id: string) => DACRole,
|
|
74
|
+
/**
|
|
75
|
+
* SECURITY: Don't use this if you want realtime role resolution.
|
|
76
|
+
* */
|
|
77
|
+
dacRoleCache?: Record<string, DACRole>) => DACConstraint[];
|
|
78
|
+
/**
|
|
79
|
+
* Get the access to a given resource for a given DAC role.
|
|
80
|
+
* */
|
|
81
|
+
export declare const getResourceAccessByDACRole: (fullResourcePath: LiteralValue[], role: DACRole, getDACRoleById: (id: string) => DACRole, dacRoleCache?: Record<string, DACRole>) => DACAccessResult;
|
|
82
|
+
/**
|
|
83
|
+
* Merge multiple DAC access results.
|
|
84
|
+
* */
|
|
85
|
+
export declare const mergeDACAccessResults: (...results: DACAccessResult[]) => DACAccessResult;
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mergeDACAccessResults = exports.getResourceAccessByDACRole = exports.getFlattenedDACConstraints = exports.getDACPathsMatch = exports.getValueIsWildcardSignifier = exports.WILDCARD_SIGNIFIER_PROTOTYPE = exports.DACConstraintType = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* The possible types of a data access control (DAC) constraint.
|
|
6
|
+
* */
|
|
7
|
+
var DACConstraintType;
|
|
8
|
+
(function (DACConstraintType) {
|
|
9
|
+
DACConstraintType["ALLOW"] = "ALLOW";
|
|
10
|
+
DACConstraintType["DENY"] = "DENY";
|
|
11
|
+
})(DACConstraintType || (exports.DACConstraintType = DACConstraintType = {}));
|
|
12
|
+
/**
|
|
13
|
+
* The prototype of a DAC wildcard signifier.
|
|
14
|
+
* */
|
|
15
|
+
exports.WILDCARD_SIGNIFIER_PROTOTYPE = {
|
|
16
|
+
WILD_CARD: "*",
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Check if a given DAC path part value is a DAC wildcard signifier.
|
|
20
|
+
* */
|
|
21
|
+
const getValueIsWildcardSignifier = (value) => {
|
|
22
|
+
if (typeof value === "object" && value !== null) {
|
|
23
|
+
return Object.keys(exports.WILDCARD_SIGNIFIER_PROTOTYPE).every((key) => value[key] === exports.WILDCARD_SIGNIFIER_PROTOTYPE[key]);
|
|
24
|
+
}
|
|
25
|
+
return false;
|
|
26
|
+
};
|
|
27
|
+
exports.getValueIsWildcardSignifier = getValueIsWildcardSignifier;
|
|
28
|
+
/**
|
|
29
|
+
* Check if a given DAC path matches a given resource path.
|
|
30
|
+
*
|
|
31
|
+
* Includes checking if the DAC path is a prefix of the
|
|
32
|
+
* resource path and if the DAC path is an exact match of
|
|
33
|
+
* the resource path.
|
|
34
|
+
*
|
|
35
|
+
* The DAC path can include wildcard signifier objects at
|
|
36
|
+
* various indices in order to facilitate dynamic matches
|
|
37
|
+
* and grouping by common resource aspects.
|
|
38
|
+
* */
|
|
39
|
+
const getDACPathsMatch = (dacPath, resourcePath) => {
|
|
40
|
+
const results = {
|
|
41
|
+
prefixMatch: false,
|
|
42
|
+
exactMatch: false,
|
|
43
|
+
};
|
|
44
|
+
let allDACPartsMatch = true;
|
|
45
|
+
for (let i = 0; i < dacPath.length; i++) {
|
|
46
|
+
const part = dacPath[i];
|
|
47
|
+
const resourcePart = resourcePath[i];
|
|
48
|
+
if (!(0, exports.getValueIsWildcardSignifier)(part) && part !== resourcePart) {
|
|
49
|
+
allDACPartsMatch = false;
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (allDACPartsMatch) {
|
|
54
|
+
results.prefixMatch = true;
|
|
55
|
+
}
|
|
56
|
+
if (dacPath.length !== resourcePath.length) {
|
|
57
|
+
const lastDACPart = dacPath[dacPath.length - 1];
|
|
58
|
+
const lastDACPartIsWildcard = (0, exports.getValueIsWildcardSignifier)(lastDACPart);
|
|
59
|
+
results.exactMatch = results.prefixMatch && lastDACPartIsWildcard;
|
|
60
|
+
}
|
|
61
|
+
else if (results.prefixMatch) {
|
|
62
|
+
results.exactMatch = true;
|
|
63
|
+
}
|
|
64
|
+
return results;
|
|
65
|
+
};
|
|
66
|
+
exports.getDACPathsMatch = getDACPathsMatch;
|
|
67
|
+
/**
|
|
68
|
+
* Get the flattened constraints of a DAC role.
|
|
69
|
+
* */
|
|
70
|
+
const getFlattenedDACConstraints = (role, getDACRoleById,
|
|
71
|
+
/**
|
|
72
|
+
* SECURITY: Don't use this if you want realtime role resolution.
|
|
73
|
+
* */
|
|
74
|
+
dacRoleCache) => {
|
|
75
|
+
const { childRoleIds = [], constraints = [] } = role;
|
|
76
|
+
let flattenedConstraints = [...constraints];
|
|
77
|
+
for (const cRI of childRoleIds) {
|
|
78
|
+
let childRole;
|
|
79
|
+
if (dacRoleCache && dacRoleCache[cRI]) {
|
|
80
|
+
childRole = dacRoleCache[cRI];
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
childRole = getDACRoleById(cRI);
|
|
84
|
+
if (dacRoleCache) {
|
|
85
|
+
dacRoleCache[cRI] = childRole;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
flattenedConstraints = [
|
|
89
|
+
...flattenedConstraints,
|
|
90
|
+
...(0, exports.getFlattenedDACConstraints)(childRole, getDACRoleById, dacRoleCache),
|
|
91
|
+
];
|
|
92
|
+
}
|
|
93
|
+
return flattenedConstraints;
|
|
94
|
+
};
|
|
95
|
+
exports.getFlattenedDACConstraints = getFlattenedDACConstraints;
|
|
96
|
+
/**
|
|
97
|
+
* Get the access to a given resource for a given DAC role.
|
|
98
|
+
* */
|
|
99
|
+
const getResourceAccessByDACRole = (fullResourcePath, role, getDACRoleById, dacRoleCache) => {
|
|
100
|
+
const flattenedConstraints = (0, exports.getFlattenedDACConstraints)(role, getDACRoleById, dacRoleCache);
|
|
101
|
+
let allowed = false, denied = false, lastAllowedPath = [], lastDeniedPath = [];
|
|
102
|
+
for (const constraint of flattenedConstraints) {
|
|
103
|
+
const { type, resourcePath: dacPath, pathIsPrefix } = constraint;
|
|
104
|
+
const { prefixMatch: dacPathIsPrefixOfResourcePath, exactMatch: dacPathIsExactMatch, } = (0, exports.getDACPathsMatch)(dacPath, fullResourcePath);
|
|
105
|
+
if (pathIsPrefix) {
|
|
106
|
+
if (dacPathIsPrefixOfResourcePath) {
|
|
107
|
+
if (type === DACConstraintType.ALLOW) {
|
|
108
|
+
allowed = true;
|
|
109
|
+
lastAllowedPath = dacPath;
|
|
110
|
+
// IMPORTANT: Calculate specificity.
|
|
111
|
+
if (lastAllowedPath.length > lastDeniedPath.length) {
|
|
112
|
+
denied = false;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
denied = true;
|
|
117
|
+
lastDeniedPath = dacPath;
|
|
118
|
+
// IMPORTANT: Calculate specificity.
|
|
119
|
+
if (lastDeniedPath.length > lastAllowedPath.length) {
|
|
120
|
+
allowed = false;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
if (dacPathIsExactMatch) {
|
|
127
|
+
lastAllowedPath = dacPath;
|
|
128
|
+
lastDeniedPath = dacPath;
|
|
129
|
+
if (type === DACConstraintType.ALLOW) {
|
|
130
|
+
allowed = true;
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
denied = true;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return { allowed, denied };
|
|
139
|
+
};
|
|
140
|
+
exports.getResourceAccessByDACRole = getResourceAccessByDACRole;
|
|
141
|
+
/**
|
|
142
|
+
* Merge multiple DAC access results.
|
|
143
|
+
* */
|
|
144
|
+
const mergeDACAccessResults = (...results) => {
|
|
145
|
+
let newResult = {
|
|
146
|
+
allowed: false,
|
|
147
|
+
denied: false,
|
|
148
|
+
};
|
|
149
|
+
for (const r of results) {
|
|
150
|
+
const { allowed: rAllowed, denied: rDenied } = r;
|
|
151
|
+
const { allowed: nAllowed, denied: nDenied } = newResult;
|
|
152
|
+
newResult = {
|
|
153
|
+
allowed: rAllowed || nAllowed,
|
|
154
|
+
denied: rDenied || nDenied,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
return newResult;
|
|
158
|
+
};
|
|
159
|
+
exports.mergeDACAccessResults = mergeDACAccessResults;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { LiteralValue, TypeInfo, TypeInfoDataItem } from "../../common/TypeParsing/TypeInfo";
|
|
2
|
+
import { ORMOperation } from "../../common/TypeInfoORM";
|
|
3
|
+
import { BaseDACRole, DACConstraint, DACConstraintType, DACDataItemResourceAccessResultMap, DACRole } from "../DataAccessControl";
|
|
4
|
+
import { BaseItemRelationshipInfo, ItemRelationshipOriginInfo } from "../../common/ItemRelationshipInfoTypes";
|
|
5
|
+
/**
|
|
6
|
+
* Get the DAC Resource Path for a given operation performed using an ORM with the given DAC prefix.
|
|
7
|
+
* */
|
|
8
|
+
export declare const getORMDACResourcePath: (prefixPath: LiteralValue[] | undefined, operation: ORMOperation) => LiteralValue[];
|
|
9
|
+
/**
|
|
10
|
+
* Get the DAC Resource Path for a given item type.
|
|
11
|
+
* */
|
|
12
|
+
export declare const getItemTypeDACResourcePath: (prefixPath: LiteralValue[] | undefined, operation: ORMOperation, typeName: string) => LiteralValue[];
|
|
13
|
+
/**
|
|
14
|
+
* Get the DAC Resource Path for a given data item.
|
|
15
|
+
* */
|
|
16
|
+
export declare const getDataItemDACResourcePath: (prefixPath: LiteralValue[] | undefined, operation: ORMOperation, typeName: string, primaryKeyValue: LiteralValue) => LiteralValue[];
|
|
17
|
+
/**
|
|
18
|
+
* Get the DAC Resource Path for a given item relationship origin.
|
|
19
|
+
* */
|
|
20
|
+
export declare const getItemRelationshipOriginDACResourcePath: (prefixPath: LiteralValue[] | undefined, operation: ORMOperation, itemRelationshipOrigin: ItemRelationshipOriginInfo) => LiteralValue[];
|
|
21
|
+
/**
|
|
22
|
+
* Get the DAC Resource Path for a given item relationship.
|
|
23
|
+
* */
|
|
24
|
+
export declare const getItemRelationshipDACResourcePath: (prefixPath: LiteralValue[] | undefined, operation: ORMOperation, itemRelationship: BaseItemRelationshipInfo) => LiteralValue[];
|
|
25
|
+
/**
|
|
26
|
+
* Get the DAC Resource Path for a given data item with a specific field value.
|
|
27
|
+
* */
|
|
28
|
+
export declare const getDataItemFieldValueDACResourcePath: (itemPath: LiteralValue[], fieldName: string, fieldValue: LiteralValue) => LiteralValue[];
|
|
29
|
+
/**
|
|
30
|
+
* Get a DAC Constraint for a given item type.
|
|
31
|
+
* */
|
|
32
|
+
export declare const getItemTypeDACConstraint: (prefixPath: LiteralValue[] | undefined, operation: ORMOperation, typeName: string, constraintType: DACConstraintType) => DACConstraint;
|
|
33
|
+
/**
|
|
34
|
+
* Get a DAC Constraint for a given item relationship origin.
|
|
35
|
+
* */
|
|
36
|
+
export declare const getItemRelationshipOriginDACConstraint: (prefixPath: LiteralValue[] | undefined, operation: ORMOperation, itemRelationshipOrigin: ItemRelationshipOriginInfo, constraintType: DACConstraintType) => DACConstraint;
|
|
37
|
+
/**
|
|
38
|
+
* Get a DAC Role for a given item type.
|
|
39
|
+
* */
|
|
40
|
+
export declare const getItemTypeDACRole: (prefixPath: LiteralValue[] | undefined, operation: ORMOperation, typeName: string, constraintType: DACConstraintType) => BaseDACRole;
|
|
41
|
+
/**
|
|
42
|
+
* Get a DAC Role for a given item type.
|
|
43
|
+
* */
|
|
44
|
+
export declare const getItemRelationshipOriginDACRole: (prefixPath: LiteralValue[] | undefined, operation: ORMOperation, itemRelationshipOrigin: ItemRelationshipOriginInfo, constraintType: DACConstraintType) => BaseDACRole;
|
|
45
|
+
/**
|
|
46
|
+
* Get a DAC Role encompassing all operations for all types and relationships for an ORM with the given DAC prefix.
|
|
47
|
+
* */
|
|
48
|
+
export declare const getFullORMDACRole: (prefixPath: LiteralValue[] | undefined, constraintType: DACConstraintType) => BaseDACRole;
|
|
49
|
+
/**
|
|
50
|
+
* Get the access to a given data item resource for a given DAC role.
|
|
51
|
+
* */
|
|
52
|
+
export declare const getDACRoleHasAccessToDataItem: (prefixPath: LiteralValue[], operation: ORMOperation, typeName: string, dataItem: Partial<TypeInfoDataItem>, typeInfo: TypeInfo, role: DACRole, getDACRoleById: (id: string) => DACRole,
|
|
53
|
+
/**
|
|
54
|
+
* SECURITY: Don't use this if you want realtime role resolution.
|
|
55
|
+
* */
|
|
56
|
+
dacRoleCache?: Record<string, DACRole>) => DACDataItemResourceAccessResultMap;
|
|
57
|
+
/**
|
|
58
|
+
* Merge multiple DAC data item resource access result maps.
|
|
59
|
+
* */
|
|
60
|
+
export declare const mergeDACDataItemResourceAccessResultMaps: (...maps: DACDataItemResourceAccessResultMap[]) => DACDataItemResourceAccessResultMap;
|