@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.
Files changed (55) hide show
  1. package/constants.d.ts +9 -13
  2. package/constants.js +10 -14
  3. package/constants.js.map +1 -1
  4. package/enhancements/enhance.js +2 -2
  5. package/enhancements/enhance.js.map +1 -1
  6. package/enhancements/index.d.ts +1 -1
  7. package/enhancements/index.js +1 -1
  8. package/enhancements/index.js.map +1 -1
  9. package/enhancements/model-meta.d.ts +0 -4
  10. package/enhancements/model-meta.js +3 -28
  11. package/enhancements/model-meta.js.map +1 -1
  12. package/enhancements/{nested-write-vistor.js → nested-write-visitor.js} +1 -1
  13. package/enhancements/nested-write-visitor.js.map +1 -0
  14. package/enhancements/omit.d.ts +3 -3
  15. package/enhancements/omit.js +2 -1
  16. package/enhancements/omit.js.map +1 -1
  17. package/enhancements/password.d.ts +4 -4
  18. package/enhancements/password.js +4 -4
  19. package/enhancements/password.js.map +1 -1
  20. package/enhancements/policy/handler.d.ts +13 -7
  21. package/enhancements/policy/handler.js +134 -107
  22. package/enhancements/policy/handler.js.map +1 -1
  23. package/enhancements/policy/index.d.ts +4 -4
  24. package/enhancements/policy/index.js +4 -40
  25. package/enhancements/policy/index.js.map +1 -1
  26. package/enhancements/policy/policy-utils.d.ts +10 -5
  27. package/enhancements/policy/policy-utils.js +306 -276
  28. package/enhancements/policy/policy-utils.js.map +1 -1
  29. package/enhancements/policy/promise.d.ts +5 -0
  30. package/enhancements/policy/promise.js +42 -0
  31. package/enhancements/policy/promise.js.map +1 -0
  32. package/enhancements/proxy.js +27 -21
  33. package/enhancements/proxy.js.map +1 -1
  34. package/enhancements/types.d.ts +9 -0
  35. package/enhancements/utils.d.ts +1 -1
  36. package/enhancements/utils.js +3 -4
  37. package/enhancements/utils.js.map +1 -1
  38. package/index.d.ts +1 -0
  39. package/index.js +1 -0
  40. package/index.js.map +1 -1
  41. package/loader.d.ts +22 -0
  42. package/loader.js +86 -0
  43. package/loader.js.map +1 -0
  44. package/package.json +1 -1
  45. package/types.d.ts +14 -13
  46. package/types.js.map +1 -1
  47. package/validation.d.ts +5 -0
  48. package/validation.js +13 -1
  49. package/validation.js.map +1 -1
  50. package/zod/index.d.ts +1 -0
  51. package/zod/index.js +1 -0
  52. package/zod/objects.d.ts +1 -0
  53. package/zod/objects.js +8 -0
  54. package/enhancements/nested-write-vistor.js.map +0 -1
  55. /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 type WithPolicyOptions = {
12
+ export interface WithPolicyOptions extends CommonEnhancementOptions {
13
13
  /**
14
14
  * Policy definition
15
15
  */
16
16
  policy?: PolicyDef;
17
17
  /**
18
- * Model metatadata
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, model_meta_1.getDefaultModelMeta)();
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":"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"}
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-vistor';
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): Promise<boolean>;
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): Promise<boolean>;
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): Promise<any>;
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
  */