@zenstackhq/runtime 0.6.0-pre.2 → 1.0.0-alpha.100

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 (124) hide show
  1. package/constants.d.ts +4 -0
  2. package/constants.js +8 -0
  3. package/constants.js.map +1 -0
  4. package/enhancements/index.d.ts +4 -0
  5. package/enhancements/index.js +21 -0
  6. package/enhancements/index.js.map +1 -0
  7. package/enhancements/model-meta.d.ts +9 -0
  8. package/enhancements/model-meta.js +25 -0
  9. package/enhancements/model-meta.js.map +1 -0
  10. package/enhancements/nested-write-vistor.d.ts +70 -0
  11. package/enhancements/nested-write-vistor.js +173 -0
  12. package/enhancements/nested-write-vistor.js.map +1 -0
  13. package/enhancements/omit.d.ts +5 -0
  14. package/enhancements/omit.js +60 -0
  15. package/enhancements/omit.js.map +1 -0
  16. package/enhancements/password.d.ts +5 -0
  17. package/enhancements/password.js +66 -0
  18. package/enhancements/password.js.map +1 -0
  19. package/enhancements/policy/handler.d.ts +36 -0
  20. package/enhancements/policy/handler.js +281 -0
  21. package/enhancements/policy/handler.js.map +1 -0
  22. package/enhancements/policy/index.d.ts +17 -0
  23. package/enhancements/policy/index.js +31 -0
  24. package/enhancements/policy/index.js.map +1 -0
  25. package/{lib/proxy → enhancements/policy}/logger.d.ts +3 -0
  26. package/{lib/proxy → enhancements/policy}/logger.js +4 -0
  27. package/enhancements/policy/logger.js.map +1 -0
  28. package/enhancements/policy/policy-utils.d.ts +94 -0
  29. package/enhancements/policy/policy-utils.js +755 -0
  30. package/enhancements/policy/policy-utils.js.map +1 -0
  31. package/enhancements/preset.d.ts +16 -0
  32. package/enhancements/preset.js +24 -0
  33. package/enhancements/preset.js.map +1 -0
  34. package/enhancements/proxy.d.ts +75 -0
  35. package/enhancements/proxy.js +196 -0
  36. package/enhancements/proxy.js.map +1 -0
  37. package/enhancements/types.d.ts +33 -0
  38. package/{lib/config.js → enhancements/types.js} +1 -1
  39. package/enhancements/types.js.map +1 -0
  40. package/enhancements/utils.d.ts +17 -0
  41. package/enhancements/utils.js +59 -0
  42. package/enhancements/utils.js.map +1 -0
  43. package/error.d.ts +11 -0
  44. package/error.js +17 -0
  45. package/error.js.map +1 -0
  46. package/index.d.ts +5 -0
  47. package/{lib/index.js → index.js} +3 -4
  48. package/index.js.map +1 -0
  49. package/package.json +8 -8
  50. package/serialization-utils.js.map +1 -0
  51. package/types.d.ts +101 -0
  52. package/types.js +16 -0
  53. package/types.js.map +1 -0
  54. package/{lib/validation.d.ts → validation.d.ts} +7 -0
  55. package/{lib/validation.js → validation.js} +15 -1
  56. package/validation.js.map +1 -0
  57. package/version.js +19 -0
  58. package/version.js.map +1 -0
  59. package/zod.d.ts +10 -0
  60. package/zod.js +17 -0
  61. package/zod.js.map +1 -0
  62. package/client/index.d.ts +0 -3
  63. package/client/index.js +0 -11
  64. package/lib/config.d.ts +0 -14
  65. package/lib/config.js.map +0 -1
  66. package/lib/constants.d.ts +0 -12
  67. package/lib/constants.js +0 -16
  68. package/lib/constants.js.map +0 -1
  69. package/lib/handler/data/crud.d.ts +0 -17
  70. package/lib/handler/data/crud.js +0 -255
  71. package/lib/handler/data/crud.js.map +0 -1
  72. package/lib/handler/data/handler.d.ts +0 -20
  73. package/lib/handler/data/handler.js +0 -150
  74. package/lib/handler/data/handler.js.map +0 -1
  75. package/lib/handler/data/nested-write-vistor.d.ts +0 -31
  76. package/lib/handler/data/nested-write-vistor.js +0 -67
  77. package/lib/handler/data/nested-write-vistor.js.map +0 -1
  78. package/lib/handler/data/policy-utils.d.ts +0 -73
  79. package/lib/handler/data/policy-utils.js +0 -447
  80. package/lib/handler/data/policy-utils.js.map +0 -1
  81. package/lib/handler/index.d.ts +0 -1
  82. package/lib/handler/index.js +0 -9
  83. package/lib/handler/index.js.map +0 -1
  84. package/lib/handler/types.d.ts +0 -28
  85. package/lib/handler/types.js +0 -36
  86. package/lib/handler/types.js.map +0 -1
  87. package/lib/index.d.ts +0 -6
  88. package/lib/index.js.map +0 -1
  89. package/lib/policy.d.ts +0 -11
  90. package/lib/policy.js +0 -10
  91. package/lib/policy.js.map +0 -1
  92. package/lib/proxy/handler.d.ts +0 -37
  93. package/lib/proxy/handler.js +0 -333
  94. package/lib/proxy/handler.js.map +0 -1
  95. package/lib/proxy/logger.js.map +0 -1
  96. package/lib/proxy/nested-write-vistor.d.ts +0 -30
  97. package/lib/proxy/nested-write-vistor.js +0 -69
  98. package/lib/proxy/nested-write-vistor.js.map +0 -1
  99. package/lib/proxy/policy-utils.d.ts +0 -78
  100. package/lib/proxy/policy-utils.js +0 -508
  101. package/lib/proxy/policy-utils.js.map +0 -1
  102. package/lib/request-handler.d.ts +0 -21
  103. package/lib/request-handler.js +0 -37
  104. package/lib/request-handler.js.map +0 -1
  105. package/lib/request.d.ts +0 -37
  106. package/lib/request.js +0 -164
  107. package/lib/request.js.map +0 -1
  108. package/lib/serialization-utils.js.map +0 -1
  109. package/lib/service.d.ts +0 -32
  110. package/lib/service.js +0 -184
  111. package/lib/service.js.map +0 -1
  112. package/lib/types.d.ts +0 -185
  113. package/lib/types.js +0 -71
  114. package/lib/types.js.map +0 -1
  115. package/lib/validation.js.map +0 -1
  116. package/lib/version.js +0 -9
  117. package/lib/version.js.map +0 -1
  118. package/server/index.d.ts +0 -16
  119. package/server/index.js +0 -6
  120. package/types/index.d.ts +0 -1
  121. package/types/index.js +0 -3
  122. /package/{lib/serialization-utils.d.ts → serialization-utils.d.ts} +0 -0
  123. /package/{lib/serialization-utils.js → serialization-utils.js} +0 -0
  124. /package/{lib/version.d.ts → version.d.ts} +0 -0
package/types.d.ts ADDED
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Weakly-typed database access methods
3
+ */
4
+ export interface DbOperations {
5
+ findMany(args?: unknown): Promise<unknown[]>;
6
+ findFirst(args: unknown): Promise<unknown>;
7
+ findFirstOrThrow(args: unknown): Promise<unknown>;
8
+ findUnique(args: unknown): Promise<unknown>;
9
+ findUniqueOrThrow(args: unknown): Promise<unknown>;
10
+ create(args: unknown): Promise<unknown>;
11
+ createMany(args: unknown, skipDuplicates?: boolean): Promise<{
12
+ count: number;
13
+ }>;
14
+ update(args: unknown): Promise<unknown>;
15
+ updateMany(args: unknown): Promise<{
16
+ count: number;
17
+ }>;
18
+ upsert(args: unknown): Promise<unknown>;
19
+ delete(args: unknown): Promise<unknown>;
20
+ deleteMany(args?: unknown): Promise<{
21
+ count: number;
22
+ }>;
23
+ aggregate(args: unknown): Promise<unknown>;
24
+ groupBy(args: unknown): Promise<unknown>;
25
+ count(args?: unknown): Promise<unknown>;
26
+ }
27
+ /**
28
+ * Kinds of access policy
29
+ */
30
+ export type PolicyKind = 'allow' | 'deny';
31
+ /**
32
+ * Kinds of operations controlled by access policies
33
+ */
34
+ export type PolicyOperationKind = 'create' | 'update' | 'postUpdate' | 'read' | 'delete';
35
+ /**
36
+ * Current login user info
37
+ */
38
+ export type AuthUser = Record<string, unknown>;
39
+ /**
40
+ * Context for database query
41
+ */
42
+ export type QueryContext = {
43
+ /**
44
+ * Current login user (provided by @see RequestHandlerOptions)
45
+ */
46
+ user?: AuthUser;
47
+ preValue?: any;
48
+ };
49
+ export type RuntimeAttribute = {
50
+ name: string;
51
+ args: Array<{
52
+ name?: string;
53
+ value: unknown;
54
+ }>;
55
+ };
56
+ /**
57
+ * Runtime information of a data model field
58
+ */
59
+ export type FieldInfo = {
60
+ /**
61
+ * Field name
62
+ */
63
+ name: string;
64
+ /**
65
+ * Field type name
66
+ */
67
+ type: string;
68
+ /**
69
+ * If the field is an ID field or part of a multi-field ID
70
+ */
71
+ isId: boolean;
72
+ /**
73
+ * If the field type is a data model (or an optional/array of data model)
74
+ */
75
+ isDataModel: boolean;
76
+ /**
77
+ * If the field is an array
78
+ */
79
+ isArray: boolean;
80
+ /**
81
+ * If the field is optional
82
+ */
83
+ isOptional: boolean;
84
+ /**
85
+ * Attributes on the field
86
+ */
87
+ attributes: RuntimeAttribute[];
88
+ /**
89
+ * If the field is a relation field, the field name of the reverse side of the relation
90
+ */
91
+ backLink?: string;
92
+ /**
93
+ * If the field is the owner side of a relation
94
+ */
95
+ isRelationOwner: boolean;
96
+ };
97
+ export type DbClientContract = Record<string, DbOperations> & {
98
+ $transaction: <T>(action: (tx: Record<string, DbOperations>) => Promise<T>) => Promise<T>;
99
+ };
100
+ export declare const PrismaWriteActions: readonly ["create", "createMany", "connectOrCreate", "update", "updateMany", "upsert", "connect", "disconnect", "delete", "deleteMany"];
101
+ export type PrismaWriteActionType = (typeof PrismaWriteActions)[number];
package/types.js ADDED
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PrismaWriteActions = void 0;
4
+ exports.PrismaWriteActions = [
5
+ 'create',
6
+ 'createMany',
7
+ 'connectOrCreate',
8
+ 'update',
9
+ 'updateMany',
10
+ 'upsert',
11
+ 'connect',
12
+ 'disconnect',
13
+ 'delete',
14
+ 'deleteMany',
15
+ ];
16
+ //# sourceMappingURL=types.js.map
package/types.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AA4Ga,QAAA,kBAAkB,GAAG;IAC9B,QAAQ;IACR,YAAY;IACZ,iBAAiB;IACjB,QAAQ;IACR,YAAY;IACZ,QAAQ;IACR,SAAS;IACT,YAAY;IACZ,QAAQ;IACR,YAAY;CACN,CAAC"}
@@ -10,3 +10,10 @@ export declare class ValidationError {
10
10
  * Validate the given data with the given zod schema (for field-level constraints)
11
11
  */
12
12
  export declare function validate(validator: z.ZodType, data: unknown): void;
13
+ /**
14
+ * Check if the given object has all the given fields, not null or undefined
15
+ * @param obj
16
+ * @param fields
17
+ * @returns
18
+ */
19
+ export declare function hasAllFields(obj: any, fields: string[]): boolean;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validate = exports.ValidationError = void 0;
3
+ exports.hasAllFields = exports.validate = exports.ValidationError = void 0;
4
4
  const zod_validation_error_1 = require("zod-validation-error");
5
5
  /**
6
6
  * Error indicating violations of field-level constraints
@@ -23,4 +23,18 @@ function validate(validator, data) {
23
23
  }
24
24
  }
25
25
  exports.validate = validate;
26
+ /**
27
+ * Check if the given object has all the given fields, not null or undefined
28
+ * @param obj
29
+ * @param fields
30
+ * @returns
31
+ */
32
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
33
+ function hasAllFields(obj, fields) {
34
+ if (typeof obj !== 'object' || !obj) {
35
+ return false;
36
+ }
37
+ return fields.every((f) => obj[f] !== undefined && obj[f] !== null);
38
+ }
39
+ exports.hasAllFields = hasAllFields;
26
40
  //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":";;;AACA,+DAAoD;AAEpD;;GAEG;AACH,MAAa,eAAe;IACxB,YAA4B,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;IAAG,CAAC;CAClD;AAFD,0CAEC;AAED;;GAEG;AACH,SAAgB,QAAQ,CAAC,SAAoB,EAAE,IAAa;IACxD,IAAI;QACA,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KACzB;IAAC,OAAO,GAAG,EAAE;QACV,MAAM,IAAI,eAAe,CAAC,IAAA,mCAAY,EAAC,GAAiB,CAAC,CAAC,OAAO,CAAC,CAAC;KACtE;AACL,CAAC;AAND,4BAMC;AAED;;;;;GAKG;AACH,8DAA8D;AAC9D,SAAgB,YAAY,CAAC,GAAQ,EAAE,MAAgB;IACnD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,EAAE;QACjC,OAAO,KAAK,CAAC;KAChB;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AACxE,CAAC;AALD,oCAKC"}
package/version.js ADDED
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getVersion = void 0;
4
+ /* eslint-disable @typescript-eslint/no-var-requires */
5
+ function getVersion() {
6
+ try {
7
+ return require('./package.json').version;
8
+ }
9
+ catch (_a) {
10
+ try {
11
+ return require('../package.json').version;
12
+ }
13
+ catch (_b) {
14
+ return 'unknown';
15
+ }
16
+ }
17
+ }
18
+ exports.getVersion = getVersion;
19
+ //# sourceMappingURL=version.js.map
package/version.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAA,uDAAuD;AACvD,SAAgB,UAAU;IACtB,IAAI;QACA,OAAO,OAAO,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC;KAC5C;IAAC,WAAM;QACJ,IAAI;YACA,OAAO,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC;SAC7C;QAAC,WAAM;YACJ,OAAO,SAAS,CAAC;SACpB;KACJ;AACL,CAAC;AAVD,gCAUC"}
package/zod.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ import z from 'zod';
2
+ import { DbOperations } from './types';
3
+ /**
4
+ * Mapping from model type name to zod schema for Prisma operations
5
+ */
6
+ export type ModelZodSchema = Record<string, Record<keyof DbOperations, z.ZodType>>;
7
+ /**
8
+ * Load zod schema from standard location.
9
+ */
10
+ export declare function getModelZodSchemas(): ModelZodSchema;
package/zod.js ADDED
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getModelZodSchemas = void 0;
4
+ /**
5
+ * Load zod schema from standard location.
6
+ */
7
+ function getModelZodSchemas() {
8
+ try {
9
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
10
+ return require('.zenstack/zod').default;
11
+ }
12
+ catch (_a) {
13
+ throw new Error('Zod schemas cannot be loaded. Please make sure "@core/zod" plugin is enabled in schema.zmodel.');
14
+ }
15
+ }
16
+ exports.getModelZodSchemas = getModelZodSchemas;
17
+ //# sourceMappingURL=zod.js.map
package/zod.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod.js","sourceRoot":"","sources":["../src/zod.ts"],"names":[],"mappings":";;;AAQA;;GAEG;AACH,SAAgB,kBAAkB;IAC9B,IAAI;QACA,8DAA8D;QAC9D,OAAO,OAAO,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC;KAC3C;IAAC,WAAM;QACJ,MAAM,IAAI,KAAK,CACX,gGAAgG,CACnG,CAAC;KACL;AACL,CAAC;AATD,gDASC"}
package/client/index.d.ts DELETED
@@ -1,3 +0,0 @@
1
- export { HooksError, ServerErrorCode, RequestOptions } from '../lib/types';
2
- export * as request from '../lib/request';
3
- export * from '../lib/validation';
package/client/index.js DELETED
@@ -1,11 +0,0 @@
1
- // needed for importing from client-side code
2
- Object.defineProperty(exports, '__esModule', { value: true });
3
-
4
- const request = require('../lib/request');
5
- const types = require('../lib/types');
6
-
7
- module.exports = {
8
- ...require('../lib/validation'),
9
- ServerErrorCode: types.ServerErrorCode,
10
- request,
11
- };
package/lib/config.d.ts DELETED
@@ -1,14 +0,0 @@
1
- import { LogLevel } from './types';
2
- /**
3
- * Logging config definition
4
- */
5
- export type LogDefinition = {
6
- level: LogLevel;
7
- emit: 'stdout' | 'event';
8
- };
9
- /**
10
- * Service configuration
11
- */
12
- export interface ServiceConfig {
13
- log?: Array<LogLevel | LogDefinition>;
14
- }
package/lib/config.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":""}
@@ -1,12 +0,0 @@
1
- /**
2
- * Auxiliary database field for supporting policy check for nested writes
3
- */
4
- export declare const TRANSACTION_FIELD_NAME = "zenstack_transaction";
5
- /**
6
- * Auxiliary database field for building up policy check queries
7
- */
8
- export declare const GUARD_FIELD_NAME = "zenstack_guard";
9
- /**
10
- * Default length of password hash salt (used by bcryptjs to hash password)
11
- */
12
- export declare const DEFAULT_PASSWORD_SALT_LENGTH = 12;
package/lib/constants.js DELETED
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFAULT_PASSWORD_SALT_LENGTH = exports.GUARD_FIELD_NAME = exports.TRANSACTION_FIELD_NAME = void 0;
4
- /**
5
- * Auxiliary database field for supporting policy check for nested writes
6
- */
7
- exports.TRANSACTION_FIELD_NAME = 'zenstack_transaction';
8
- /**
9
- * Auxiliary database field for building up policy check queries
10
- */
11
- exports.GUARD_FIELD_NAME = 'zenstack_guard';
12
- /**
13
- * Default length of password hash salt (used by bcryptjs to hash password)
14
- */
15
- exports.DEFAULT_PASSWORD_SALT_LENGTH = 12;
16
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,sBAAsB,GAAG,sBAAsB,CAAC;AAE7D;;GAEG;AACU,QAAA,gBAAgB,GAAG,gBAAgB,CAAC;AAEjD;;GAEG;AACU,QAAA,4BAA4B,GAAG,EAAE,CAAC"}
@@ -1,17 +0,0 @@
1
- import { QueryContext, Service } from '../../types';
2
- /**
3
- * Request handler for /data endpoint which processes data CRUD requests.
4
- */
5
- export declare class CRUD<DbClient> {
6
- private readonly service;
7
- constructor(service: Service<DbClient>);
8
- private get db();
9
- get(model: string, id: string, args: any, context: QueryContext): Promise<unknown>;
10
- find(model: string, args: any, context: QueryContext): Promise<unknown[]>;
11
- create(model: string, args: any, context: QueryContext): Promise<unknown>;
12
- update(model: string, id: string, args: any, context: QueryContext): Promise<unknown>;
13
- del(model: string, id: string, args: any, context: QueryContext): Promise<unknown>;
14
- private isPrismaClientKnownRequestError;
15
- private isPrismaClientValidationError;
16
- private processError;
17
- }
@@ -1,255 +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
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.CRUD = void 0;
16
- /* eslint-disable @typescript-eslint/no-explicit-any */
17
- const cuid_1 = __importDefault(require("cuid"));
18
- const superjson_1 = __importDefault(require("superjson"));
19
- const constants_1 = require("../../constants");
20
- const types_1 = require("../../types");
21
- const validation_1 = require("../../validation");
22
- const types_2 = require("../types");
23
- const policy_utils_1 = require("./policy-utils");
24
- const PRISMA_ERROR_MAPPING = {
25
- P2002: types_1.ServerErrorCode.UNIQUE_CONSTRAINT_VIOLATION,
26
- P2003: types_1.ServerErrorCode.REFERENCE_CONSTRAINT_VIOLATION,
27
- P2025: types_1.ServerErrorCode.REFERENCE_CONSTRAINT_VIOLATION,
28
- };
29
- /**
30
- * Request handler for /data endpoint which processes data CRUD requests.
31
- */
32
- class CRUD {
33
- constructor(service) {
34
- this.service = service;
35
- }
36
- get db() {
37
- return this.service.db;
38
- }
39
- get(model, id, args, context) {
40
- return __awaiter(this, void 0, void 0, function* () {
41
- args = args !== null && args !== void 0 ? args : {};
42
- args.where = (0, policy_utils_1.and)(args.where, { id });
43
- let entities;
44
- try {
45
- entities = yield (0, policy_utils_1.readWithCheck)(model, args, this.service, context, this.db);
46
- }
47
- catch (err) {
48
- throw this.processError(err, 'get', model);
49
- }
50
- return entities[0];
51
- });
52
- }
53
- find(model, args, context) {
54
- return __awaiter(this, void 0, void 0, function* () {
55
- try {
56
- return yield (0, policy_utils_1.readWithCheck)(model, args !== null && args !== void 0 ? args : {}, this.service, context, this.db);
57
- }
58
- catch (err) {
59
- throw this.processError(err, 'find', model);
60
- }
61
- });
62
- }
63
- create(model, args, context) {
64
- return __awaiter(this, void 0, void 0, function* () {
65
- if (!args) {
66
- throw new types_2.CRUDError(types_1.ServerErrorCode.INVALID_REQUEST_PARAMS, 'body is required');
67
- }
68
- if (!args.data) {
69
- throw new types_2.CRUDError(types_1.ServerErrorCode.INVALID_REQUEST_PARAMS, 'data field is required');
70
- }
71
- let createResult;
72
- try {
73
- yield this.service.validateModelPayload(model, 'create', args.data);
74
- // preprocess payload to modify fields as required by attribute like @password
75
- yield (0, policy_utils_1.preprocessWritePayload)(model, args, this.service);
76
- const transactionId = (0, cuid_1.default)();
77
- // start an interactive transaction
78
- createResult = yield this.db.$transaction((tx) => __awaiter(this, void 0, void 0, function* () {
79
- // inject transaction id into update/create payload (direct and nested)
80
- const { createdModels } = yield (0, policy_utils_1.injectTransactionId)(model, args, 'create', transactionId, this.service);
81
- // conduct the create
82
- this.service.verbose(`Conducting create: ${model}:\n${superjson_1.default.stringify(args)}`);
83
- const createResult = (yield tx[model].create(args));
84
- // verify that the created entity pass policy check
85
- yield (0, policy_utils_1.checkPolicyForIds)(model, [createResult.id], 'create', this.service, context, tx);
86
- // verify that nested creates pass policy check
87
- yield Promise.all(createdModels.map((model) => __awaiter(this, void 0, void 0, function* () {
88
- const createdIds = yield (0, policy_utils_1.queryIds)(model, tx, {
89
- [constants_1.TRANSACTION_FIELD_NAME]: `${transactionId}:create`,
90
- });
91
- this.service.verbose(`Validating nestedly created entities: ${model}#[${createdIds.join(', ')}]`);
92
- yield (0, policy_utils_1.checkPolicyForIds)(model, createdIds, 'create', this.service, context, tx);
93
- })));
94
- return createResult;
95
- }));
96
- }
97
- catch (err) {
98
- throw this.processError(err, 'create', model);
99
- }
100
- // verify that return data requested by query args pass policy check
101
- const readArgs = Object.assign(Object.assign({}, args), { where: { id: createResult.id } });
102
- delete readArgs.data;
103
- try {
104
- const result = yield (0, policy_utils_1.readWithCheck)(model, readArgs, this.service, context, this.db);
105
- if (result.length === 0) {
106
- throw new types_2.CRUDError(types_1.ServerErrorCode.READ_BACK_AFTER_WRITE_DENIED);
107
- }
108
- return result[0];
109
- }
110
- catch (err) {
111
- if (err instanceof types_2.CRUDError &&
112
- err.code === types_1.ServerErrorCode.DENIED_BY_POLICY) {
113
- throw new types_2.CRUDError(types_1.ServerErrorCode.READ_BACK_AFTER_WRITE_DENIED);
114
- }
115
- else {
116
- throw err;
117
- }
118
- }
119
- });
120
- }
121
- update(model, id, args, context) {
122
- return __awaiter(this, void 0, void 0, function* () {
123
- if (!args) {
124
- throw new types_2.CRUDError(types_1.ServerErrorCode.INVALID_REQUEST_PARAMS, 'body is required');
125
- }
126
- try {
127
- yield this.service.validateModelPayload(model, 'update', args.data);
128
- // preprocess payload to modify fields as required by attribute like @password
129
- yield (0, policy_utils_1.preprocessWritePayload)(model, args, this.service);
130
- args.where = Object.assign(Object.assign({}, args.where), { id });
131
- const transactionId = (0, cuid_1.default)();
132
- yield this.db.$transaction((tx) => __awaiter(this, void 0, void 0, function* () {
133
- // make sure the entity (including ones involved in nested write) pass policy check
134
- yield (0, policy_utils_1.preUpdateCheck)(model, id, args, this.service, context, tx);
135
- // inject transaction id into update/create payload (direct and nested)
136
- const { createdModels } = yield (0, policy_utils_1.injectTransactionId)(model, args, 'update', transactionId, this.service);
137
- // conduct the update
138
- this.service.verbose(`Conducting update: ${model}:\n${superjson_1.default.stringify(args)}`);
139
- yield tx[model].update(args);
140
- // verify that nested creates pass policy check
141
- yield Promise.all(createdModels.map((model) => __awaiter(this, void 0, void 0, function* () {
142
- const createdIds = yield (0, policy_utils_1.queryIds)(model, tx, {
143
- [constants_1.TRANSACTION_FIELD_NAME]: `${transactionId}:create`,
144
- });
145
- this.service.verbose(`Validating nestedly created entities: ${model}#[${createdIds.join(', ')}]`);
146
- yield (0, policy_utils_1.checkPolicyForIds)(model, createdIds, 'create', this.service, context, tx);
147
- })));
148
- }));
149
- }
150
- catch (err) {
151
- throw this.processError(err, 'update', model);
152
- }
153
- // verify that return data requested by query args pass policy check
154
- const readArgs = Object.assign({}, args);
155
- delete readArgs.data;
156
- try {
157
- const result = yield (0, policy_utils_1.readWithCheck)(model, readArgs, this.service, context, this.db);
158
- if (result.length === 0) {
159
- throw new types_2.CRUDError(types_1.ServerErrorCode.READ_BACK_AFTER_WRITE_DENIED);
160
- }
161
- return result[0];
162
- }
163
- catch (err) {
164
- if (err instanceof types_2.CRUDError &&
165
- err.code === types_1.ServerErrorCode.DENIED_BY_POLICY) {
166
- throw new types_2.CRUDError(types_1.ServerErrorCode.READ_BACK_AFTER_WRITE_DENIED);
167
- }
168
- else {
169
- throw err;
170
- }
171
- }
172
- });
173
- }
174
- del(model, id, args, context) {
175
- return __awaiter(this, void 0, void 0, function* () {
176
- let result;
177
- try {
178
- // ensures the item under deletion passes policy check
179
- yield (0, policy_utils_1.checkPolicyForIds)(model, [id], 'delete', this.service, context, this.db);
180
- args = args !== null && args !== void 0 ? args : {};
181
- args.where = Object.assign(Object.assign({}, args.where), { id });
182
- result = yield this.db.$transaction((tx) => __awaiter(this, void 0, void 0, function* () {
183
- // first fetch the data that needs to be returned after deletion
184
- let readResult;
185
- try {
186
- const items = yield (0, policy_utils_1.readWithCheck)(model, args, this.service, context, tx);
187
- readResult = items[0];
188
- }
189
- catch (err) {
190
- if (err instanceof types_2.CRUDError &&
191
- err.code === types_1.ServerErrorCode.DENIED_BY_POLICY) {
192
- // can't read back, just return undefined, outer logic handles it
193
- }
194
- else {
195
- throw err;
196
- }
197
- }
198
- // conduct the deletion
199
- this.service.verbose(`Conducting delete ${model}:\n${superjson_1.default.stringify(args)}`);
200
- yield tx[model].delete(args);
201
- return readResult;
202
- }));
203
- }
204
- catch (err) {
205
- throw this.processError(err, 'del', model);
206
- }
207
- if (result) {
208
- return result;
209
- }
210
- else {
211
- throw new types_2.CRUDError(types_1.ServerErrorCode.READ_BACK_AFTER_WRITE_DENIED);
212
- }
213
- });
214
- }
215
- isPrismaClientKnownRequestError(err) {
216
- return (err.__proto__.constructor.name === 'PrismaClientKnownRequestError');
217
- }
218
- isPrismaClientValidationError(err) {
219
- return err.__proto__.constructor.name === 'PrismaClientValidationError';
220
- }
221
- processError(err, operation, model) {
222
- if (err instanceof types_2.CRUDError) {
223
- return err;
224
- }
225
- if (this.isPrismaClientKnownRequestError(err)) {
226
- this.service.warn(`Prisma request error: ${operation} ${model}: ${err}`);
227
- // errors thrown by Prisma, try mapping to a known error
228
- if (PRISMA_ERROR_MAPPING[err.code]) {
229
- return new types_2.CRUDError(PRISMA_ERROR_MAPPING[err.code], (0, types_1.getServerErrorMessage)(PRISMA_ERROR_MAPPING[err.code]));
230
- }
231
- else {
232
- return new types_2.CRUDError(types_1.ServerErrorCode.UNKNOWN, 'an unhandled Prisma error occurred: ' + err.code);
233
- }
234
- }
235
- else if (this.isPrismaClientValidationError(err)) {
236
- this.service.warn(`Prisma validation error: ${operation} ${model}: ${err}`);
237
- // prisma validation error
238
- return new types_2.CRUDError(types_1.ServerErrorCode.INVALID_REQUEST_PARAMS, (0, types_1.getServerErrorMessage)(types_1.ServerErrorCode.INVALID_REQUEST_PARAMS));
239
- }
240
- else if (err instanceof validation_1.ValidationError) {
241
- this.service.warn(`Field constraint validation error: ${operation} ${model}: ${err.message}`);
242
- return new types_2.CRUDError(types_1.ServerErrorCode.INVALID_REQUEST_PARAMS, err.message);
243
- }
244
- else {
245
- // generic errors
246
- this.service.error(`An unknown error occurred: ${JSON.stringify(err)}`);
247
- if (err instanceof Error && err.stack) {
248
- this.service.error(err.stack);
249
- }
250
- return new types_2.CRUDError(types_1.ServerErrorCode.UNKNOWN, (0, types_1.getServerErrorMessage)(types_1.ServerErrorCode.UNKNOWN));
251
- }
252
- }
253
- }
254
- exports.CRUD = CRUD;
255
- //# sourceMappingURL=crud.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"crud.js","sourceRoot":"","sources":["../../../../src/handler/data/crud.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import { NextApiRequest, NextApiResponse } from 'next';
2
- import { RequestHandlerOptions } from '../../request-handler';
3
- import { DbClientContract, Service } from '../../types';
4
- import { RequestHandler } from '../types';
5
- /**
6
- * Request handler for /data endpoint which processes data CRUD requests.
7
- */
8
- export default class DataHandler<DbClient extends DbClientContract> implements RequestHandler {
9
- private readonly service;
10
- private readonly options;
11
- private readonly crud;
12
- constructor(service: Service<DbClient>, options: RequestHandlerOptions);
13
- handle(req: NextApiRequest, res: NextApiResponse, path: string[]): Promise<void>;
14
- private marshal;
15
- private unmarshal;
16
- private get;
17
- private post;
18
- private put;
19
- private del;
20
- }