@zenstackhq/runtime 0.6.0-pre.2 → 1.0.0-alpha.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.
Files changed (120) 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 +65 -0
  11. package/enhancements/nested-write-vistor.js +155 -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 +278 -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 +78 -0
  29. package/enhancements/policy/policy-utils.js +575 -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 +24 -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 +16 -0
  41. package/enhancements/utils.js +31 -0
  42. package/enhancements/utils.js.map +1 -0
  43. package/error.d.ts +10 -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 +7 -5
  50. package/{lib/serialization-utils.d.ts → serialization-utils.d.ts} +0 -0
  51. package/{lib/serialization-utils.js → serialization-utils.js} +0 -0
  52. package/serialization-utils.js.map +1 -0
  53. package/types.d.ts +73 -0
  54. package/types.js +14 -0
  55. package/types.js.map +1 -0
  56. package/{lib/validation.d.ts → validation.d.ts} +0 -0
  57. package/{lib/validation.js → validation.js} +0 -0
  58. package/validation.js.map +1 -0
  59. package/{lib/version.d.ts → version.d.ts} +0 -0
  60. package/{lib/version.js → version.js} +6 -1
  61. package/version.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.map +0 -1
  117. package/server/index.d.ts +0 -16
  118. package/server/index.js +0 -6
  119. package/types/index.d.ts +0 -1
  120. package/types/index.js +0 -3
@@ -1,73 +0,0 @@
1
- import { DbOperations, PolicyOperationKind, QueryContext, Service } from '../../types';
2
- /**
3
- * Creates a conjunction of a list of query conditions.
4
- */
5
- export declare function and(...conditions: unknown[]): any;
6
- /**
7
- * Creates a disjunction of a list of query conditions.
8
- */
9
- export declare function or(...conditions: unknown[]): any;
10
- /**
11
- * Wraps a value into array if it's not already one
12
- */
13
- export declare function ensureArray<T>(value: T): Array<T>;
14
- /**
15
- * Given a where condition, queries db and returns IDs of result entities
16
- */
17
- export declare function queryIds(model: string, db: Record<string, DbOperations>, where: unknown): Promise<string[]>;
18
- /**
19
- * Read model entities w.r.t the given query args. The result list
20
- * are guaranteed to fully satisfy 'read' policy rules recursively.
21
- *
22
- * For to-many relations involved, items not satisfying policy are
23
- * silently trimmed. For to-one relation, if relation data fails policy
24
- * an CRUDError is thrown.
25
- *
26
- * @param model the model to query for
27
- * @param queryArgs the Prisma query args
28
- * @param service the ZenStack service
29
- * @param context the query context
30
- * @param db the db (or transaction)
31
- * @returns
32
- */
33
- export declare function readWithCheck(model: string, queryArgs: any, service: Service, context: QueryContext, db: Record<string, DbOperations>): Promise<unknown[]>;
34
- /**
35
- * Validates that a model entity satisfies 'update' policy rules
36
- * before conducting an update
37
- *
38
- * @param model model under update
39
- * @param id id of entity under update
40
- * @param updateArgs Prisma update args
41
- * @param service the ZenStack service
42
- * @param context the query context
43
- * @param transaction the db transaction context
44
- */
45
- export declare function preUpdateCheck(model: string, id: string, updateArgs: any, service: Service, context: QueryContext, transaction: Record<string, DbOperations>): Promise<void>;
46
- /**
47
- * Given a list of ids for a model, check if they all match policy rules, and if not,
48
- * throw a CRUDError.
49
- *
50
- * @param model the model
51
- * @param ids the entity ids
52
- * @param operation the operation to check for
53
- * @param service the ZenStack service
54
- * @param context the query context
55
- * @param db the db or transaction
56
- */
57
- export declare function checkPolicyForIds(model: string, ids: string[], operation: PolicyOperationKind, service: Service, context: QueryContext, db: Record<string, DbOperations>): Promise<void>;
58
- /**
59
- * Injects assignment of zenstack_transaction field for all nested
60
- * update/create in a Prisma update args recursively.
61
- *
62
- * @return a tuple containing all model types that are involved in
63
- * creation or updating, respectively
64
- */
65
- export declare function injectTransactionId(model: string, args: any, operation: PolicyOperationKind, transactionId: string, service: Service): Promise<{
66
- createdModels: string[];
67
- updatedModels: string[];
68
- }>;
69
- /**
70
- * Preprocesses the given write args to modify field values (in place) based on
71
- * attributes like @password
72
- */
73
- export declare function preprocessWritePayload(model: string, args: any, service: Service): Promise<void>;
@@ -1,447 +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.preprocessWritePayload = exports.injectTransactionId = exports.checkPolicyForIds = exports.preUpdateCheck = exports.readWithCheck = exports.queryIds = exports.ensureArray = exports.or = exports.and = void 0;
16
- /* eslint-disable @typescript-eslint/explicit-module-boundary-types */
17
- /* eslint-disable @typescript-eslint/no-explicit-any */
18
- const bcryptjs_1 = require("bcryptjs");
19
- const deepcopy_1 = __importDefault(require("deepcopy"));
20
- const superjson_1 = __importDefault(require("superjson"));
21
- const constants_1 = require("../../constants");
22
- const types_1 = require("../../types");
23
- const types_2 = require("../types");
24
- const nested_write_vistor_1 = require("./nested-write-vistor");
25
- //#region General helpers
26
- /**
27
- * Creates a conjunction of a list of query conditions.
28
- */
29
- function and(...conditions) {
30
- const filtered = conditions.filter((c) => !!c);
31
- if (filtered.length === 0) {
32
- return undefined;
33
- }
34
- else if (filtered.length === 1) {
35
- return filtered[0];
36
- }
37
- else {
38
- return { AND: filtered };
39
- }
40
- }
41
- exports.and = and;
42
- /**
43
- * Creates a disjunction of a list of query conditions.
44
- */
45
- function or(...conditions) {
46
- const filtered = conditions.filter((c) => !!c);
47
- if (filtered.length === 0) {
48
- return undefined;
49
- }
50
- else if (filtered.length === 1) {
51
- return filtered[0];
52
- }
53
- else {
54
- return { OR: filtered };
55
- }
56
- }
57
- exports.or = or;
58
- /**
59
- * Wraps a value into array if it's not already one
60
- */
61
- function ensureArray(value) {
62
- return Array.isArray(value) ? value : [value];
63
- }
64
- exports.ensureArray = ensureArray;
65
- /**
66
- * Given a where condition, queries db and returns IDs of result entities
67
- */
68
- function queryIds(model, db, where) {
69
- return __awaiter(this, void 0, void 0, function* () {
70
- const r = yield db[model].findMany({ select: { id: true }, where });
71
- return r.map((item) => item.id);
72
- });
73
- }
74
- exports.queryIds = queryIds;
75
- //#endregion
76
- //#region Policy enforcement helpers
77
- /**
78
- * Read model entities w.r.t the given query args. The result list
79
- * are guaranteed to fully satisfy 'read' policy rules recursively.
80
- *
81
- * For to-many relations involved, items not satisfying policy are
82
- * silently trimmed. For to-one relation, if relation data fails policy
83
- * an CRUDError is thrown.
84
- *
85
- * @param model the model to query for
86
- * @param queryArgs the Prisma query args
87
- * @param service the ZenStack service
88
- * @param context the query context
89
- * @param db the db (or transaction)
90
- * @returns
91
- */
92
- function readWithCheck(model, queryArgs, service, context, db) {
93
- return __awaiter(this, void 0, void 0, function* () {
94
- const args = (0, deepcopy_1.default)(queryArgs);
95
- args.where = and(args.where, yield service.buildQueryGuard(model, 'read', context));
96
- // recursively inject read guard conditions into the query args
97
- yield injectNestedReadConditions(model, args, service, context);
98
- service.verbose(`Reading with validation for ${model}: ${superjson_1.default.stringify(args)}`);
99
- const result = yield db[model].findMany(args);
100
- yield Promise.all(result.map((item) => postProcessForRead(item, model, args, service, context, db, 'read')));
101
- return result;
102
- });
103
- }
104
- exports.readWithCheck = readWithCheck;
105
- function injectNestedReadConditions(model, args, service, context) {
106
- var _a, _b, _c, _d;
107
- return __awaiter(this, void 0, void 0, function* () {
108
- const injectTarget = (_a = args.select) !== null && _a !== void 0 ? _a : args.include;
109
- if (!injectTarget) {
110
- return;
111
- }
112
- for (const field of Object.keys(injectTarget)) {
113
- const fieldInfo = yield service.resolveField(model, field);
114
- if (!fieldInfo || !fieldInfo.isDataModel) {
115
- // only care about relation fields
116
- continue;
117
- }
118
- if (fieldInfo.isArray) {
119
- if (typeof injectTarget[field] !== 'object') {
120
- injectTarget[field] = {};
121
- }
122
- // inject extra condition for to-many relation
123
- injectTarget[field].where = and(injectTarget.where, yield service.buildQueryGuard(fieldInfo.type, 'read', context));
124
- }
125
- else {
126
- // there's no way of injecting condition for to-one relation, so we
127
- // make sure 'id' field is selected and check them against query result
128
- if (((_b = injectTarget[field]) === null || _b === void 0 ? void 0 : _b.select) &&
129
- ((_d = (_c = injectTarget[field]) === null || _c === void 0 ? void 0 : _c.select) === null || _d === void 0 ? void 0 : _d.id) !== true) {
130
- injectTarget[field].select.id = true;
131
- }
132
- }
133
- // recurse
134
- yield injectNestedReadConditions(fieldInfo.type, injectTarget[field], service, context);
135
- }
136
- });
137
- }
138
- /**
139
- * Post processing checks for read model entities.
140
- * Validates to-one relations (which can't be trimmed
141
- * at query time) and removes fields that should be
142
- * omitted.
143
- */
144
- function postProcessForRead(entityData, model, args, service, context, db, operation) {
145
- var _a, _b;
146
- return __awaiter(this, void 0, void 0, function* () {
147
- if (!(entityData === null || entityData === void 0 ? void 0 : entityData.id)) {
148
- return;
149
- }
150
- for (const field of Object.keys(entityData)) {
151
- if (yield shouldOmit(service, model, field)) {
152
- delete entityData[field];
153
- }
154
- }
155
- const injectTarget = (_a = args.select) !== null && _a !== void 0 ? _a : args.include;
156
- if (!injectTarget) {
157
- return;
158
- }
159
- // to-one relation data cannot be trimmed by injected guards, we have to
160
- // post-check them
161
- for (const field of Object.keys(injectTarget)) {
162
- const fieldInfo = yield service.resolveField(model, field);
163
- if (!fieldInfo ||
164
- !fieldInfo.isDataModel ||
165
- fieldInfo.isArray ||
166
- !((_b = entityData === null || entityData === void 0 ? void 0 : entityData[field]) === null || _b === void 0 ? void 0 : _b.id)) {
167
- continue;
168
- }
169
- service.verbose(`Validating read of to-one relation: ${fieldInfo.type}#${entityData[field].id}`);
170
- yield checkPolicyForIds(fieldInfo.type, [entityData[field].id], operation, service, context, db);
171
- // recurse
172
- yield postProcessForRead(entityData[field], fieldInfo.type, injectTarget[field], service, context, db, operation);
173
- }
174
- });
175
- }
176
- /**
177
- * Validates that a model entity satisfies 'update' policy rules
178
- * before conducting an update
179
- *
180
- * @param model model under update
181
- * @param id id of entity under update
182
- * @param updateArgs Prisma update args
183
- * @param service the ZenStack service
184
- * @param context the query context
185
- * @param transaction the db transaction context
186
- */
187
- function preUpdateCheck(model, id, updateArgs, service, context, transaction) {
188
- return __awaiter(this, void 0, void 0, function* () {
189
- // check the entity directly under update first
190
- yield checkPolicyForIds(model, [id], 'update', service, context, transaction);
191
- // We need to ensure that all nested updates respect policy rules of
192
- // the corresponding model.
193
- //
194
- // Here we use a visitor to collect all necessary
195
- // checkes. During visiting, for every update we meet agains a relation,
196
- // we collect its path (starting from the root object). If the relation
197
- // is a to-many one, it can carry filter condition that we collect as well.
198
- //
199
- // After the visiting, we validate that each collected path satisfies
200
- // corresponding policy rules by making separate queries.
201
- const visitor = new nested_write_vistor_1.NestedWriteVisitor(service);
202
- const state = [];
203
- const checks = [];
204
- const visitAction = (fieldInfo, action, fieldData, _parentData, state) => __awaiter(this, void 0, void 0, function* () {
205
- if (!fieldInfo.isDataModel) {
206
- return state;
207
- }
208
- if (![
209
- 'update',
210
- 'updateMany',
211
- 'upsert',
212
- 'delete',
213
- 'deleteMany',
214
- ].includes(action)) {
215
- // no more nested writes inside, stop recursion
216
- return undefined;
217
- }
218
- // for to-many relation, a filter condition can be attached
219
- let condition = undefined;
220
- if (fieldInfo.isArray) {
221
- switch (action) {
222
- case 'update':
223
- case 'updateMany':
224
- case 'upsert':
225
- // condition is wrapped in 'where'
226
- condition = or(...ensureArray(fieldData).map((d) => d.where));
227
- break;
228
- case 'delete':
229
- case 'deleteMany':
230
- // condition is not wrapped
231
- condition = or(...ensureArray(fieldData));
232
- break;
233
- }
234
- }
235
- // build up a new segment of path
236
- const selectionPath = [
237
- ...state,
238
- { field: fieldInfo, where: condition },
239
- ];
240
- const operation = [
241
- 'update',
242
- 'updateMany',
243
- 'upsert',
244
- ].includes(action)
245
- ? 'update'
246
- : 'delete';
247
- // collect an asynchronous check action
248
- checks.push(checkPolicyForSelectionPath(model, id, selectionPath, operation, transaction, service, context));
249
- // recurse down with the current path as the new state
250
- return selectionPath;
251
- });
252
- yield visitor.visit(model, updateArgs.data, undefined, state, visitAction);
253
- yield Promise.all(checks);
254
- });
255
- }
256
- exports.preUpdateCheck = preUpdateCheck;
257
- /**
258
- * Given a list of ids for a model, check if they all match policy rules, and if not,
259
- * throw a CRUDError.
260
- *
261
- * @param model the model
262
- * @param ids the entity ids
263
- * @param operation the operation to check for
264
- * @param service the ZenStack service
265
- * @param context the query context
266
- * @param db the db or transaction
267
- */
268
- function checkPolicyForIds(model, ids, operation, service, context, db) {
269
- return __awaiter(this, void 0, void 0, function* () {
270
- service.verbose(`Checking policy for ${model}#[${ids.join(', ')}] for ${operation}`);
271
- // build a query condition with policy injected
272
- const idCondition = ids.length > 1 ? { id: { in: ids } } : { id: ids[0] };
273
- const query = {
274
- where: and(idCondition, yield service.buildQueryGuard(model, operation, context)),
275
- select: { id: true },
276
- };
277
- // query with policy injected
278
- const filteredResult = (yield db[model].findMany(query));
279
- // see if we get fewer items with policy, if so, reject with an throw
280
- const filteredIds = filteredResult.map((item) => item.id);
281
- if (filteredIds.length < ids.length) {
282
- const gap = ids.filter((id) => !filteredIds.includes(id));
283
- throw new types_2.CRUDError(types_1.ServerErrorCode.DENIED_BY_POLICY, `denied by policy: entities failed '${operation}' check, ${model}#[${gap.join(', ')}]`);
284
- }
285
- });
286
- }
287
- exports.checkPolicyForIds = checkPolicyForIds;
288
- /**
289
- * Given a selection path, check if the entities at the end of path satisfy
290
- * policy rules. If not, throw an error.
291
- */
292
- function checkPolicyForSelectionPath(model, id, selectionPath, operation, db, service, context) {
293
- return __awaiter(this, void 0, void 0, function* () {
294
- const targetField = selectionPath[selectionPath.length - 1].field;
295
- // build a Prisma query for the path
296
- const query = buildChainedSelectQuery(id, selectionPath);
297
- service.verbose(`Query for selection path: model ${model}, path ${superjson_1.default.stringify(selectionPath)}, query ${superjson_1.default.stringify(query)}`);
298
- const r = yield db[model].findUnique(query);
299
- // collect ids at the end of the path
300
- const ids = collectTerminalEntityIds(selectionPath, r);
301
- service.verbose(`Collected leaf ids: ${superjson_1.default.stringify(ids)}`);
302
- if (ids.length === 0) {
303
- return;
304
- }
305
- // check policies for the collected ids
306
- yield checkPolicyForIds(targetField.type, ids, operation, service, context, db);
307
- });
308
- }
309
- /**
310
- * Builds a Prisma query for the given selection path
311
- */
312
- function buildChainedSelectQuery(id, selectionPath) {
313
- const query = { where: { id }, select: { id: true } };
314
- let currSelect = query.select;
315
- for (const path of selectionPath) {
316
- const nextSelect = { select: { id: true } };
317
- currSelect[path.field.name] = nextSelect;
318
- if (path.where) {
319
- currSelect[path.field.name].where = path.where;
320
- }
321
- currSelect = nextSelect.select;
322
- }
323
- return query;
324
- }
325
- function collectTerminalEntityIds(selectionPath, data) {
326
- let curr = data;
327
- for (const path of selectionPath) {
328
- curr = curr[path.field.name];
329
- }
330
- if (!curr) {
331
- throw new types_2.CRUDError(types_1.ServerErrorCode.UNKNOWN, 'an unexpected error occurred');
332
- }
333
- return Array.isArray(curr)
334
- ? curr.map((item) => item.id)
335
- : [curr.id];
336
- }
337
- /**
338
- * Injects assignment of zenstack_transaction field for all nested
339
- * update/create in a Prisma update args recursively.
340
- *
341
- * @return a tuple containing all model types that are involved in
342
- * creation or updating, respectively
343
- */
344
- function injectTransactionId(model, args, operation, transactionId, service) {
345
- return __awaiter(this, void 0, void 0, function* () {
346
- const updatedModels = new Set();
347
- const createdModels = new Set();
348
- if (args.data) {
349
- args.data[constants_1.TRANSACTION_FIELD_NAME] = `${transactionId}:${operation}`;
350
- updatedModels.add(model);
351
- }
352
- const visitAction = (fieldInfo, action, fieldData) => __awaiter(this, void 0, void 0, function* () {
353
- if (fieldInfo.isDataModel && fieldData) {
354
- switch (action) {
355
- case 'update':
356
- case 'updateMany':
357
- ensureArray(fieldData).forEach((item) => {
358
- if (fieldInfo.isArray && item.data) {
359
- item.data[constants_1.TRANSACTION_FIELD_NAME] = `${transactionId}:update`;
360
- }
361
- else {
362
- item[constants_1.TRANSACTION_FIELD_NAME] = `${transactionId}:update`;
363
- }
364
- updatedModels.add(fieldInfo.type);
365
- });
366
- break;
367
- case 'upsert':
368
- ensureArray(fieldData).forEach((item) => {
369
- item.create[constants_1.TRANSACTION_FIELD_NAME] = `${transactionId}:create`;
370
- createdModels.add(fieldInfo.type);
371
- item.update[constants_1.TRANSACTION_FIELD_NAME] = `${transactionId}:update`;
372
- updatedModels.add(fieldInfo.type);
373
- });
374
- break;
375
- case 'create':
376
- case 'createMany':
377
- ensureArray(fieldData).forEach((item) => {
378
- item[constants_1.TRANSACTION_FIELD_NAME] = `${transactionId}:create`;
379
- createdModels.add(fieldInfo.type);
380
- });
381
- break;
382
- case 'connectOrCreate':
383
- ensureArray(fieldData).forEach((item) => {
384
- item.create[constants_1.TRANSACTION_FIELD_NAME] = `${transactionId}:create`;
385
- createdModels.add(fieldInfo.type);
386
- });
387
- break;
388
- }
389
- }
390
- return true;
391
- });
392
- const visitor = new nested_write_vistor_1.NestedWriteVisitor(service);
393
- yield visitor.visit(model, args.data, undefined, undefined, visitAction);
394
- return {
395
- createdModels: Array.from(createdModels),
396
- updatedModels: Array.from(updatedModels),
397
- };
398
- });
399
- }
400
- exports.injectTransactionId = injectTransactionId;
401
- /**
402
- * Preprocesses the given write args to modify field values (in place) based on
403
- * attributes like @password
404
- */
405
- function preprocessWritePayload(model, args, service) {
406
- return __awaiter(this, void 0, void 0, function* () {
407
- const visitAction = (fieldInfo, _action, fieldData, parentData) => __awaiter(this, void 0, void 0, function* () {
408
- var _a, _b, _c;
409
- // process @password field
410
- const pwdAttr = (_a = fieldInfo.attributes) === null || _a === void 0 ? void 0 : _a.find((attr) => attr.name === '@password');
411
- if (pwdAttr && fieldInfo.type === 'String') {
412
- // hash password value
413
- let salt = (_b = pwdAttr.args.find((arg) => arg.name === 'salt')) === null || _b === void 0 ? void 0 : _b.value;
414
- if (!salt) {
415
- salt = (_c = pwdAttr.args.find((arg) => arg.name === 'saltLength')) === null || _c === void 0 ? void 0 : _c.value;
416
- }
417
- if (!salt) {
418
- salt = constants_1.DEFAULT_PASSWORD_SALT_LENGTH;
419
- }
420
- parentData[fieldInfo.name] = (0, bcryptjs_1.hashSync)(fieldData, salt);
421
- }
422
- // deserialize Buffer field
423
- if (fieldInfo.type === 'Bytes' && Array.isArray(fieldData.data)) {
424
- parentData[fieldInfo.name] = Buffer.from(fieldData.data);
425
- }
426
- // deserialize BigInt field
427
- if (fieldInfo.type === 'BigInt' && typeof fieldData === 'string') {
428
- parentData[fieldInfo.name] = BigInt(fieldData);
429
- }
430
- return true;
431
- });
432
- const visitor = new nested_write_vistor_1.NestedWriteVisitor(service);
433
- yield visitor.visit(model, args.data, undefined, undefined, visitAction);
434
- });
435
- }
436
- exports.preprocessWritePayload = preprocessWritePayload;
437
- function shouldOmit(service, model, field) {
438
- return __awaiter(this, void 0, void 0, function* () {
439
- if ([constants_1.TRANSACTION_FIELD_NAME, constants_1.GUARD_FIELD_NAME].includes(field)) {
440
- return true;
441
- }
442
- const fieldInfo = yield service.resolveField(model, field);
443
- return !!(fieldInfo && fieldInfo.attributes.find((attr) => attr.name === '@omit'));
444
- });
445
- }
446
- //#endregion
447
- //# sourceMappingURL=policy-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"policy-utils.js","sourceRoot":"","sources":["../../../../src/handler/data/policy-utils.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export { default as DataHandler } from './data/handler';
@@ -1,9 +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.DataHandler = void 0;
7
- var handler_1 = require("./data/handler");
8
- Object.defineProperty(exports, "DataHandler", { enumerable: true, get: function () { return __importDefault(handler_1).default; } });
9
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/handler/index.ts"],"names":[],"mappings":";;;;;;AAAA,0CAAwD;AAA/C,uHAAA,OAAO,OAAe"}
@@ -1,28 +0,0 @@
1
- import { NextApiRequest, NextApiResponse } from 'next';
2
- import { ServerErrorCode } from '../types';
3
- /**
4
- * Defines contract for a Next.js API endpoint handler.
5
- */
6
- export interface RequestHandler {
7
- /**
8
- * Handles a request for a given route path.
9
- *
10
- * @param req The request
11
- * @param res The response
12
- * @param path The route path (with /api/zenstack prefix removed)
13
- */
14
- handle(req: NextApiRequest, res: NextApiResponse, path: string[]): Promise<void>;
15
- }
16
- /**
17
- * Error thrown during CRUD operations
18
- */
19
- export declare class CRUDError extends Error {
20
- readonly code: ServerErrorCode;
21
- constructor(code: ServerErrorCode, message?: string);
22
- toString(): string;
23
- }
24
- /**
25
- * All write actions supported by Prisma
26
- */
27
- export declare const PrismaWriteActions: readonly ["create", "createMany", "connectOrCreate", "update", "updateMany", "upsert", "delete", "deleteMany", "connect", "none"];
28
- export type PrismaWriteActionType = typeof PrismaWriteActions[number];
@@ -1,36 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PrismaWriteActions = exports.CRUDError = void 0;
4
- const types_1 = require("../types");
5
- /**
6
- * Error thrown during CRUD operations
7
- */
8
- class CRUDError extends Error {
9
- constructor(code, message) {
10
- message = message
11
- ? `${(0, types_1.getServerErrorMessage)(code)}: ${message}`
12
- : (0, types_1.getServerErrorMessage)(code);
13
- super(message);
14
- this.code = code;
15
- }
16
- toString() {
17
- return `Request handler error: ${this.code}, ${this.message}`;
18
- }
19
- }
20
- exports.CRUDError = CRUDError;
21
- /**
22
- * All write actions supported by Prisma
23
- */
24
- exports.PrismaWriteActions = [
25
- 'create',
26
- 'createMany',
27
- 'connectOrCreate',
28
- 'update',
29
- 'updateMany',
30
- 'upsert',
31
- 'delete',
32
- 'deleteMany',
33
- 'connect',
34
- 'none',
35
- ];
36
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/handler/types.ts"],"names":[],"mappings":";;;AACA,oCAAkE;AAoBlE;;GAEG;AACH,MAAa,SAAU,SAAQ,KAAK;IAChC,YAA4B,IAAqB,EAAE,OAAgB;QAC/D,OAAO,GAAG,OAAO;YACb,CAAC,CAAC,GAAG,IAAA,6BAAqB,EAAC,IAAI,CAAC,KAAK,OAAO,EAAE;YAC9C,CAAC,CAAC,IAAA,6BAAqB,EAAC,IAAI,CAAC,CAAC;QAClC,KAAK,CAAC,OAAO,CAAC,CAAC;QAJS,SAAI,GAAJ,IAAI,CAAiB;IAKjD,CAAC;IAED,QAAQ;QACJ,OAAO,0BAA0B,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;IAClE,CAAC;CACJ;AAXD,8BAWC;AAED;;GAEG;AACU,QAAA,kBAAkB,GAAG;IAC9B,QAAQ;IACR,YAAY;IACZ,iBAAiB;IACjB,QAAQ;IACR,YAAY;IACZ,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,SAAS;IACT,MAAM;CACA,CAAC"}
package/lib/index.d.ts DELETED
@@ -1,6 +0,0 @@
1
- export * from './types';
2
- export * from './config';
3
- export * from './service';
4
- export * from './request-handler';
5
- export * from './validation';
6
- export * from './policy';
package/lib/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,2CAAyB;AACzB,4CAA0B;AAC1B,oDAAkC;AAClC,+CAA6B;AAC7B,2CAAyB"}
package/lib/policy.d.ts DELETED
@@ -1,11 +0,0 @@
1
- import { AuthUser, FieldInfo, PolicyOperationKind, QueryContext } from './types';
2
- export type WithPolicyContext = {
3
- user?: AuthUser;
4
- };
5
- type PolicyFunc = (context: QueryContext) => any;
6
- export type PolicyDef = {
7
- guard: Record<string, Record<PolicyOperationKind, PolicyFunc>>;
8
- fieldMapping: Record<string, Record<string, FieldInfo>>;
9
- };
10
- export declare function withPolicy<DbClient = any>(prisma: DbClient, policy: PolicyDef, context: WithPolicyContext): DbClient;
11
- export {};
package/lib/policy.js DELETED
@@ -1,10 +0,0 @@
1
- "use strict";
2
- /* eslint-disable @typescript-eslint/no-explicit-any */
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.withPolicy = void 0;
5
- const handler_1 = require("./proxy/handler");
6
- function withPolicy(prisma, policy, context) {
7
- return new Proxy(prisma, (0, handler_1.prismaClientProxyHandler)(prisma, policy, context.user));
8
- }
9
- exports.withPolicy = withPolicy;
10
- //# sourceMappingURL=policy.js.map