@zenstackhq/runtime 1.0.0-beta.20 → 1.0.0-beta.22
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/constants.d.ts +9 -13
- package/constants.js +10 -14
- package/constants.js.map +1 -1
- package/enhancements/enhance.js +2 -2
- package/enhancements/enhance.js.map +1 -1
- package/enhancements/index.d.ts +1 -1
- package/enhancements/index.js +1 -1
- package/enhancements/index.js.map +1 -1
- package/enhancements/model-meta.d.ts +0 -4
- package/enhancements/model-meta.js +3 -28
- package/enhancements/model-meta.js.map +1 -1
- package/enhancements/{nested-write-vistor.js → nested-write-visitor.js} +1 -1
- package/enhancements/nested-write-visitor.js.map +1 -0
- package/enhancements/omit.d.ts +3 -3
- package/enhancements/omit.js +2 -1
- package/enhancements/omit.js.map +1 -1
- package/enhancements/password.d.ts +4 -4
- package/enhancements/password.js +4 -4
- package/enhancements/password.js.map +1 -1
- package/enhancements/policy/handler.d.ts +13 -7
- package/enhancements/policy/handler.js +134 -107
- package/enhancements/policy/handler.js.map +1 -1
- package/enhancements/policy/index.d.ts +4 -4
- package/enhancements/policy/index.js +4 -40
- package/enhancements/policy/index.js.map +1 -1
- package/enhancements/policy/policy-utils.d.ts +10 -5
- package/enhancements/policy/policy-utils.js +306 -276
- package/enhancements/policy/policy-utils.js.map +1 -1
- package/enhancements/policy/promise.d.ts +5 -0
- package/enhancements/policy/promise.js +42 -0
- package/enhancements/policy/promise.js.map +1 -0
- package/enhancements/proxy.js +27 -21
- package/enhancements/proxy.js.map +1 -1
- package/enhancements/types.d.ts +9 -0
- package/enhancements/utils.d.ts +1 -1
- package/enhancements/utils.js +3 -4
- package/enhancements/utils.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/loader.d.ts +22 -0
- package/loader.js +86 -0
- package/loader.js.map +1 -0
- package/package.json +1 -1
- package/types.d.ts +14 -13
- package/types.js.map +1 -1
- package/validation.d.ts +5 -0
- package/validation.js +13 -1
- package/validation.js.map +1 -1
- package/zod/index.d.ts +1 -0
- package/zod/index.js +1 -0
- package/zod/objects.d.ts +1 -0
- package/zod/objects.js +8 -0
- package/enhancements/nested-write-vistor.js.map +0 -1
- /package/enhancements/{nested-write-vistor.d.ts → nested-write-visitor.d.ts} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AuthUser } from '../../types';
|
|
2
|
-
import type { ModelMeta, PolicyDef, ZodSchemas } from '../types';
|
|
2
|
+
import type { CommonEnhancementOptions, ModelMeta, PolicyDef, ZodSchemas } from '../types';
|
|
3
3
|
/**
|
|
4
4
|
* Context for evaluating access policies
|
|
5
5
|
*/
|
|
@@ -9,13 +9,13 @@ export type WithPolicyContext = {
|
|
|
9
9
|
/**
|
|
10
10
|
* Options for @see withPolicy
|
|
11
11
|
*/
|
|
12
|
-
export
|
|
12
|
+
export interface WithPolicyOptions extends CommonEnhancementOptions {
|
|
13
13
|
/**
|
|
14
14
|
* Policy definition
|
|
15
15
|
*/
|
|
16
16
|
policy?: PolicyDef;
|
|
17
17
|
/**
|
|
18
|
-
* Model
|
|
18
|
+
* Model metadata
|
|
19
19
|
*/
|
|
20
20
|
modelMeta?: ModelMeta;
|
|
21
21
|
/**
|
|
@@ -26,7 +26,7 @@ export type WithPolicyOptions = {
|
|
|
26
26
|
* Whether to log Prisma query
|
|
27
27
|
*/
|
|
28
28
|
logPrismaQuery?: boolean;
|
|
29
|
-
}
|
|
29
|
+
}
|
|
30
30
|
/**
|
|
31
31
|
* Gets an enhanced Prisma client with access policy check.
|
|
32
32
|
*
|
|
@@ -6,11 +6,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
6
6
|
};
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
8
|
exports.withPolicy = void 0;
|
|
9
|
-
const path_1 = __importDefault(require("path"));
|
|
10
9
|
const semver_1 = __importDefault(require("semver"));
|
|
11
10
|
const constants_1 = require("../../constants");
|
|
11
|
+
const loader_1 = require("../../loader");
|
|
12
12
|
const validation_1 = require("../../validation");
|
|
13
|
-
const model_meta_1 = require("../model-meta");
|
|
14
13
|
const proxy_1 = require("../proxy");
|
|
15
14
|
const utils_1 = require("../utils");
|
|
16
15
|
const handler_1 = require("./handler");
|
|
@@ -31,9 +30,9 @@ function withPolicy(prisma, context, options) {
|
|
|
31
30
|
if (prismaVer && semver_1.default.lt(prismaVer, constants_1.PRISMA_MINIMUM_VERSION)) {
|
|
32
31
|
console.warn(`ZenStack requires Prisma version "${constants_1.PRISMA_MINIMUM_VERSION}" or higher. Detected version is "${prismaVer}".`);
|
|
33
32
|
}
|
|
34
|
-
const _policy = (_a = options === null || options === void 0 ? void 0 : options.policy) !== null && _a !== void 0 ? _a : getDefaultPolicy();
|
|
35
|
-
const _modelMeta = (_b = options === null || options === void 0 ? void 0 : options.modelMeta) !== null && _b !== void 0 ? _b : (0,
|
|
36
|
-
const _zodSchemas = (_c = options === null || options === void 0 ? void 0 : options.zodSchemas) !== null && _c !== void 0 ? _c : getDefaultZodSchemas();
|
|
33
|
+
const _policy = (_a = options === null || options === void 0 ? void 0 : options.policy) !== null && _a !== void 0 ? _a : (0, loader_1.getDefaultPolicy)(options === null || options === void 0 ? void 0 : options.loadPath);
|
|
34
|
+
const _modelMeta = (_b = options === null || options === void 0 ? void 0 : options.modelMeta) !== null && _b !== void 0 ? _b : (0, loader_1.getDefaultModelMeta)(options === null || options === void 0 ? void 0 : options.loadPath);
|
|
35
|
+
const _zodSchemas = (_c = options === null || options === void 0 ? void 0 : options.zodSchemas) !== null && _c !== void 0 ? _c : (0, loader_1.getDefaultZodSchemas)(options === null || options === void 0 ? void 0 : options.loadPath);
|
|
37
36
|
// validate user context
|
|
38
37
|
if (context === null || context === void 0 ? void 0 : context.user) {
|
|
39
38
|
const idFields = (0, utils_1.getIdFields)(_modelMeta, 'User');
|
|
@@ -44,39 +43,4 @@ function withPolicy(prisma, context, options) {
|
|
|
44
43
|
return (0, proxy_1.makeProxy)(prisma, _modelMeta, (_prisma, model) => new handler_1.PolicyProxyHandler(_prisma, _policy, _modelMeta, _zodSchemas, model, context === null || context === void 0 ? void 0 : context.user, options === null || options === void 0 ? void 0 : options.logPrismaQuery), 'policy');
|
|
45
44
|
}
|
|
46
45
|
exports.withPolicy = withPolicy;
|
|
47
|
-
function getDefaultPolicy() {
|
|
48
|
-
try {
|
|
49
|
-
return require('.zenstack/policy').default;
|
|
50
|
-
}
|
|
51
|
-
catch (_a) {
|
|
52
|
-
if (process.env.ZENSTACK_TEST === '1') {
|
|
53
|
-
try {
|
|
54
|
-
// special handling for running as tests, try resolving relative to CWD
|
|
55
|
-
return require(path_1.default.join(process.cwd(), 'node_modules', '.zenstack', 'policy')).default;
|
|
56
|
-
}
|
|
57
|
-
catch (_b) {
|
|
58
|
-
throw new Error('Policy definition cannot be loaded from default location. Please make sure "zenstack generate" has been run.');
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
throw new Error('Policy definition cannot be loaded from default location. Please make sure "zenstack generate" has been run.');
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
function getDefaultZodSchemas() {
|
|
65
|
-
try {
|
|
66
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
67
|
-
return require('.zenstack/zod');
|
|
68
|
-
}
|
|
69
|
-
catch (_a) {
|
|
70
|
-
if (process.env.ZENSTACK_TEST === '1') {
|
|
71
|
-
try {
|
|
72
|
-
// special handling for running as tests, try resolving relative to CWD
|
|
73
|
-
return require(path_1.default.join(process.cwd(), 'node_modules', '.zenstack', 'zod'));
|
|
74
|
-
}
|
|
75
|
-
catch (_b) {
|
|
76
|
-
return undefined;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return undefined;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
46
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/enhancements/policy/index.ts"],"names":[],"mappings":";AAAA,uDAAuD;AACvD,uDAAuD;;;;;;AAEvD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/enhancements/policy/index.ts"],"names":[],"mappings":";AAAA,uDAAuD;AACvD,uDAAuD;;;;;;AAEvD,oDAA4B;AAC5B,+CAAyD;AACzD,yCAA2F;AAE3F,iDAAgD;AAChD,oCAAqC;AAErC,oCAAuC;AACvC,uCAA+C;AAkC/C;;;;;;;GAOG;AACH,SAAgB,UAAU,CACtB,MAAgB,EAChB,OAA2B,EAC3B,OAA2B;;IAE3B,IAAI,CAAC,MAAM,EAAE;QACT,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;KAC9C;IAED,MAAM,SAAS,GAAI,MAAc,CAAC,cAAc,CAAC;IACjD,IAAI,SAAS,IAAI,gBAAM,CAAC,EAAE,CAAC,SAAS,EAAE,kCAAsB,CAAC,EAAE;QAC3D,OAAO,CAAC,IAAI,CACR,qCAAqC,kCAAsB,qCAAqC,SAAS,IAAI,CAChH,CAAC;KACL;IAED,MAAM,OAAO,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,mCAAI,IAAA,yBAAgB,EAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,mCAAI,IAAA,4BAAmB,EAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,CAAC,CAAC;IAChF,MAAM,WAAW,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,mCAAI,IAAA,6BAAoB,EAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,CAAC,CAAC;IAEnF,wBAAwB;IACxB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE;QACf,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACjD,IACI,CAAC,IAAA,yBAAY,EACT,OAAO,CAAC,IAAI,EACZ,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAC9B,EACH;YACE,MAAM,IAAI,KAAK,CACX,kDAAkD,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpG,CAAC;SACL;KACJ;IAED,OAAO,IAAA,iBAAS,EACZ,MAAM,EACN,UAAU,EACV,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CACf,IAAI,4BAAkB,CAClB,OAA2B,EAC3B,OAAO,EACP,UAAU,EACV,WAAW,EACX,KAAK,EACL,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EACb,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,CAC1B,EACL,QAAQ,CACX,CAAC;AACN,CAAC;AAlDD,gCAkDC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { ZodError } from 'zod';
|
|
1
2
|
import { CrudFailureReason } from '../../constants';
|
|
2
3
|
import { AuthUser, DbClientContract, DbOperations, FieldInfo, PolicyOperationKind } from '../../types';
|
|
3
|
-
import { NestedWriteVisitorContext } from '../nested-write-
|
|
4
|
+
import { NestedWriteVisitorContext } from '../nested-write-visitor';
|
|
4
5
|
import type { ModelMeta, PolicyDef, ZodSchemas } from '../types';
|
|
5
6
|
/**
|
|
6
7
|
* Access policy enforcement utilities
|
|
@@ -55,14 +56,14 @@ export declare class PolicyUtil {
|
|
|
55
56
|
/**
|
|
56
57
|
* Injects model auth guard as where clause.
|
|
57
58
|
*/
|
|
58
|
-
injectAuthGuard(db: Record<string, DbOperations>, args: any, model: string, operation: PolicyOperationKind):
|
|
59
|
+
injectAuthGuard(db: Record<string, DbOperations>, args: any, model: string, operation: PolicyOperationKind): boolean;
|
|
59
60
|
private injectGuardForRelationFields;
|
|
60
61
|
private injectGuardForToManyField;
|
|
61
62
|
private injectGuardForToOneField;
|
|
62
63
|
/**
|
|
63
64
|
* Injects auth guard for read operations.
|
|
64
65
|
*/
|
|
65
|
-
injectForRead(db: Record<string, DbOperations>, model: string, args: any):
|
|
66
|
+
injectForRead(db: Record<string, DbOperations>, model: string, args: any): boolean;
|
|
66
67
|
private flattenGeneratedUniqueField;
|
|
67
68
|
/**
|
|
68
69
|
* Gets unique constraints for the given model.
|
|
@@ -71,7 +72,7 @@ export declare class PolicyUtil {
|
|
|
71
72
|
/**
|
|
72
73
|
* Builds a reversed query for the given nested path.
|
|
73
74
|
*/
|
|
74
|
-
buildReversedQuery(context: NestedWriteVisitorContext):
|
|
75
|
+
buildReversedQuery(context: NestedWriteVisitorContext): any;
|
|
75
76
|
private injectNestedReadConditions;
|
|
76
77
|
/**
|
|
77
78
|
* Given a model and a unique filter, checks the operation is allowed by policies and field validations.
|
|
@@ -104,7 +105,7 @@ export declare class PolicyUtil {
|
|
|
104
105
|
injectReadCheckSelect(model: string, args: any): void;
|
|
105
106
|
private doInjectReadCheckSelect;
|
|
106
107
|
private makeAllScalarFieldSelect;
|
|
107
|
-
deniedByPolicy(model: string, operation: PolicyOperationKind, extra?: string, reason?: CrudFailureReason): Error;
|
|
108
|
+
deniedByPolicy(model: string, operation: PolicyOperationKind, extra?: string, reason?: CrudFailureReason, zodErrors?: ZodError): Error;
|
|
108
109
|
notFound(model: string): Error;
|
|
109
110
|
validationError(message: string): void;
|
|
110
111
|
unknownError(message: string): void;
|
|
@@ -127,6 +128,10 @@ export declare class PolicyUtil {
|
|
|
127
128
|
*/
|
|
128
129
|
postProcessForRead(data: any, model: string, queryArgs: any): void;
|
|
129
130
|
private doPostProcessForRead;
|
|
131
|
+
/**
|
|
132
|
+
* Gets information for all fields of a model.
|
|
133
|
+
*/
|
|
134
|
+
getModelFields(model: string): Record<string, FieldInfo>;
|
|
130
135
|
/**
|
|
131
136
|
* Gets information for a specific model field.
|
|
132
137
|
*/
|