@zenstackhq/runtime 0.3.19 → 0.3.20

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.
@@ -0,0 +1,17 @@
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
+ }
@@ -0,0 +1,257 @@
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 constants_1 = require("../../constants");
19
+ const types_1 = require("../../types");
20
+ const validation_1 = require("../../validation");
21
+ const types_2 = require("../types");
22
+ const policy_utils_1 = require("./policy-utils");
23
+ const PRISMA_ERROR_MAPPING = {
24
+ P2002: types_1.ServerErrorCode.UNIQUE_CONSTRAINT_VIOLATION,
25
+ P2003: types_1.ServerErrorCode.REFERENCE_CONSTRAINT_VIOLATION,
26
+ P2025: types_1.ServerErrorCode.REFERENCE_CONSTRAINT_VIOLATION,
27
+ };
28
+ /**
29
+ * Request handler for /data endpoint which processes data CRUD requests.
30
+ */
31
+ class CRUD {
32
+ constructor(service) {
33
+ this.service = service;
34
+ }
35
+ get db() {
36
+ return this.service.db;
37
+ }
38
+ get(model, id, args, context) {
39
+ return __awaiter(this, void 0, void 0, function* () {
40
+ args = args !== null && args !== void 0 ? args : {};
41
+ args.where = (0, policy_utils_1.and)(args.where, { id });
42
+ let entities;
43
+ try {
44
+ entities = yield (0, policy_utils_1.readWithCheck)(model, args, this.service, context, this.db);
45
+ }
46
+ catch (err) {
47
+ throw this.processError(err, 'get', model);
48
+ }
49
+ if (entities.length === 0) {
50
+ throw new types_2.RequestHandlerError(types_1.ServerErrorCode.ENTITY_NOT_FOUND);
51
+ }
52
+ return entities[0];
53
+ });
54
+ }
55
+ find(model, args, context) {
56
+ return __awaiter(this, void 0, void 0, function* () {
57
+ try {
58
+ return yield (0, policy_utils_1.readWithCheck)(model, args !== null && args !== void 0 ? args : {}, this.service, context, this.db);
59
+ }
60
+ catch (err) {
61
+ throw this.processError(err, 'find', model);
62
+ }
63
+ });
64
+ }
65
+ create(model, args, context) {
66
+ return __awaiter(this, void 0, void 0, function* () {
67
+ if (!args) {
68
+ throw new types_2.RequestHandlerError(types_1.ServerErrorCode.INVALID_REQUEST_PARAMS, 'body is required');
69
+ }
70
+ if (!args.data) {
71
+ throw new types_2.RequestHandlerError(types_1.ServerErrorCode.INVALID_REQUEST_PARAMS, 'data field is required');
72
+ }
73
+ let createResult;
74
+ try {
75
+ yield this.service.validateModelPayload(model, 'create', args.data);
76
+ // preprocess payload to modify fields as required by attribute like @password
77
+ yield (0, policy_utils_1.preprocessWritePayload)(model, args, this.service);
78
+ const transactionId = (0, cuid_1.default)();
79
+ // start an interactive transaction
80
+ createResult = yield this.db.$transaction((tx) => __awaiter(this, void 0, void 0, function* () {
81
+ // inject transaction id into update/create payload (direct and nested)
82
+ const { createdModels } = yield (0, policy_utils_1.injectTransactionId)(model, args, 'create', transactionId, this.service);
83
+ // conduct the create
84
+ this.service.verbose(`Conducting create: ${model}:\n${JSON.stringify(args)}`);
85
+ const createResult = (yield tx[model].create(args));
86
+ // verify that the created entity pass policy check
87
+ yield (0, policy_utils_1.checkPolicyForIds)(model, [createResult.id], 'create', this.service, context, tx);
88
+ // verify that nested creates pass policy check
89
+ yield Promise.all(createdModels.map((model) => __awaiter(this, void 0, void 0, function* () {
90
+ const createdIds = yield (0, policy_utils_1.queryIds)(model, tx, {
91
+ [constants_1.TRANSACTION_FIELD_NAME]: `${transactionId}:create`,
92
+ });
93
+ this.service.verbose(`Validating nestedly created entities: ${model}#[${createdIds.join(', ')}]`);
94
+ yield (0, policy_utils_1.checkPolicyForIds)(model, createdIds, 'create', this.service, context, tx);
95
+ })));
96
+ return createResult;
97
+ }));
98
+ }
99
+ catch (err) {
100
+ throw this.processError(err, 'create', model);
101
+ }
102
+ // verify that return data requested by query args pass policy check
103
+ const readArgs = Object.assign(Object.assign({}, args), { where: { id: createResult.id } });
104
+ delete readArgs.data;
105
+ try {
106
+ const result = yield (0, policy_utils_1.readWithCheck)(model, readArgs, this.service, context, this.db);
107
+ if (result.length === 0) {
108
+ throw new types_2.RequestHandlerError(types_1.ServerErrorCode.READ_BACK_AFTER_WRITE_DENIED);
109
+ }
110
+ return result[0];
111
+ }
112
+ catch (err) {
113
+ if (err instanceof types_2.RequestHandlerError &&
114
+ err.code === types_1.ServerErrorCode.DENIED_BY_POLICY) {
115
+ throw new types_2.RequestHandlerError(types_1.ServerErrorCode.READ_BACK_AFTER_WRITE_DENIED);
116
+ }
117
+ else {
118
+ throw err;
119
+ }
120
+ }
121
+ });
122
+ }
123
+ update(model, id, args, context) {
124
+ return __awaiter(this, void 0, void 0, function* () {
125
+ if (!args) {
126
+ throw new types_2.RequestHandlerError(types_1.ServerErrorCode.INVALID_REQUEST_PARAMS, 'body is required');
127
+ }
128
+ try {
129
+ yield this.service.validateModelPayload(model, 'update', args.data);
130
+ // preprocess payload to modify fields as required by attribute like @password
131
+ yield (0, policy_utils_1.preprocessWritePayload)(model, args, this.service);
132
+ args.where = Object.assign(Object.assign({}, args.where), { id });
133
+ const transactionId = (0, cuid_1.default)();
134
+ yield this.db.$transaction((tx) => __awaiter(this, void 0, void 0, function* () {
135
+ // make sure the entity (including ones involved in nested write) pass policy check
136
+ yield (0, policy_utils_1.preUpdateCheck)(model, id, args, this.service, context, tx);
137
+ // inject transaction id into update/create payload (direct and nested)
138
+ const { createdModels } = yield (0, policy_utils_1.injectTransactionId)(model, args, 'update', transactionId, this.service);
139
+ // conduct the update
140
+ this.service.verbose(`Conducting update: ${model}:\n${JSON.stringify(args)}`);
141
+ yield tx[model].update(args);
142
+ // verify that nested creates pass policy check
143
+ yield Promise.all(createdModels.map((model) => __awaiter(this, void 0, void 0, function* () {
144
+ const createdIds = yield (0, policy_utils_1.queryIds)(model, tx, {
145
+ [constants_1.TRANSACTION_FIELD_NAME]: `${transactionId}:create`,
146
+ });
147
+ this.service.verbose(`Validating nestedly created entities: ${model}#[${createdIds.join(', ')}]`);
148
+ yield (0, policy_utils_1.checkPolicyForIds)(model, createdIds, 'create', this.service, context, tx);
149
+ })));
150
+ }));
151
+ }
152
+ catch (err) {
153
+ throw this.processError(err, 'update', model);
154
+ }
155
+ // verify that return data requested by query args pass policy check
156
+ const readArgs = Object.assign({}, args);
157
+ delete readArgs.data;
158
+ try {
159
+ const result = yield (0, policy_utils_1.readWithCheck)(model, readArgs, this.service, context, this.db);
160
+ if (result.length === 0) {
161
+ throw new types_2.RequestHandlerError(types_1.ServerErrorCode.READ_BACK_AFTER_WRITE_DENIED);
162
+ }
163
+ return result[0];
164
+ }
165
+ catch (err) {
166
+ if (err instanceof types_2.RequestHandlerError &&
167
+ err.code === types_1.ServerErrorCode.DENIED_BY_POLICY) {
168
+ throw new types_2.RequestHandlerError(types_1.ServerErrorCode.READ_BACK_AFTER_WRITE_DENIED);
169
+ }
170
+ else {
171
+ throw err;
172
+ }
173
+ }
174
+ });
175
+ }
176
+ del(model, id, args, context) {
177
+ return __awaiter(this, void 0, void 0, function* () {
178
+ let result;
179
+ try {
180
+ // ensures the item under deletion passes policy check
181
+ yield (0, policy_utils_1.checkPolicyForIds)(model, [id], 'delete', this.service, context, this.db);
182
+ args = args !== null && args !== void 0 ? args : {};
183
+ args.where = Object.assign(Object.assign({}, args.where), { id });
184
+ result = yield this.db.$transaction((tx) => __awaiter(this, void 0, void 0, function* () {
185
+ // first fetch the data that needs to be returned after deletion
186
+ let readResult;
187
+ try {
188
+ const items = yield (0, policy_utils_1.readWithCheck)(model, args, this.service, context, tx);
189
+ readResult = items[0];
190
+ }
191
+ catch (err) {
192
+ if (err instanceof types_2.RequestHandlerError &&
193
+ err.code === types_1.ServerErrorCode.DENIED_BY_POLICY) {
194
+ // can't read back, just return undefined, outer logic handles it
195
+ }
196
+ else {
197
+ throw err;
198
+ }
199
+ }
200
+ // conduct the deletion
201
+ this.service.verbose(`Conducting delete ${model}:\n${JSON.stringify(args)}`);
202
+ yield tx[model].delete(args);
203
+ return readResult;
204
+ }));
205
+ }
206
+ catch (err) {
207
+ throw this.processError(err, 'del', model);
208
+ }
209
+ if (result) {
210
+ return result;
211
+ }
212
+ else {
213
+ throw new types_2.RequestHandlerError(types_1.ServerErrorCode.READ_BACK_AFTER_WRITE_DENIED);
214
+ }
215
+ });
216
+ }
217
+ isPrismaClientKnownRequestError(err) {
218
+ return (err.__proto__.constructor.name === 'PrismaClientKnownRequestError');
219
+ }
220
+ isPrismaClientValidationError(err) {
221
+ return err.__proto__.constructor.name === 'PrismaClientValidationError';
222
+ }
223
+ processError(err, operation, model) {
224
+ if (err instanceof types_2.RequestHandlerError) {
225
+ return err;
226
+ }
227
+ if (this.isPrismaClientKnownRequestError(err)) {
228
+ this.service.warn(`Prisma request error: ${operation} ${model}: ${err}`);
229
+ // errors thrown by Prisma, try mapping to a known error
230
+ if (PRISMA_ERROR_MAPPING[err.code]) {
231
+ return new types_2.RequestHandlerError(PRISMA_ERROR_MAPPING[err.code], (0, types_1.getServerErrorMessage)(PRISMA_ERROR_MAPPING[err.code]));
232
+ }
233
+ else {
234
+ return new types_2.RequestHandlerError(types_1.ServerErrorCode.UNKNOWN, 'an unhandled Prisma error occurred: ' + err.code);
235
+ }
236
+ }
237
+ else if (this.isPrismaClientValidationError(err)) {
238
+ this.service.warn(`Prisma validation error: ${operation} ${model}: ${err}`);
239
+ // prisma validation error
240
+ return new types_2.RequestHandlerError(types_1.ServerErrorCode.INVALID_REQUEST_PARAMS, (0, types_1.getServerErrorMessage)(types_1.ServerErrorCode.INVALID_REQUEST_PARAMS));
241
+ }
242
+ else if (err instanceof validation_1.ValidationError) {
243
+ this.service.warn(`Field constraint validation error: ${operation} ${model}: ${err.message}`);
244
+ return new types_2.RequestHandlerError(types_1.ServerErrorCode.INVALID_REQUEST_PARAMS, err.message);
245
+ }
246
+ else {
247
+ // generic errors
248
+ this.service.error(`An unknown error occurred: ${JSON.stringify(err)}`);
249
+ if (err instanceof Error && err.stack) {
250
+ this.service.error(err.stack);
251
+ }
252
+ return new types_2.RequestHandlerError(types_1.ServerErrorCode.UNKNOWN, (0, types_1.getServerErrorMessage)(types_1.ServerErrorCode.UNKNOWN));
253
+ }
254
+ }
255
+ }
256
+ exports.CRUD = CRUD;
257
+ //# sourceMappingURL=crud.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crud.js","sourceRoot":"","sources":["../../../../src/handler/data/crud.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,uDAAuD;AACvD,gDAAwB;AACxB,+CAAyD;AACzD,uCAOqB;AACrB,iDAAmD;AACnD,oCAA+C;AAC/C,iDAQwB;AAExB,MAAM,oBAAoB,GAAoC;IAC1D,KAAK,EAAE,uBAAe,CAAC,2BAA2B;IAClD,KAAK,EAAE,uBAAe,CAAC,8BAA8B;IACrD,KAAK,EAAE,uBAAe,CAAC,8BAA8B;CACxD,CAAC;AAEF;;GAEG;AACH,MAAa,IAAI;IACb,YAA6B,OAA0B;QAA1B,YAAO,GAAP,OAAO,CAAmB;IAAG,CAAC;IAE3D,IAAY,EAAE;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,EAAsB,CAAC;IAC/C,CAAC;IAEK,GAAG,CACL,KAAa,EACb,EAAU,EACV,IAAS,EACT,OAAqB;;YAErB,IAAI,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC;YAClB,IAAI,CAAC,KAAK,GAAG,IAAA,kBAAG,EAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YAErC,IAAI,QAAmB,CAAC;YACxB,IAAI;gBACA,QAAQ,GAAG,MAAM,IAAA,4BAAa,EAC1B,KAAK,EACL,IAAI,EACJ,IAAI,CAAC,OAAO,EACZ,OAAO,EACP,IAAI,CAAC,EAAE,CACV,CAAC;aACL;YAAC,OAAO,GAAG,EAAE;gBACV,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;aAC9C;YAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;gBACvB,MAAM,IAAI,2BAAmB,CAAC,uBAAe,CAAC,gBAAgB,CAAC,CAAC;aACnE;YACD,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;KAAA;IAEK,IAAI,CACN,KAAa,EACb,IAAS,EACT,OAAqB;;YAErB,IAAI;gBACA,OAAO,MAAM,IAAA,4BAAa,EACtB,KAAK,EACL,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,EACV,IAAI,CAAC,OAAO,EACZ,OAAO,EACP,IAAI,CAAC,EAAE,CACV,CAAC;aACL;YAAC,OAAO,GAAG,EAAE;gBACV,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;aAC/C;QACL,CAAC;KAAA;IAEK,MAAM,CACR,KAAa,EACb,IAAS,EACT,OAAqB;;YAErB,IAAI,CAAC,IAAI,EAAE;gBACP,MAAM,IAAI,2BAAmB,CACzB,uBAAe,CAAC,sBAAsB,EACtC,kBAAkB,CACrB,CAAC;aACL;YACD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACZ,MAAM,IAAI,2BAAmB,CACzB,uBAAe,CAAC,sBAAsB,EACtC,wBAAwB,CAC3B,CAAC;aACL;YAED,IAAI,YAA4B,CAAC;YAEjC,IAAI;gBACA,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEpE,8EAA8E;gBAC9E,MAAM,IAAA,qCAAsB,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBAExD,MAAM,aAAa,GAAG,IAAA,cAAI,GAAE,CAAC;gBAE7B,mCAAmC;gBACnC,YAAY,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CACrC,CAAO,EAAgC,EAAE,EAAE;oBACvC,uEAAuE;oBACvE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,IAAA,kCAAmB,EAC/C,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,IAAI,CAAC,OAAO,CACf,CAAC;oBAEF,qBAAqB;oBACrB,IAAI,CAAC,OAAO,CAAC,OAAO,CAChB,sBAAsB,KAAK,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAC1D,CAAC;oBACF,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAEjD,CAAC;oBAEF,mDAAmD;oBACnD,MAAM,IAAA,gCAAiB,EACnB,KAAK,EACL,CAAC,YAAY,CAAC,EAAE,CAAC,EACjB,QAAQ,EACR,IAAI,CAAC,OAAO,EACZ,OAAO,EACP,EAAE,CACL,CAAC;oBAEF,+CAA+C;oBAC/C,MAAM,OAAO,CAAC,GAAG,CACb,aAAa,CAAC,GAAG,CAAC,CAAO,KAAK,EAAE,EAAE;wBAC9B,MAAM,UAAU,GAAG,MAAM,IAAA,uBAAQ,EAAC,KAAK,EAAE,EAAE,EAAE;4BACzC,CAAC,kCAAsB,CAAC,EAAE,GAAG,aAAa,SAAS;yBACtD,CAAC,CAAC;wBACH,IAAI,CAAC,OAAO,CAAC,OAAO,CAChB,yCAAyC,KAAK,KAAK,UAAU,CAAC,IAAI,CAC9D,IAAI,CACP,GAAG,CACP,CAAC;wBACF,MAAM,IAAA,gCAAiB,EACnB,KAAK,EACL,UAAU,EACV,QAAQ,EACR,IAAI,CAAC,OAAO,EACZ,OAAO,EACP,EAAE,CACL,CAAC;oBACN,CAAC,CAAA,CAAC,CACL,CAAC;oBAEF,OAAO,YAAY,CAAC;gBACxB,CAAC,CAAA,CACJ,CAAC;aACL;YAAC,OAAO,GAAG,EAAE;gBACV,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;aACjD;YAED,oEAAoE;YACpE,MAAM,QAAQ,mCAAQ,IAAI,KAAE,KAAK,EAAE,EAAE,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE,GAAE,CAAC;YAC7D,OAAO,QAAQ,CAAC,IAAI,CAAC;YAErB,IAAI;gBACA,MAAM,MAAM,GAAG,MAAM,IAAA,4BAAa,EAC9B,KAAK,EACL,QAAQ,EACR,IAAI,CAAC,OAAO,EACZ,OAAO,EACP,IAAI,CAAC,EAAE,CACV,CAAC;gBACF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;oBACrB,MAAM,IAAI,2BAAmB,CACzB,uBAAe,CAAC,4BAA4B,CAC/C,CAAC;iBACL;gBACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;aACpB;YAAC,OAAO,GAAG,EAAE;gBACV,IACI,GAAG,YAAY,2BAAmB;oBAClC,GAAG,CAAC,IAAI,KAAK,uBAAe,CAAC,gBAAgB,EAC/C;oBACE,MAAM,IAAI,2BAAmB,CACzB,uBAAe,CAAC,4BAA4B,CAC/C,CAAC;iBACL;qBAAM;oBACH,MAAM,GAAG,CAAC;iBACb;aACJ;QACL,CAAC;KAAA;IAEK,MAAM,CACR,KAAa,EACb,EAAU,EACV,IAAS,EACT,OAAqB;;YAErB,IAAI,CAAC,IAAI,EAAE;gBACP,MAAM,IAAI,2BAAmB,CACzB,uBAAe,CAAC,sBAAsB,EACtC,kBAAkB,CACrB,CAAC;aACL;YAED,IAAI;gBACA,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEpE,8EAA8E;gBAC9E,MAAM,IAAA,qCAAsB,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBAExD,IAAI,CAAC,KAAK,mCAAQ,IAAI,CAAC,KAAK,KAAE,EAAE,GAAE,CAAC;gBAEnC,MAAM,aAAa,GAAG,IAAA,cAAI,GAAE,CAAC;gBAE7B,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CACtB,CAAO,EAAgC,EAAE,EAAE;oBACvC,mFAAmF;oBACnF,MAAM,IAAA,6BAAc,EAChB,KAAK,EACL,EAAE,EACF,IAAI,EACJ,IAAI,CAAC,OAAO,EACZ,OAAO,EACP,EAAE,CACL,CAAC;oBAEF,uEAAuE;oBACvE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,IAAA,kCAAmB,EAC/C,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,IAAI,CAAC,OAAO,CACf,CAAC;oBAEF,qBAAqB;oBACrB,IAAI,CAAC,OAAO,CAAC,OAAO,CAChB,sBAAsB,KAAK,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAC1D,CAAC;oBACF,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAE7B,+CAA+C;oBAC/C,MAAM,OAAO,CAAC,GAAG,CACb,aAAa,CAAC,GAAG,CAAC,CAAO,KAAK,EAAE,EAAE;wBAC9B,MAAM,UAAU,GAAG,MAAM,IAAA,uBAAQ,EAAC,KAAK,EAAE,EAAE,EAAE;4BACzC,CAAC,kCAAsB,CAAC,EAAE,GAAG,aAAa,SAAS;yBACtD,CAAC,CAAC;wBACH,IAAI,CAAC,OAAO,CAAC,OAAO,CAChB,yCAAyC,KAAK,KAAK,UAAU,CAAC,IAAI,CAC9D,IAAI,CACP,GAAG,CACP,CAAC;wBACF,MAAM,IAAA,gCAAiB,EACnB,KAAK,EACL,UAAU,EACV,QAAQ,EACR,IAAI,CAAC,OAAO,EACZ,OAAO,EACP,EAAE,CACL,CAAC;oBACN,CAAC,CAAA,CAAC,CACL,CAAC;gBACN,CAAC,CAAA,CACJ,CAAC;aACL;YAAC,OAAO,GAAG,EAAE;gBACV,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;aACjD;YAED,oEAAoE;YACpE,MAAM,QAAQ,qBAAQ,IAAI,CAAE,CAAC;YAC7B,OAAO,QAAQ,CAAC,IAAI,CAAC;YAErB,IAAI;gBACA,MAAM,MAAM,GAAG,MAAM,IAAA,4BAAa,EAC9B,KAAK,EACL,QAAQ,EACR,IAAI,CAAC,OAAO,EACZ,OAAO,EACP,IAAI,CAAC,EAAE,CACV,CAAC;gBACF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;oBACrB,MAAM,IAAI,2BAAmB,CACzB,uBAAe,CAAC,4BAA4B,CAC/C,CAAC;iBACL;gBACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;aACpB;YAAC,OAAO,GAAG,EAAE;gBACV,IACI,GAAG,YAAY,2BAAmB;oBAClC,GAAG,CAAC,IAAI,KAAK,uBAAe,CAAC,gBAAgB,EAC/C;oBACE,MAAM,IAAI,2BAAmB,CACzB,uBAAe,CAAC,4BAA4B,CAC/C,CAAC;iBACL;qBAAM;oBACH,MAAM,GAAG,CAAC;iBACb;aACJ;QACL,CAAC;KAAA;IAEK,GAAG,CACL,KAAa,EACb,EAAU,EACV,IAAS,EACT,OAAqB;;YAErB,IAAI,MAAe,CAAC;YAEpB,IAAI;gBACA,sDAAsD;gBACtD,MAAM,IAAA,gCAAiB,EACnB,KAAK,EACL,CAAC,EAAE,CAAC,EACJ,QAAQ,EACR,IAAI,CAAC,OAAO,EACZ,OAAO,EACP,IAAI,CAAC,EAAE,CACV,CAAC;gBAEF,IAAI,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC;gBAClB,IAAI,CAAC,KAAK,mCAAQ,IAAI,CAAC,KAAK,KAAE,EAAE,GAAE,CAAC;gBAEnC,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAC/B,CAAO,EAAgC,EAAE,EAAE;oBACvC,gEAAgE;oBAChE,IAAI,UAAe,CAAC;oBACpB,IAAI;wBACA,MAAM,KAAK,GAAG,MAAM,IAAA,4BAAa,EAC7B,KAAK,EACL,IAAI,EACJ,IAAI,CAAC,OAAO,EACZ,OAAO,EACP,EAAE,CACL,CAAC;wBACF,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;qBACzB;oBAAC,OAAO,GAAG,EAAE;wBACV,IACI,GAAG,YAAY,2BAAmB;4BAClC,GAAG,CAAC,IAAI,KAAK,uBAAe,CAAC,gBAAgB,EAC/C;4BACE,iEAAiE;yBACpE;6BAAM;4BACH,MAAM,GAAG,CAAC;yBACb;qBACJ;oBAED,uBAAuB;oBACvB,IAAI,CAAC,OAAO,CAAC,OAAO,CAChB,qBAAqB,KAAK,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CACzD,CAAC;oBACF,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAE7B,OAAO,UAAU,CAAC;gBACtB,CAAC,CAAA,CACJ,CAAC;aACL;YAAC,OAAO,GAAG,EAAE;gBACV,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;aAC9C;YAED,IAAI,MAAM,EAAE;gBACR,OAAO,MAAM,CAAC;aACjB;iBAAM;gBACH,MAAM,IAAI,2BAAmB,CACzB,uBAAe,CAAC,4BAA4B,CAC/C,CAAC;aACL;QACL,CAAC;KAAA;IAEO,+BAA+B,CACnC,GAAQ;QAER,OAAO,CACH,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,KAAK,+BAA+B,CACrE,CAAC;IACN,CAAC;IAEO,6BAA6B,CACjC,GAAQ;QAER,OAAO,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,KAAK,6BAA6B,CAAC;IAC5E,CAAC;IAEO,YAAY,CAChB,GAAY,EACZ,SAAuD,EACvD,KAAa;QAEb,IAAI,GAAG,YAAY,2BAAmB,EAAE;YACpC,OAAO,GAAG,CAAC;SACd;QAED,IAAI,IAAI,CAAC,+BAA+B,CAAC,GAAG,CAAC,EAAE;YAC3C,IAAI,CAAC,OAAO,CAAC,IAAI,CACb,yBAAyB,SAAS,IAAI,KAAK,KAAK,GAAG,EAAE,CACxD,CAAC;YAEF,wDAAwD;YACxD,IAAI,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAChC,OAAO,IAAI,2BAAmB,CAC1B,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,EAC9B,IAAA,6BAAqB,EAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CACxD,CAAC;aACL;iBAAM;gBACH,OAAO,IAAI,2BAAmB,CAC1B,uBAAe,CAAC,OAAO,EACvB,sCAAsC,GAAG,GAAG,CAAC,IAAI,CACpD,CAAC;aACL;SACJ;aAAM,IAAI,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,EAAE;YAChD,IAAI,CAAC,OAAO,CAAC,IAAI,CACb,4BAA4B,SAAS,IAAI,KAAK,KAAK,GAAG,EAAE,CAC3D,CAAC;YAEF,0BAA0B;YAC1B,OAAO,IAAI,2BAAmB,CAC1B,uBAAe,CAAC,sBAAsB,EACtC,IAAA,6BAAqB,EAAC,uBAAe,CAAC,sBAAsB,CAAC,CAChE,CAAC;SACL;aAAM,IAAI,GAAG,YAAY,4BAAe,EAAE;YACvC,IAAI,CAAC,OAAO,CAAC,IAAI,CACb,sCAAsC,SAAS,IAAI,KAAK,KAAK,GAAG,CAAC,OAAO,EAAE,CAC7E,CAAC;YAEF,OAAO,IAAI,2BAAmB,CAC1B,uBAAe,CAAC,sBAAsB,EACtC,GAAG,CAAC,OAAO,CACd,CAAC;SACL;aAAM;YACH,iBAAiB;YACjB,IAAI,CAAC,OAAO,CAAC,KAAK,CACd,8BAA8B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CACtD,CAAC;YACF,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,KAAK,EAAE;gBACnC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aACjC;YACD,OAAO,IAAI,2BAAmB,CAC1B,uBAAe,CAAC,OAAO,EACvB,IAAA,6BAAqB,EAAC,uBAAe,CAAC,OAAO,CAAC,CACjD,CAAC;SACL;IACL,CAAC;CACJ;AAtaD,oBAsaC"}
@@ -8,12 +8,11 @@ import { RequestHandler } from '../types';
8
8
  export default class DataHandler<DbClient extends DbClientContract> implements RequestHandler {
9
9
  private readonly service;
10
10
  private readonly options;
11
+ private readonly crud;
11
12
  constructor(service: Service<DbClient>, options: RequestHandlerOptions);
12
13
  handle(req: NextApiRequest, res: NextApiResponse, path: string[]): Promise<void>;
13
14
  private get;
14
15
  private post;
15
16
  private put;
16
17
  private del;
17
- private isPrismaClientKnownRequestError;
18
- private isPrismaClientValidationError;
19
18
  }
@@ -8,22 +8,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
11
  Object.defineProperty(exports, "__esModule", { value: true });
15
- /* eslint-disable @typescript-eslint/no-explicit-any */
16
- const cuid_1 = __importDefault(require("cuid"));
17
- const constants_1 = require("../../constants");
18
12
  const types_1 = require("../../types");
19
- const validation_1 = require("../../validation");
20
13
  const types_2 = require("../types");
21
- const policy_utils_1 = require("./policy-utils");
22
- const PRISMA_ERROR_MAPPING = {
23
- P2002: types_1.ServerErrorCode.UNIQUE_CONSTRAINT_VIOLATION,
24
- P2003: types_1.ServerErrorCode.REFERENCE_CONSTRAINT_VIOLATION,
25
- P2025: types_1.ServerErrorCode.REFERENCE_CONSTRAINT_VIOLATION,
26
- };
14
+ const crud_1 = require("./crud");
27
15
  /**
28
16
  * Request handler for /data endpoint which processes data CRUD requests.
29
17
  */
@@ -31,6 +19,7 @@ class DataHandler {
31
19
  constructor(service, options) {
32
20
  this.service = service;
33
21
  this.options = options;
22
+ this.crud = new crud_1.CRUD(service);
34
23
  }
35
24
  handle(req, res, path) {
36
25
  return __awaiter(this, void 0, void 0, function* () {
@@ -79,6 +68,12 @@ class DataHandler {
79
68
  message: err.message,
80
69
  });
81
70
  break;
71
+ case types_1.ServerErrorCode.UNKNOWN:
72
+ res.status(500).send({
73
+ code: err.code,
74
+ message: err.message,
75
+ });
76
+ break;
82
77
  default:
83
78
  res.status(400).send({
84
79
  code: err.code,
@@ -86,48 +81,6 @@ class DataHandler {
86
81
  });
87
82
  }
88
83
  }
89
- else if (this.isPrismaClientKnownRequestError(err)) {
90
- this.service.warn(`${method} ${model}: ${err}`);
91
- // errors thrown by Prisma, try mapping to a known error
92
- if (PRISMA_ERROR_MAPPING[err.code]) {
93
- res.status(400).send({
94
- code: PRISMA_ERROR_MAPPING[err.code],
95
- message: (0, types_1.getServerErrorMessage)(PRISMA_ERROR_MAPPING[err.code]),
96
- });
97
- }
98
- else {
99
- res.status(400).send({
100
- code: 'PRISMA:' + err.code,
101
- message: 'an unhandled Prisma error occurred',
102
- });
103
- }
104
- }
105
- else if (this.isPrismaClientValidationError(err)) {
106
- this.service.warn(`${method} ${model}: ${err}`);
107
- // prisma validation error
108
- res.status(400).send({
109
- code: types_1.ServerErrorCode.INVALID_REQUEST_PARAMS,
110
- message: (0, types_1.getServerErrorMessage)(types_1.ServerErrorCode.INVALID_REQUEST_PARAMS),
111
- });
112
- }
113
- else if (err instanceof validation_1.ValidationError) {
114
- this.service.warn(`Field constraint validation error for model "${model}": ${err.message}`);
115
- res.status(400).send({
116
- code: types_1.ServerErrorCode.INVALID_REQUEST_PARAMS,
117
- message: err.message,
118
- });
119
- }
120
- else {
121
- // generic errors
122
- this.service.error(`An unknown error occurred: ${JSON.stringify(err)}`);
123
- if (err instanceof Error && err.stack) {
124
- this.service.error(err.stack);
125
- }
126
- res.status(500).send({
127
- code: types_1.ServerErrorCode.UNKNOWN,
128
- message: (0, types_1.getServerErrorMessage)(types_1.ServerErrorCode.UNKNOWN),
129
- });
130
- }
131
84
  }
132
85
  });
133
86
  }
@@ -137,72 +90,20 @@ class DataHandler {
137
90
  const args = req.query.q ? JSON.parse(req.query.q) : {};
138
91
  if (id) {
139
92
  // GET <model>/:id, make sure "id" is injected
140
- args.where = (0, policy_utils_1.and)(args.where, { id });
141
- const result = yield (0, policy_utils_1.readWithCheck)(model, args, this.service, context, this.service.db);
142
- if (result.length === 0) {
143
- throw new types_2.RequestHandlerError(types_1.ServerErrorCode.ENTITY_NOT_FOUND);
144
- }
145
- res.status(200).send(result[0]);
93
+ const result = yield this.crud.get(model, id, args, context);
94
+ res.status(200).send(result);
146
95
  }
147
96
  else {
148
97
  // GET <model>/, get list
149
- const result = yield (0, policy_utils_1.readWithCheck)(model, args, this.service, context, this.service.db);
98
+ const result = yield this.crud.find(model, args, context);
150
99
  res.status(200).send(result);
151
100
  }
152
101
  });
153
102
  }
154
103
  post(req, res, model, context) {
155
104
  return __awaiter(this, void 0, void 0, function* () {
156
- // validate args
157
- const args = req.body;
158
- if (!args) {
159
- throw new types_2.RequestHandlerError(types_1.ServerErrorCode.INVALID_REQUEST_PARAMS, 'body is required');
160
- }
161
- if (!args.data) {
162
- throw new types_2.RequestHandlerError(types_1.ServerErrorCode.INVALID_REQUEST_PARAMS, 'data field is required');
163
- }
164
- yield this.service.validateModelPayload(model, 'create', args.data);
165
- // preprocess payload to modify fields as required by attribute like @password
166
- yield (0, policy_utils_1.preprocessWritePayload)(model, args, this.service);
167
- const transactionId = (0, cuid_1.default)();
168
- // start an interactive transaction
169
- const r = yield this.service.db.$transaction((tx) => __awaiter(this, void 0, void 0, function* () {
170
- // inject transaction id into update/create payload (direct and nested)
171
- const { createdModels } = yield (0, policy_utils_1.injectTransactionId)(model, args, 'create', transactionId, this.service);
172
- // conduct the create
173
- this.service.verbose(`Conducting create: ${model}:\n${JSON.stringify(args)}`);
174
- const createResult = (yield tx[model].create(args));
175
- // verify that the created entity pass policy check
176
- yield (0, policy_utils_1.checkPolicyForIds)(model, [createResult.id], 'create', this.service, context, tx);
177
- // verify that nested creates pass policy check
178
- yield Promise.all(createdModels.map((model) => __awaiter(this, void 0, void 0, function* () {
179
- const createdIds = yield (0, policy_utils_1.queryIds)(model, tx, {
180
- [constants_1.TRANSACTION_FIELD_NAME]: `${transactionId}:create`,
181
- });
182
- this.service.verbose(`Validating nestedly created entities: ${model}#[${createdIds.join(', ')}]`);
183
- yield (0, policy_utils_1.checkPolicyForIds)(model, createdIds, 'create', this.service, context, tx);
184
- })));
185
- return createResult;
186
- }));
187
- // verify that return data requested by query args pass policy check
188
- const readArgs = Object.assign(Object.assign({}, args), { where: { id: r.id } });
189
- delete readArgs.data;
190
- try {
191
- const result = yield (0, policy_utils_1.readWithCheck)(model, readArgs, this.service, context, this.service.db);
192
- if (result.length === 0) {
193
- throw new types_2.RequestHandlerError(types_1.ServerErrorCode.READ_BACK_AFTER_WRITE_DENIED);
194
- }
195
- res.status(201).send(result[0]);
196
- }
197
- catch (err) {
198
- if (err instanceof types_2.RequestHandlerError &&
199
- err.code === types_1.ServerErrorCode.DENIED_BY_POLICY) {
200
- throw new types_2.RequestHandlerError(types_1.ServerErrorCode.READ_BACK_AFTER_WRITE_DENIED);
201
- }
202
- else {
203
- throw err;
204
- }
205
- }
105
+ const result = yield this.crud.create(model, req.body, context);
106
+ res.status(201).send(result);
206
107
  });
207
108
  }
208
109
  put(req, res, model, id, context) {
@@ -210,51 +111,8 @@ class DataHandler {
210
111
  if (!id) {
211
112
  throw new types_2.RequestHandlerError(types_1.ServerErrorCode.INVALID_REQUEST_PARAMS, 'missing "id" parameter');
212
113
  }
213
- const args = req.body;
214
- if (!args) {
215
- throw new types_2.RequestHandlerError(types_1.ServerErrorCode.INVALID_REQUEST_PARAMS, 'body is required');
216
- }
217
- yield this.service.validateModelPayload(model, 'update', args.data);
218
- // preprocess payload to modify fields as required by attribute like @password
219
- yield (0, policy_utils_1.preprocessWritePayload)(model, args, this.service);
220
- args.where = Object.assign(Object.assign({}, args.where), { id });
221
- const transactionId = (0, cuid_1.default)();
222
- yield this.service.db.$transaction((tx) => __awaiter(this, void 0, void 0, function* () {
223
- // make sure the entity (including ones involved in nested write) pass policy check
224
- yield (0, policy_utils_1.preUpdateCheck)(model, id, args, this.service, context, tx);
225
- // inject transaction id into update/create payload (direct and nested)
226
- const { createdModels } = yield (0, policy_utils_1.injectTransactionId)(model, args, 'update', transactionId, this.service);
227
- // conduct the update
228
- this.service.verbose(`Conducting update: ${model}:\n${JSON.stringify(args)}`);
229
- yield tx[model].update(args);
230
- // verify that nested creates pass policy check
231
- yield Promise.all(createdModels.map((model) => __awaiter(this, void 0, void 0, function* () {
232
- const createdIds = yield (0, policy_utils_1.queryIds)(model, tx, {
233
- [constants_1.TRANSACTION_FIELD_NAME]: `${transactionId}:create`,
234
- });
235
- this.service.verbose(`Validating nestedly created entities: ${model}#[${createdIds.join(', ')}]`);
236
- yield (0, policy_utils_1.checkPolicyForIds)(model, createdIds, 'create', this.service, context, tx);
237
- })));
238
- }));
239
- // verify that return data requested by query args pass policy check
240
- const readArgs = Object.assign({}, args);
241
- delete readArgs.data;
242
- try {
243
- const result = yield (0, policy_utils_1.readWithCheck)(model, readArgs, this.service, context, this.service.db);
244
- if (result.length === 0) {
245
- throw new types_2.RequestHandlerError(types_1.ServerErrorCode.READ_BACK_AFTER_WRITE_DENIED);
246
- }
247
- res.status(200).send(result[0]);
248
- }
249
- catch (err) {
250
- if (err instanceof types_2.RequestHandlerError &&
251
- err.code === types_1.ServerErrorCode.DENIED_BY_POLICY) {
252
- throw new types_2.RequestHandlerError(types_1.ServerErrorCode.READ_BACK_AFTER_WRITE_DENIED);
253
- }
254
- else {
255
- throw err;
256
- }
257
- }
114
+ const result = yield this.crud.update(model, id, req.body, context);
115
+ res.status(200).send(result);
258
116
  });
259
117
  }
260
118
  del(req, res, model, id, context) {
@@ -262,45 +120,11 @@ class DataHandler {
262
120
  if (!id) {
263
121
  throw new types_2.RequestHandlerError(types_1.ServerErrorCode.INVALID_REQUEST_PARAMS, 'missing "id" parameter');
264
122
  }
265
- // ensures the item under deletion passes policy check
266
- yield (0, policy_utils_1.checkPolicyForIds)(model, [id], 'delete', this.service, context, this.service.db);
267
123
  const args = req.query.q ? JSON.parse(req.query.q) : {};
268
- args.where = Object.assign(Object.assign({}, args.where), { id });
269
- const r = yield this.service.db.$transaction((tx) => __awaiter(this, void 0, void 0, function* () {
270
- // first fetch the data that needs to be returned after deletion
271
- let readResult;
272
- try {
273
- const items = yield (0, policy_utils_1.readWithCheck)(model, args, this.service, context, tx);
274
- readResult = items[0];
275
- }
276
- catch (err) {
277
- if (err instanceof types_2.RequestHandlerError &&
278
- err.code === types_1.ServerErrorCode.DENIED_BY_POLICY) {
279
- // can't read back, just return undefined, outer logic handles it
280
- }
281
- else {
282
- throw err;
283
- }
284
- }
285
- // conduct the deletion
286
- this.service.verbose(`Conducting delete ${model}:\n${JSON.stringify(args)}`);
287
- yield tx[model].delete(args);
288
- return readResult;
289
- }));
290
- if (r) {
291
- res.status(200).send(r);
292
- }
293
- else {
294
- throw new types_2.RequestHandlerError(types_1.ServerErrorCode.READ_BACK_AFTER_WRITE_DENIED);
295
- }
124
+ const result = yield this.crud.del(model, id, args, context);
125
+ res.status(200).send(result);
296
126
  });
297
127
  }
298
- isPrismaClientKnownRequestError(err) {
299
- return (err.__proto__.constructor.name === 'PrismaClientKnownRequestError');
300
- }
301
- isPrismaClientValidationError(err) {
302
- return err.__proto__.constructor.name === 'PrismaClientValidationError';
303
- }
304
128
  }
305
129
  exports.default = DataHandler;
306
130
  //# sourceMappingURL=handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../../src/handler/data/handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../../src/handler/data/handler.ts"],"names":[],"mappings":"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"}
package/lib/types.d.ts CHANGED
@@ -85,6 +85,15 @@ export interface Service<DbClient = any> {
85
85
  * @param context Query context
86
86
  */
87
87
  buildQueryGuard(model: string, operation: PolicyOperationKind, context: QueryContext): Promise<unknown>;
88
+ /**
89
+ * Validates the given write payload for the given model according to field constraints in model.
90
+ *
91
+ * @param model Model name
92
+ * @param mode Write mode
93
+ * @param payload Write payload
94
+ *
95
+ * @throws @see ValidationError
96
+ */
88
97
  validateModelPayload(model: string, mode: 'create' | 'update', payload: unknown): Promise<void>;
89
98
  /**
90
99
  * Generates a log message with verbose level.
package/lib/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;;AAqIA;;GAEG;AACH,IAAY,eAmCX;AAnCD,WAAY,eAAe;IACvB;;OAEG;IACH,wDAAqC,CAAA;IAErC;;OAEG;IACH,oEAAiD,CAAA;IAEjD;;OAEG;IACH,wDAAqC,CAAA;IAErC;;OAEG;IACH,8EAA2D,CAAA;IAE3D;;OAEG;IACH,oFAAiE,CAAA;IAEjE;;OAEG;IACH,gFAA6D,CAAA;IAE7D;;OAEG;IACH,sCAAmB,CAAA;AACvB,CAAC,EAnCW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAmC1B;AAED,SAAgB,qBAAqB,CAAC,IAAqB;IACvD,QAAQ,IAAI,EAAE;QACV,KAAK,eAAe,CAAC,gBAAgB;YACjC,OAAO,mCAAmC,CAAC;QAE/C,KAAK,eAAe,CAAC,sBAAsB;YACvC,OAAO,gCAAgC,CAAC;QAE5C,KAAK,eAAe,CAAC,gBAAgB;YACjC,OAAO,uDAAuD,CAAC;QAEnE,KAAK,eAAe,CAAC,2BAA2B;YAC5C,OAAO,oEAAoE,CAAC;QAEhF,KAAK,eAAe,CAAC,8BAA8B;YAC/C,OAAO,yEAAyE,CAAC;QAErF,KAAK,eAAe,CAAC,4BAA4B;YAC7C,OAAO,gGAAgG,CAAC;QAE5G,KAAK,eAAe,CAAC,OAAO;YACxB,OAAO,2BAA2B,CAAC;QAEvC;YACI,OAAO,kBAAkB,IAAI,EAAE,CAAC;KACvC;AACL,CAAC;AA1BD,sDA0BC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;;AA8IA;;GAEG;AACH,IAAY,eAmCX;AAnCD,WAAY,eAAe;IACvB;;OAEG;IACH,wDAAqC,CAAA;IAErC;;OAEG;IACH,oEAAiD,CAAA;IAEjD;;OAEG;IACH,wDAAqC,CAAA;IAErC;;OAEG;IACH,8EAA2D,CAAA;IAE3D;;OAEG;IACH,oFAAiE,CAAA;IAEjE;;OAEG;IACH,gFAA6D,CAAA;IAE7D;;OAEG;IACH,sCAAmB,CAAA;AACvB,CAAC,EAnCW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAmC1B;AAED,SAAgB,qBAAqB,CAAC,IAAqB;IACvD,QAAQ,IAAI,EAAE;QACV,KAAK,eAAe,CAAC,gBAAgB;YACjC,OAAO,mCAAmC,CAAC;QAE/C,KAAK,eAAe,CAAC,sBAAsB;YACvC,OAAO,gCAAgC,CAAC;QAE5C,KAAK,eAAe,CAAC,gBAAgB;YACjC,OAAO,uDAAuD,CAAC;QAEnE,KAAK,eAAe,CAAC,2BAA2B;YAC5C,OAAO,oEAAoE,CAAC;QAEhF,KAAK,eAAe,CAAC,8BAA8B;YAC/C,OAAO,yEAAyE,CAAC;QAErF,KAAK,eAAe,CAAC,4BAA4B;YAC7C,OAAO,gGAAgG,CAAC;QAE5G,KAAK,eAAe,CAAC,OAAO;YACxB,OAAO,2BAA2B,CAAC;QAEvC;YACI,OAAO,kBAAkB,IAAI,EAAE,CAAC;KACvC;AACL,CAAC;AA1BD,sDA0BC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@zenstackhq/runtime",
3
3
  "displayName": "ZenStack Runtime Library",
4
- "version": "0.3.19",
4
+ "version": "0.3.20",
5
5
  "description": "Runtime of ZenStack for both client-side and server-side environments.",
6
6
  "repository": {
7
7
  "type": "git",
package/lib/client.d.ts DELETED
@@ -1,3 +0,0 @@
1
- export { ServerErrorCode, RequestOptions } from './types';
2
- export * as request from './request';
3
- export * from './validation';
package/lib/client.js DELETED
@@ -1,34 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
26
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.request = exports.ServerErrorCode = void 0;
30
- var types_1 = require("./types");
31
- Object.defineProperty(exports, "ServerErrorCode", { enumerable: true, get: function () { return types_1.ServerErrorCode; } });
32
- exports.request = __importStar(require("./request"));
33
- __exportStar(require("./validation"), exports);
34
- //# sourceMappingURL=client.js.map
package/lib/client.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAA0D;AAAjD,wGAAA,eAAe,OAAA;AACxB,qDAAqC;AACrC,+CAA6B"}