@zenstackhq/runtime 2.16.0 → 3.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/LICENSE +1 -1
- package/dist/client.cjs +6094 -0
- package/dist/client.cjs.map +1 -0
- package/dist/client.d.cts +19 -0
- package/dist/client.d.ts +19 -0
- package/dist/client.js +6060 -0
- package/dist/client.js.map +1 -0
- package/dist/contract-DguafRNB.d.cts +1272 -0
- package/dist/contract-DguafRNB.d.ts +1272 -0
- package/dist/index.cjs +6088 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +14 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +6057 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/policy.cjs +2343 -0
- package/dist/plugins/policy.cjs.map +1 -0
- package/dist/plugins/policy.d.cts +24 -0
- package/dist/plugins/policy.d.ts +24 -0
- package/dist/plugins/policy.js +2307 -0
- package/dist/plugins/policy.js.map +1 -0
- package/dist/schema.cjs +110 -0
- package/dist/schema.cjs.map +1 -0
- package/dist/schema.d.cts +29 -0
- package/dist/schema.d.ts +29 -0
- package/dist/schema.js +85 -0
- package/dist/schema.js.map +1 -0
- package/dist/utils/pg-utils.cjs +39 -0
- package/dist/utils/pg-utils.cjs.map +1 -0
- package/dist/utils/pg-utils.d.cts +8 -0
- package/dist/utils/pg-utils.d.ts +8 -0
- package/dist/utils/pg-utils.js +16 -0
- package/dist/utils/pg-utils.js.map +1 -0
- package/{browser/index.js → dist/utils/sqlite-utils.cjs} +21 -37
- package/dist/utils/sqlite-utils.cjs.map +1 -0
- package/dist/utils/sqlite-utils.d.cts +8 -0
- package/dist/utils/sqlite-utils.d.ts +8 -0
- package/dist/utils/sqlite-utils.js +22 -0
- package/dist/utils/sqlite-utils.js.map +1 -0
- package/package.json +106 -117
- package/README.md +0 -5
- package/browser/index.d.mts +0 -13
- package/browser/index.d.ts +0 -13
- package/browser/index.js.map +0 -1
- package/browser/index.mjs +0 -33
- package/browser/index.mjs.map +0 -1
- package/constants.d.ts +0 -62
- package/constants.js +0 -76
- package/constants.js.map +0 -1
- package/cross/index.d.mts +0 -379
- package/cross/index.d.ts +0 -379
- package/cross/index.js +0 -923
- package/cross/index.js.map +0 -1
- package/cross/index.mjs +0 -881
- package/cross/index.mjs.map +0 -1
- package/edge.d.ts +0 -1
- package/edge.js +0 -18
- package/edge.js.map +0 -1
- package/encryption/index.d.ts +0 -25
- package/encryption/index.js +0 -74
- package/encryption/index.js.map +0 -1
- package/encryption/utils.d.ts +0 -9
- package/encryption/utils.js +0 -99
- package/encryption/utils.js.map +0 -1
- package/enhance-edge.d.ts +0 -1
- package/enhance-edge.js +0 -10
- package/enhance.d.ts +0 -1
- package/enhance.js +0 -10
- package/enhancements/edge/create-enhancement.d.ts +0 -42
- package/enhancements/edge/create-enhancement.js +0 -102
- package/enhancements/edge/create-enhancement.js.map +0 -1
- package/enhancements/edge/default-auth.d.ts +0 -8
- package/enhancements/edge/default-auth.js +0 -180
- package/enhancements/edge/default-auth.js.map +0 -1
- package/enhancements/edge/delegate.d.ts +0 -77
- package/enhancements/edge/delegate.js +0 -1293
- package/enhancements/edge/delegate.js.map +0 -1
- package/enhancements/edge/encryption.d.ts +0 -7
- package/enhancements/edge/encryption.js +0 -150
- package/enhancements/edge/encryption.js.map +0 -1
- package/enhancements/edge/index.d.ts +0 -4
- package/enhancements/edge/index.js +0 -21
- package/enhancements/edge/index.js.map +0 -1
- package/enhancements/edge/json-processor.d.ts +0 -7
- package/enhancements/edge/json-processor.js +0 -89
- package/enhancements/edge/json-processor.js.map +0 -1
- package/enhancements/edge/logger.d.ts +0 -29
- package/enhancements/edge/logger.js +0 -65
- package/enhancements/edge/logger.js.map +0 -1
- package/enhancements/edge/omit.d.ts +0 -7
- package/enhancements/edge/omit.js +0 -96
- package/enhancements/edge/omit.js.map +0 -1
- package/enhancements/edge/password.d.ts +0 -7
- package/enhancements/edge/password.js +0 -64
- package/enhancements/edge/password.js.map +0 -1
- package/enhancements/edge/policy/check-utils.d.ts +0 -5
- package/enhancements/edge/policy/check-utils.js +0 -20
- package/enhancements/edge/policy/check-utils.js.map +0 -1
- package/enhancements/edge/policy/handler.d.ts +0 -100
- package/enhancements/edge/policy/handler.js +0 -1440
- package/enhancements/edge/policy/handler.js.map +0 -1
- package/enhancements/edge/policy/index.d.ts +0 -19
- package/enhancements/edge/policy/index.js +0 -65
- package/enhancements/edge/policy/index.js.map +0 -1
- package/enhancements/edge/policy/policy-utils.d.ts +0 -181
- package/enhancements/edge/policy/policy-utils.js +0 -1356
- package/enhancements/edge/policy/policy-utils.js.map +0 -1
- package/enhancements/edge/promise.d.ts +0 -15
- package/enhancements/edge/promise.js +0 -99
- package/enhancements/edge/promise.js.map +0 -1
- package/enhancements/edge/proxy.d.ts +0 -120
- package/enhancements/edge/proxy.js +0 -287
- package/enhancements/edge/proxy.js.map +0 -1
- package/enhancements/edge/query-utils.d.ts +0 -53
- package/enhancements/edge/query-utils.js +0 -256
- package/enhancements/edge/query-utils.js.map +0 -1
- package/enhancements/edge/types.d.ts +0 -238
- package/enhancements/edge/types.js +0 -3
- package/enhancements/edge/types.js.map +0 -1
- package/enhancements/edge/utils.d.ts +0 -11
- package/enhancements/edge/utils.js +0 -49
- package/enhancements/edge/utils.js.map +0 -1
- package/enhancements/edge/where-visitor.d.ts +0 -32
- package/enhancements/edge/where-visitor.js +0 -86
- package/enhancements/edge/where-visitor.js.map +0 -1
- package/enhancements/node/create-enhancement.d.ts +0 -42
- package/enhancements/node/create-enhancement.js +0 -102
- package/enhancements/node/create-enhancement.js.map +0 -1
- package/enhancements/node/default-auth.d.ts +0 -8
- package/enhancements/node/default-auth.js +0 -180
- package/enhancements/node/default-auth.js.map +0 -1
- package/enhancements/node/delegate.d.ts +0 -77
- package/enhancements/node/delegate.js +0 -1293
- package/enhancements/node/delegate.js.map +0 -1
- package/enhancements/node/encryption.d.ts +0 -7
- package/enhancements/node/encryption.js +0 -150
- package/enhancements/node/encryption.js.map +0 -1
- package/enhancements/node/index.d.ts +0 -4
- package/enhancements/node/index.js +0 -21
- package/enhancements/node/index.js.map +0 -1
- package/enhancements/node/json-processor.d.ts +0 -7
- package/enhancements/node/json-processor.js +0 -89
- package/enhancements/node/json-processor.js.map +0 -1
- package/enhancements/node/logger.d.ts +0 -29
- package/enhancements/node/logger.js +0 -65
- package/enhancements/node/logger.js.map +0 -1
- package/enhancements/node/omit.d.ts +0 -7
- package/enhancements/node/omit.js +0 -96
- package/enhancements/node/omit.js.map +0 -1
- package/enhancements/node/password.d.ts +0 -7
- package/enhancements/node/password.js +0 -64
- package/enhancements/node/password.js.map +0 -1
- package/enhancements/node/policy/check-utils.d.ts +0 -5
- package/enhancements/node/policy/check-utils.js +0 -87
- package/enhancements/node/policy/check-utils.js.map +0 -1
- package/enhancements/node/policy/constraint-solver.d.ts +0 -27
- package/enhancements/node/policy/constraint-solver.js +0 -164
- package/enhancements/node/policy/constraint-solver.js.map +0 -1
- package/enhancements/node/policy/handler.d.ts +0 -100
- package/enhancements/node/policy/handler.js +0 -1440
- package/enhancements/node/policy/handler.js.map +0 -1
- package/enhancements/node/policy/index.d.ts +0 -19
- package/enhancements/node/policy/index.js +0 -65
- package/enhancements/node/policy/index.js.map +0 -1
- package/enhancements/node/policy/policy-utils.d.ts +0 -181
- package/enhancements/node/policy/policy-utils.js +0 -1356
- package/enhancements/node/policy/policy-utils.js.map +0 -1
- package/enhancements/node/promise.d.ts +0 -15
- package/enhancements/node/promise.js +0 -99
- package/enhancements/node/promise.js.map +0 -1
- package/enhancements/node/proxy.d.ts +0 -120
- package/enhancements/node/proxy.js +0 -287
- package/enhancements/node/proxy.js.map +0 -1
- package/enhancements/node/query-utils.d.ts +0 -53
- package/enhancements/node/query-utils.js +0 -256
- package/enhancements/node/query-utils.js.map +0 -1
- package/enhancements/node/types.d.ts +0 -238
- package/enhancements/node/types.js +0 -3
- package/enhancements/node/types.js.map +0 -1
- package/enhancements/node/utils.d.ts +0 -11
- package/enhancements/node/utils.js +0 -49
- package/enhancements/node/utils.js.map +0 -1
- package/enhancements/node/where-visitor.d.ts +0 -32
- package/enhancements/node/where-visitor.js +0 -86
- package/enhancements/node/where-visitor.js.map +0 -1
- package/error.d.ts +0 -11
- package/error.js +0 -22
- package/error.js.map +0 -1
- package/index.d.ts +0 -7
- package/index.js +0 -24
- package/index.js.map +0 -1
- package/local-helpers/index.d.ts +0 -6
- package/local-helpers/index.js +0 -23
- package/local-helpers/index.js.map +0 -1
- package/local-helpers/is-plain-object.d.ts +0 -1
- package/local-helpers/is-plain-object.js +0 -25
- package/local-helpers/is-plain-object.js.map +0 -1
- package/local-helpers/lower-case-first.d.ts +0 -1
- package/local-helpers/lower-case-first.js +0 -7
- package/local-helpers/lower-case-first.js.map +0 -1
- package/local-helpers/param-case.d.ts +0 -1
- package/local-helpers/param-case.js +0 -20
- package/local-helpers/param-case.js.map +0 -1
- package/local-helpers/sleep.d.ts +0 -1
- package/local-helpers/sleep.js +0 -9
- package/local-helpers/sleep.js.map +0 -1
- package/local-helpers/tiny-invariant.d.ts +0 -1
- package/local-helpers/tiny-invariant.js +0 -15
- package/local-helpers/tiny-invariant.js.map +0 -1
- package/local-helpers/upper-case-first.d.ts +0 -1
- package/local-helpers/upper-case-first.js +0 -7
- package/local-helpers/upper-case-first.js.map +0 -1
- package/model-meta.d.ts +0 -1
- package/model-meta.js +0 -10
- package/models.d.ts +0 -1
- package/models.js +0 -1
- package/types.d.ts +0 -200
- package/types.js +0 -4
- package/types.js.map +0 -1
- package/validation.d.ts +0 -24
- package/validation.js +0 -52
- package/validation.js.map +0 -1
- package/version.d.ts +0 -5
- package/version.js +0 -35
- package/version.js.map +0 -1
- package/zod/index.d.ts +0 -3
- package/zod/index.js +0 -5
- package/zod/input.d.ts +0 -1
- package/zod/input.js +0 -8
- package/zod/models.d.ts +0 -1
- package/zod/models.js +0 -8
- package/zod/objects.d.ts +0 -1
- package/zod/objects.js +0 -8
- package/zod-utils.d.ts +0 -12
- package/zod-utils.js +0 -97
- package/zod-utils.js.map +0 -1
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { InternalEnhancementOptions } from './create-enhancement';
|
|
2
|
-
/**
|
|
3
|
-
* Gets an enhanced Prisma client that supports `@password` attribute.
|
|
4
|
-
*
|
|
5
|
-
* @private
|
|
6
|
-
*/
|
|
7
|
-
export declare function withPassword<DbClient extends object = any>(prisma: DbClient, options: InternalEnhancementOptions): DbClient;
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
|
-
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
4
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
5
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
6
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
7
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
8
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
9
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
10
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
11
|
-
});
|
|
12
|
-
};
|
|
13
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.withPassword = withPassword;
|
|
15
|
-
const constants_1 = require("../../constants");
|
|
16
|
-
const cross_1 = require("../../cross");
|
|
17
|
-
const proxy_1 = require("./proxy");
|
|
18
|
-
/**
|
|
19
|
-
* Gets an enhanced Prisma client that supports `@password` attribute.
|
|
20
|
-
*
|
|
21
|
-
* @private
|
|
22
|
-
*/
|
|
23
|
-
function withPassword(prisma, options) {
|
|
24
|
-
return (0, proxy_1.makeProxy)(prisma, options.modelMeta, (_prisma, model) => new PasswordHandler(_prisma, model, options), 'password');
|
|
25
|
-
}
|
|
26
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
27
|
-
const hashFunc = typeof EdgeRuntime === 'string' ? require('bcryptjs').hashSync : require('bcryptjs').hash;
|
|
28
|
-
class PasswordHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
29
|
-
constructor(prisma, model, options) {
|
|
30
|
-
super(prisma, model, options);
|
|
31
|
-
}
|
|
32
|
-
// base override
|
|
33
|
-
preprocessArgs(action, args) {
|
|
34
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
35
|
-
if (args && constants_1.ACTIONS_WITH_WRITE_PAYLOAD.includes(action)) {
|
|
36
|
-
yield this.preprocessWritePayload(this.model, action, args);
|
|
37
|
-
}
|
|
38
|
-
return args;
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
preprocessWritePayload(model, action, args) {
|
|
42
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
-
const visitor = new cross_1.NestedWriteVisitor(this.options.modelMeta, {
|
|
44
|
-
field: (field, _action, data, context) => __awaiter(this, void 0, void 0, function* () {
|
|
45
|
-
var _a, _b, _c;
|
|
46
|
-
const pwdAttr = (_a = field.attributes) === null || _a === void 0 ? void 0 : _a.find((attr) => attr.name === '@password');
|
|
47
|
-
if (pwdAttr && field.type === 'String') {
|
|
48
|
-
// hash password value
|
|
49
|
-
let salt = (_b = pwdAttr.args.find((arg) => arg.name === 'salt')) === null || _b === void 0 ? void 0 : _b.value;
|
|
50
|
-
if (!salt) {
|
|
51
|
-
salt = (_c = pwdAttr.args.find((arg) => arg.name === 'saltLength')) === null || _c === void 0 ? void 0 : _c.value;
|
|
52
|
-
}
|
|
53
|
-
if (!salt) {
|
|
54
|
-
salt = constants_1.DEFAULT_PASSWORD_SALT_LENGTH;
|
|
55
|
-
}
|
|
56
|
-
context.parent[field.name] = yield hashFunc(data, salt);
|
|
57
|
-
}
|
|
58
|
-
}),
|
|
59
|
-
});
|
|
60
|
-
yield visitor.visit(model, action, args);
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
//# sourceMappingURL=password.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"password.js","sourceRoot":"","sources":["../../../src/enhancements/node/password.ts"],"names":[],"mappings":";AAAA,uDAAuD;AACvD,sDAAsD;;;;;;;;;;;AAatD,oCAUC;AArBD,+CAA2F;AAC3F,uCAA6E;AAG7E,mCAAmF;AAEnF;;;;GAIG;AACH,SAAgB,YAAY,CACxB,MAAgB,EAChB,OAAmC;IAEnC,OAAO,IAAA,iBAAS,EACZ,MAAM,EACN,OAAO,CAAC,SAAS,EACjB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,OAA2B,EAAE,KAAK,EAAE,OAAO,CAAC,EACpF,UAAU,CACb,CAAC;AACN,CAAC;AAOD,8DAA8D;AAC9D,MAAM,QAAQ,GAAG,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;AAE3G,MAAM,eAAgB,SAAQ,iCAAyB;IACnD,YAAY,MAAwB,EAAE,KAAa,EAAE,OAAmC;QACpF,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,gBAAgB;IACA,cAAc,CAAC,MAA0B,EAAE,IAAS;;YAChE,IAAI,IAAI,IAAI,sCAA0B,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtD,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,MAA+B,EAAE,IAAI,CAAC,CAAC;YACzF,CAAC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;KAAA;IAEa,sBAAsB,CAAC,KAAa,EAAE,MAA6B,EAAE,IAAS;;YACxF,MAAM,OAAO,GAAG,IAAI,0BAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;gBAC3D,KAAK,EAAE,CAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;;oBAC3C,MAAM,OAAO,GAAG,MAAA,KAAK,CAAC,UAAU,0CAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;oBAC5E,IAAI,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBACrC,sBAAsB;wBACtB,IAAI,IAAI,GAAgC,MAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,0CACjF,KAAe,CAAC;wBACtB,IAAI,CAAC,IAAI,EAAE,CAAC;4BACR,IAAI,GAAG,MAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,0CAAE,KAAe,CAAC;wBAClF,CAAC;wBACD,IAAI,CAAC,IAAI,EAAE,CAAC;4BACR,IAAI,GAAG,wCAA4B,CAAC;wBACxC,CAAC;wBACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBAC5D,CAAC;gBACL,CAAC,CAAA;aACJ,CAAC,CAAC;YAEH,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC7C,CAAC;KAAA;CACJ"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { ModelMeta } from '..';
|
|
2
|
-
import type { DbClientContract } from '../../../types';
|
|
3
|
-
import { PermissionCheckArgs } from '../types';
|
|
4
|
-
import { PolicyUtil } from './policy-utils';
|
|
5
|
-
export declare function checkPermission(model: string, args: PermissionCheckArgs, modelMeta: ModelMeta, policyUtils: PolicyUtil, prisma: DbClientContract, prismaModule: any): Promise<boolean>;
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.checkPermission = checkPermission;
|
|
13
|
-
const ts_pattern_1 = require("ts-pattern");
|
|
14
|
-
const __1 = require("..");
|
|
15
|
-
const promise_1 = require("../promise");
|
|
16
|
-
const utils_1 = require("../utils");
|
|
17
|
-
const constraint_solver_1 = require("./constraint-solver");
|
|
18
|
-
function checkPermission(model, args, modelMeta, policyUtils, prisma,
|
|
19
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
20
|
-
prismaModule) {
|
|
21
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
22
|
-
return (0, promise_1.createDeferredPromise)(() => doCheckPermission(model, args, modelMeta, policyUtils, prisma, prismaModule));
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
function doCheckPermission(model, args, modelMeta, policyUtils, prisma,
|
|
26
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
27
|
-
prismaModule) {
|
|
28
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
29
|
-
if (!['create', 'read', 'update', 'delete'].includes(args.operation)) {
|
|
30
|
-
throw (0, utils_1.prismaClientValidationError)(prisma, prismaModule, `Invalid "operation" ${args.operation}`);
|
|
31
|
-
}
|
|
32
|
-
let constraint = policyUtils.getCheckerConstraint(model, args.operation);
|
|
33
|
-
if (typeof constraint === 'boolean') {
|
|
34
|
-
return constraint;
|
|
35
|
-
}
|
|
36
|
-
if (args.where) {
|
|
37
|
-
// combine runtime filters with generated constraints
|
|
38
|
-
const extraConstraints = [];
|
|
39
|
-
for (const [field, value] of Object.entries(args.where)) {
|
|
40
|
-
if (value === undefined) {
|
|
41
|
-
continue;
|
|
42
|
-
}
|
|
43
|
-
if (value === null) {
|
|
44
|
-
throw (0, utils_1.prismaClientValidationError)(prisma, prismaModule, `Using "null" as filter value is not supported yet`);
|
|
45
|
-
}
|
|
46
|
-
const fieldInfo = (0, __1.requireField)(modelMeta, model, field);
|
|
47
|
-
// relation and array fields are not supported
|
|
48
|
-
if (fieldInfo.isDataModel || fieldInfo.isArray) {
|
|
49
|
-
throw (0, utils_1.prismaClientValidationError)(prisma, prismaModule, `Providing filter for field "${field}" is not supported. Only scalar fields are allowed.`);
|
|
50
|
-
}
|
|
51
|
-
// map field type to constraint type
|
|
52
|
-
const fieldType = (0, ts_pattern_1.match)(fieldInfo.type)
|
|
53
|
-
.with(ts_pattern_1.P.union('Int', 'BigInt', 'Float', 'Decimal'), () => 'number')
|
|
54
|
-
.with('String', () => 'string')
|
|
55
|
-
.with('Boolean', () => 'boolean')
|
|
56
|
-
.otherwise(() => {
|
|
57
|
-
throw (0, utils_1.prismaClientValidationError)(prisma, prismaModule, `Providing filter for field "${field}" is not supported. Only number, string, and boolean fields are allowed.`);
|
|
58
|
-
});
|
|
59
|
-
// check value type
|
|
60
|
-
const valueType = typeof value;
|
|
61
|
-
if (valueType !== 'number' && valueType !== 'string' && valueType !== 'boolean') {
|
|
62
|
-
throw (0, utils_1.prismaClientValidationError)(prisma, prismaModule, `Invalid value type for field "${field}". Only number, string or boolean is allowed.`);
|
|
63
|
-
}
|
|
64
|
-
if (fieldType !== valueType) {
|
|
65
|
-
throw (0, utils_1.prismaClientValidationError)(prisma, prismaModule, `Invalid value type for field "${field}". Expected "${fieldType}".`);
|
|
66
|
-
}
|
|
67
|
-
// check number validity
|
|
68
|
-
if (typeof value === 'number' && (!Number.isInteger(value) || value < 0)) {
|
|
69
|
-
throw (0, utils_1.prismaClientValidationError)(prisma, prismaModule, `Invalid value for field "${field}". Only non-negative integers are allowed.`);
|
|
70
|
-
}
|
|
71
|
-
// build a constraint
|
|
72
|
-
extraConstraints.push({
|
|
73
|
-
kind: 'eq',
|
|
74
|
-
left: { kind: 'variable', name: field, type: fieldType },
|
|
75
|
-
right: { kind: 'value', value, type: fieldType },
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
if (extraConstraints.length > 0) {
|
|
79
|
-
// combine the constraints
|
|
80
|
-
constraint = { kind: 'and', children: [constraint, ...extraConstraints] };
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
// check satisfiability
|
|
84
|
-
return new constraint_solver_1.ConstraintSolver().checkSat(constraint);
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
//# sourceMappingURL=check-utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"check-utils.js","sourceRoot":"","sources":["../../../../src/enhancements/node/policy/check-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import type { PermissionCheckerConstraint } from '../types';
|
|
2
|
-
/**
|
|
3
|
-
* A boolean constraint solver based on `logic-solver`. Only boolean and integer types are supported.
|
|
4
|
-
*/
|
|
5
|
-
export declare class ConstraintSolver {
|
|
6
|
-
private stringTable;
|
|
7
|
-
private variables;
|
|
8
|
-
/**
|
|
9
|
-
* Check the satisfiability of the given constraint.
|
|
10
|
-
*/
|
|
11
|
-
checkSat(constraint: PermissionCheckerConstraint): boolean;
|
|
12
|
-
private buildFormula;
|
|
13
|
-
private buildLogicalFormula;
|
|
14
|
-
private buildAndFormula;
|
|
15
|
-
private buildOrFormula;
|
|
16
|
-
private buildNotFormula;
|
|
17
|
-
private isTrue;
|
|
18
|
-
private isFalse;
|
|
19
|
-
private buildComparisonFormula;
|
|
20
|
-
private buildVariableFormula;
|
|
21
|
-
private buildValueFormula;
|
|
22
|
-
private booleanVariable;
|
|
23
|
-
private intVariable;
|
|
24
|
-
private transformEquality;
|
|
25
|
-
private transformInequality;
|
|
26
|
-
private transformComparison;
|
|
27
|
-
}
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.ConstraintSolver = void 0;
|
|
7
|
-
const logic_solver_1 = __importDefault(require("logic-solver"));
|
|
8
|
-
const ts_pattern_1 = require("ts-pattern");
|
|
9
|
-
/**
|
|
10
|
-
* A boolean constraint solver based on `logic-solver`. Only boolean and integer types are supported.
|
|
11
|
-
*/
|
|
12
|
-
class ConstraintSolver {
|
|
13
|
-
constructor() {
|
|
14
|
-
// a table for internalizing string literals
|
|
15
|
-
this.stringTable = [];
|
|
16
|
-
// a map for storing variable names and their corresponding formulas
|
|
17
|
-
this.variables = new Map();
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Check the satisfiability of the given constraint.
|
|
21
|
-
*/
|
|
22
|
-
checkSat(constraint) {
|
|
23
|
-
// reset state
|
|
24
|
-
this.stringTable = [];
|
|
25
|
-
this.variables = new Map();
|
|
26
|
-
// convert the constraint to a "logic-solver" formula
|
|
27
|
-
const formula = this.buildFormula(constraint);
|
|
28
|
-
// solve the formula
|
|
29
|
-
const solver = new logic_solver_1.default.Solver();
|
|
30
|
-
solver.require(formula);
|
|
31
|
-
// DEBUG:
|
|
32
|
-
// const solution = solver.solve();
|
|
33
|
-
// if (solution) {
|
|
34
|
-
// console.log('Solution:');
|
|
35
|
-
// this.variables.forEach((v, k) => console.log(`\t${k}=${solution?.evaluate(v)}`));
|
|
36
|
-
// } else {
|
|
37
|
-
// console.log('No solution');
|
|
38
|
-
// }
|
|
39
|
-
return !!solver.solve();
|
|
40
|
-
}
|
|
41
|
-
buildFormula(constraint) {
|
|
42
|
-
return (0, ts_pattern_1.match)(constraint)
|
|
43
|
-
.when((c) => c.kind === 'value', (c) => this.buildValueFormula(c))
|
|
44
|
-
.when((c) => c.kind === 'variable', (c) => this.buildVariableFormula(c))
|
|
45
|
-
.when((c) => ['eq', 'ne', 'gt', 'gte', 'lt', 'lte'].includes(c.kind), (c) => this.buildComparisonFormula(c))
|
|
46
|
-
.when((c) => ['and', 'or', 'not'].includes(c.kind), (c) => this.buildLogicalFormula(c))
|
|
47
|
-
.otherwise(() => {
|
|
48
|
-
throw new Error(`Unsupported constraint format: ${JSON.stringify(constraint)}`);
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
buildLogicalFormula(constraint) {
|
|
52
|
-
return (0, ts_pattern_1.match)(constraint.kind)
|
|
53
|
-
.with('and', () => this.buildAndFormula(constraint))
|
|
54
|
-
.with('or', () => this.buildOrFormula(constraint))
|
|
55
|
-
.with('not', () => this.buildNotFormula(constraint))
|
|
56
|
-
.exhaustive();
|
|
57
|
-
}
|
|
58
|
-
buildAndFormula(constraint) {
|
|
59
|
-
if (constraint.children.some((c) => this.isFalse(c))) {
|
|
60
|
-
// short-circuit
|
|
61
|
-
return logic_solver_1.default.FALSE;
|
|
62
|
-
}
|
|
63
|
-
return logic_solver_1.default.and(...constraint.children.map((c) => this.buildFormula(c)));
|
|
64
|
-
}
|
|
65
|
-
buildOrFormula(constraint) {
|
|
66
|
-
if (constraint.children.some((c) => this.isTrue(c))) {
|
|
67
|
-
// short-circuit
|
|
68
|
-
return logic_solver_1.default.TRUE;
|
|
69
|
-
}
|
|
70
|
-
return logic_solver_1.default.or(...constraint.children.map((c) => this.buildFormula(c)));
|
|
71
|
-
}
|
|
72
|
-
buildNotFormula(constraint) {
|
|
73
|
-
if (constraint.children.length !== 1) {
|
|
74
|
-
throw new Error('"not" constraint must have exactly one child');
|
|
75
|
-
}
|
|
76
|
-
return logic_solver_1.default.not(this.buildFormula(constraint.children[0]));
|
|
77
|
-
}
|
|
78
|
-
isTrue(constraint) {
|
|
79
|
-
return constraint.kind === 'value' && constraint.value === true;
|
|
80
|
-
}
|
|
81
|
-
isFalse(constraint) {
|
|
82
|
-
return constraint.kind === 'value' && constraint.value === false;
|
|
83
|
-
}
|
|
84
|
-
buildComparisonFormula(constraint) {
|
|
85
|
-
if (constraint.left.kind === 'value' && constraint.right.kind === 'value') {
|
|
86
|
-
// constant comparison
|
|
87
|
-
const left = constraint.left;
|
|
88
|
-
const right = constraint.right;
|
|
89
|
-
return (0, ts_pattern_1.match)(constraint.kind)
|
|
90
|
-
.with('eq', () => (left.value === right.value ? logic_solver_1.default.TRUE : logic_solver_1.default.FALSE))
|
|
91
|
-
.with('ne', () => (left.value !== right.value ? logic_solver_1.default.TRUE : logic_solver_1.default.FALSE))
|
|
92
|
-
.with('gt', () => (left.value > right.value ? logic_solver_1.default.TRUE : logic_solver_1.default.FALSE))
|
|
93
|
-
.with('gte', () => (left.value >= right.value ? logic_solver_1.default.TRUE : logic_solver_1.default.FALSE))
|
|
94
|
-
.with('lt', () => (left.value < right.value ? logic_solver_1.default.TRUE : logic_solver_1.default.FALSE))
|
|
95
|
-
.with('lte', () => (left.value <= right.value ? logic_solver_1.default.TRUE : logic_solver_1.default.FALSE))
|
|
96
|
-
.exhaustive();
|
|
97
|
-
}
|
|
98
|
-
return (0, ts_pattern_1.match)(constraint.kind)
|
|
99
|
-
.with('eq', () => this.transformEquality(constraint.left, constraint.right))
|
|
100
|
-
.with('ne', () => this.transformInequality(constraint.left, constraint.right))
|
|
101
|
-
.with('gt', () => this.transformComparison(constraint.left, constraint.right, (l, r) => logic_solver_1.default.greaterThan(l, r)))
|
|
102
|
-
.with('gte', () => this.transformComparison(constraint.left, constraint.right, (l, r) => logic_solver_1.default.greaterThanOrEqual(l, r)))
|
|
103
|
-
.with('lt', () => this.transformComparison(constraint.left, constraint.right, (l, r) => logic_solver_1.default.lessThan(l, r)))
|
|
104
|
-
.with('lte', () => this.transformComparison(constraint.left, constraint.right, (l, r) => logic_solver_1.default.lessThanOrEqual(l, r)))
|
|
105
|
-
.exhaustive();
|
|
106
|
-
}
|
|
107
|
-
buildVariableFormula(constraint) {
|
|
108
|
-
return ((0, ts_pattern_1.match)(constraint.type)
|
|
109
|
-
.with('boolean', () => this.booleanVariable(constraint.name))
|
|
110
|
-
.with('number', () => this.intVariable(constraint.name))
|
|
111
|
-
// strings are internalized and represented by their indices
|
|
112
|
-
.with('string', () => this.intVariable(constraint.name))
|
|
113
|
-
.exhaustive());
|
|
114
|
-
}
|
|
115
|
-
buildValueFormula(constraint) {
|
|
116
|
-
return (0, ts_pattern_1.match)(constraint.value)
|
|
117
|
-
.when((v) => typeof v === 'boolean', (v) => (v === true ? logic_solver_1.default.TRUE : logic_solver_1.default.FALSE))
|
|
118
|
-
.when((v) => typeof v === 'number', (v) => logic_solver_1.default.constantBits(v))
|
|
119
|
-
.when((v) => typeof v === 'string', (v) => {
|
|
120
|
-
// internalize the string and use its index as formula representation
|
|
121
|
-
const index = this.stringTable.indexOf(v);
|
|
122
|
-
if (index === -1) {
|
|
123
|
-
this.stringTable.push(v);
|
|
124
|
-
return logic_solver_1.default.constantBits(this.stringTable.length - 1);
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
return logic_solver_1.default.constantBits(index);
|
|
128
|
-
}
|
|
129
|
-
})
|
|
130
|
-
.exhaustive();
|
|
131
|
-
}
|
|
132
|
-
booleanVariable(name) {
|
|
133
|
-
this.variables.set(name, name);
|
|
134
|
-
return name;
|
|
135
|
-
}
|
|
136
|
-
intVariable(name) {
|
|
137
|
-
const r = logic_solver_1.default.variableBits(name, 32);
|
|
138
|
-
this.variables.set(name, r);
|
|
139
|
-
return r;
|
|
140
|
-
}
|
|
141
|
-
transformEquality(left, right) {
|
|
142
|
-
if (left.type !== right.type) {
|
|
143
|
-
throw new Error(`Type mismatch in equality constraint: ${JSON.stringify(left)}, ${JSON.stringify(right)}`);
|
|
144
|
-
}
|
|
145
|
-
const leftFormula = this.buildFormula(left);
|
|
146
|
-
const rightFormula = this.buildFormula(right);
|
|
147
|
-
if (left.type === 'boolean' && right.type === 'boolean') {
|
|
148
|
-
// logical equivalence
|
|
149
|
-
return logic_solver_1.default.equiv(leftFormula, rightFormula);
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
// integer equality
|
|
153
|
-
return logic_solver_1.default.equalBits(leftFormula, rightFormula);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
transformInequality(left, right) {
|
|
157
|
-
return logic_solver_1.default.not(this.transformEquality(left, right));
|
|
158
|
-
}
|
|
159
|
-
transformComparison(left, right, func) {
|
|
160
|
-
return func(this.buildFormula(left), this.buildFormula(right));
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
exports.ConstraintSolver = ConstraintSolver;
|
|
164
|
-
//# sourceMappingURL=constraint-solver.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constraint-solver.js","sourceRoot":"","sources":["../../../../src/enhancements/node/policy/constraint-solver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { EnhancementContext, type DbClientContract } from '../../../types';
|
|
2
|
-
import type { InternalEnhancementOptions } from '../create-enhancement';
|
|
3
|
-
import { PrismaProxyHandler } from '../proxy';
|
|
4
|
-
import type { PermissionCheckArgs } from '../types';
|
|
5
|
-
/**
|
|
6
|
-
* Prisma proxy handler for injecting access policy check.
|
|
7
|
-
*/
|
|
8
|
-
export declare class PolicyProxyHandler<DbClient extends DbClientContract> implements PrismaProxyHandler {
|
|
9
|
-
private readonly prisma;
|
|
10
|
-
private readonly options;
|
|
11
|
-
private readonly context?;
|
|
12
|
-
private readonly logger;
|
|
13
|
-
private readonly policyUtils;
|
|
14
|
-
private readonly model;
|
|
15
|
-
private readonly modelMeta;
|
|
16
|
-
private readonly prismaModule;
|
|
17
|
-
private readonly queryUtils;
|
|
18
|
-
constructor(prisma: DbClient, model: string, options: InternalEnhancementOptions, context?: EnhancementContext | undefined);
|
|
19
|
-
private get modelClient();
|
|
20
|
-
findUnique(args: any): Promise<any>;
|
|
21
|
-
findUniqueOrThrow(args: any): Promise<any>;
|
|
22
|
-
findFirst(args?: any): Promise<any>;
|
|
23
|
-
findFirstOrThrow(args: any): Promise<any>;
|
|
24
|
-
findMany(args?: any): Promise<unknown[]>;
|
|
25
|
-
private findWithFluent;
|
|
26
|
-
private doFind;
|
|
27
|
-
create(args: any): Promise<unknown>;
|
|
28
|
-
private doCreate;
|
|
29
|
-
private hasNestedCreateOrConnect;
|
|
30
|
-
private validateCreateInputSchema;
|
|
31
|
-
createMany(args: {
|
|
32
|
-
data: any;
|
|
33
|
-
skipDuplicates?: boolean;
|
|
34
|
-
}): Promise<{
|
|
35
|
-
count: number;
|
|
36
|
-
}>;
|
|
37
|
-
createManyAndReturn(args: {
|
|
38
|
-
data: any;
|
|
39
|
-
select?: any;
|
|
40
|
-
skipDuplicates?: boolean;
|
|
41
|
-
}): Promise<unknown[]>;
|
|
42
|
-
/**
|
|
43
|
-
* Preprocess the payload of `createMany` and `createManyAndReturn` and update in place if needed.
|
|
44
|
-
* @returns `true` if the operation should be converted to regular `create`s; false otherwise.
|
|
45
|
-
*/
|
|
46
|
-
private preprocessCreateManyPayload;
|
|
47
|
-
private hasRelationFieldsInPayload;
|
|
48
|
-
private validateCreateInput;
|
|
49
|
-
private doCreateMany;
|
|
50
|
-
private hasDuplicatedUniqueConstraint;
|
|
51
|
-
update(args: any): Promise<unknown>;
|
|
52
|
-
private doUpdate;
|
|
53
|
-
private calculatePostUpdateIds;
|
|
54
|
-
private overrideForeignKeyFields;
|
|
55
|
-
private validateUpdateInputSchema;
|
|
56
|
-
updateMany(args: any): Promise<any>;
|
|
57
|
-
updateManyAndReturn(args: any): Promise<unknown[]>;
|
|
58
|
-
private doUpdateMany;
|
|
59
|
-
upsert(args: any): Promise<unknown>;
|
|
60
|
-
delete(args: any): Promise<unknown>;
|
|
61
|
-
deleteMany(args: any): Promise<{
|
|
62
|
-
count: number;
|
|
63
|
-
}>;
|
|
64
|
-
aggregate(args: any): Promise<any>;
|
|
65
|
-
groupBy(args: any): Promise<any>;
|
|
66
|
-
count(args: any): Promise<any>;
|
|
67
|
-
subscribe(args: any): Promise<{
|
|
68
|
-
[Symbol.asyncIterator]: () => {
|
|
69
|
-
next: () => Promise<{
|
|
70
|
-
done: any;
|
|
71
|
-
value: any;
|
|
72
|
-
}>;
|
|
73
|
-
return: () => any;
|
|
74
|
-
throw: () => any;
|
|
75
|
-
};
|
|
76
|
-
}>;
|
|
77
|
-
stream(args: any): Promise<{
|
|
78
|
-
[Symbol.asyncIterator]: () => {
|
|
79
|
-
next: () => Promise<{
|
|
80
|
-
done: any;
|
|
81
|
-
value: any;
|
|
82
|
-
}>;
|
|
83
|
-
return: () => any;
|
|
84
|
-
throw: () => any;
|
|
85
|
-
};
|
|
86
|
-
}>;
|
|
87
|
-
private handleSubscribeStream;
|
|
88
|
-
/**
|
|
89
|
-
* Checks if the given operation is possibly allowed by the policy, without querying the database.
|
|
90
|
-
* @param operation The CRUD operation.
|
|
91
|
-
* @param fieldValues Extra field value filters to be combined with the policy constraints.
|
|
92
|
-
*/
|
|
93
|
-
check(args: PermissionCheckArgs): Promise<boolean>;
|
|
94
|
-
private get shouldLogQuery();
|
|
95
|
-
private runPostWriteChecks;
|
|
96
|
-
private requireBackLink;
|
|
97
|
-
private mergeToParent;
|
|
98
|
-
private removeFromParent;
|
|
99
|
-
private buildIdFilterWithEntityChecker;
|
|
100
|
-
}
|