@cerebruminc/yates 3.5.1 → 3.5.2-beta.dangerous.0a294bd

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## [3.5.2](https://github.com/cerebruminc/yates/compare/v3.5.1...v3.5.2) (2024-04-10)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * avoid race condition when creating policies ([4d77dfb](https://github.com/cerebruminc/yates/commit/4d77dfb7c750943277b581976bf66887d1f4521f))
9
+ * update to prisma v5.11.0 ([4aa0a92](https://github.com/cerebruminc/yates/commit/4aa0a921a5df69d62e8d3e941e828b4933e7750a))
10
+
3
11
  ## [3.5.1](https://github.com/cerebruminc/yates/compare/v3.5.0...v3.5.1) (2024-03-29)
4
12
 
5
13
 
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  <h1>Yates = Prisma + RLS</h1>
7
7
 
8
8
  <p>
9
- A module for implementing role based access control with Prisma when using Postgres
9
+ A module for implementing role-based access control with Prisma when using Postgres
10
10
  </p>
11
11
  <br>
12
12
  </div>
@@ -15,17 +15,16 @@
15
15
 
16
16
  <br>
17
17
 
18
- Yates is a module for implementing role based access control with Prisma. It is designed to be used with the [Prisma Client](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client) and [PostgreSQL](https://www.postgresql.org/).
19
- It uses the [Row Level Security](https://www.postgresql.org/docs/9.5/ddl-rowsecurity.html) feature of PostgreSQL to provide a simple and secure way to implement role based access control that allows you to define complex access control rules and have them apply to all of your Prisma queries automatically.
18
+ Yates is a module for implementing role-based access control with Prisma. It is designed to be used with the [Prisma Client](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client) and [PostgreSQL](https://www.postgresql.org/). It uses PostgreSQL's [Row Level Security](https://www.postgresql.org/docs/9.5/ddl-rowsecurity.html) feature to provide a simple and secure way to implement role-based access control. This feature allows you to define complex access control rules and have them apply to all of your Prisma queries automatically.
20
19
 
21
20
  ## Prerequisites
22
21
 
23
- Yates requires the `prisma` package ate version 4.9.0 or greater and the `@prisma/client` package at version 4.0.0 or greater. Additionally it makes use of the [Prisma Client extensions](https://www.prisma.io/docs/concepts/components/prisma-client/client-extensions) preview feature to generate rules and add RLS checking, so you will need to enable this feature in your Prisma schema.
22
+ Yates requires the `prisma` package at version 4.9.0 or greater and the `@prisma/client` package at version 4.0.0 or greater. Additionally, it uses [Prisma Client extensions](https://www.prisma.io/docs/concepts/components/prisma-client/client-extensions) to generate rules and add RLS checking (which require a preview feature flag until Prisma 4.16.0, so you might need to enable this feature in your Prisma schema):
24
23
 
25
24
  ```prisma
26
25
  generator client {
27
26
  provider = "prisma-client-js"
28
- previewFeatures = ["clientExtensions"]
27
+ // previewFeatures = ["clientExtensions"] // uncomment when using Prisma before 4.16.0
29
28
  }
30
29
  ```
31
30
 
@@ -37,20 +36,24 @@ npm i @cerebruminc/yates
37
36
 
38
37
  ## Usage
39
38
 
40
- Once you've installed Yates, you can use it in your Prisma project by importing it and calling the `setup` function. This function takes a Prisma Client instance and a configuration object as arguments and returns a client that can intercept all queries and apply the appropriate row level security policies to them.
41
- Yates uses client extensions to generate the RLS rules and add the RLS checking to the Prisma Client queries. This means that you can use the Prisma Client as you normally would, and Yates will automatically apply the appropriate RLS policies to each query. It also means that you will need to apply your middleware _before_ creating the Yates client, as middleware cannot be applied to an extended client.
42
- Client extensions share the same API as the Prisma Client, you can use the Yates client as a drop-in replacement for the Prisma Client in your application.
43
- Client extensions also share the same connection pool as the base client, which means that you can freely create new Yates clients with minimal performance impact.
39
+ Once you've installed Yates, you can use it in your Prisma project by importing it and calling the `setup` function. This function takes a Prisma Client instance and a configuration object as arguments and returns a client that can intercept all queries and apply the appropriate row-level security policies to them.
40
+
41
+ Yates uses [Prisma Client Extensions](https://www.prisma.io/docs/concepts/components/prisma-client/client-extensions) to generate the RLS rules and add the RLS checking to the Prisma Client queries. This means that you can use the Prisma Client as you normally would, and Yates will automatically apply the appropriate RLS policies to each query. It also means that you will need to apply your [Prisma Client middleware](https://www.prisma.io/docs/orm/prisma-client/client-extensions/middleware) _before_ creating the Yates client, as middleware cannot be applied to an extended client.
42
+
43
+ Client extensions share the same API as the Prisma Client, you can use the Yates client as a drop-in replacement for the Prisma Client in your application. They also share the same connection pool as the base client, which means that you can freely create new Yates clients with minimal performance impact.
44
+
45
+ The `setup` function will generate CRUD abilities for each model in your Prisma schema, as well as any additional abilities that you have defined in your configuration. It will then create a new PG role for each ability and apply the appropriate row-level security policies to each role. Finally, it will create a new PG role for each user role you specify and grant them the appropriate abilities.
44
46
 
45
- The `setup` function will generate CRUD abilities for each model in your Prisma schema, as well as any additional abilities that you have defined in your configuration. It will then create a new PG role for each ability and apply the appropriate row level security policies to each role. Finally, it will create a new PG role for each user role you specify and grant them the appropriate abilities.
46
47
  For Yates to be able to set the correct user role for each request, you must pass a function called `getContext` in the `setup` configuration that will return the user role for the current request. This function will be called for each request and the user role returned will be used to set the `role` in the current session. If you want to bypass RLS completely for a specific role, you can return `null` from the `getContext` function for that role.
48
+
47
49
  For accessing the context of a Prisma query, we recommend using a package like [cls-hooked](https://www.npmjs.com/package/cls-hooked) to store the context in the current session.
48
50
 
51
+ ### Example
52
+
49
53
  ```ts
50
54
  import { setup } from "@cerebruminc/yates";
51
55
  import { PrismaClient } from "@prisma/client";
52
56
 
53
-
54
57
  const prisma = new PrismaClient();
55
58
 
56
59
  const client = await setup({
@@ -85,7 +88,7 @@ const client = await setup({
85
88
  },
86
89
  operation: "DELETE",
87
90
  },
88
- }
91
+ },
89
92
  User: {
90
93
  updateOwnUser: {
91
94
  description: "Update own user",
@@ -95,8 +98,7 @@ const client = await setup({
95
98
  },
96
99
  }
97
100
  }
98
-
99
- })
101
+ }),
100
102
  // Return a mapping of user roles and abilities.
101
103
  // This function is paramaterised with a list of all CRUD abilities that have been
102
104
  // automatically generated by Yates, as well as any customAbilities that have been defined.
@@ -117,8 +119,6 @@ const client = await setup({
117
119
  }
118
120
  const { user } = ctx;
119
121
 
120
- let role = user.role;
121
-
122
122
  const role = user.role
123
123
 
124
124
  return {
@@ -146,10 +146,8 @@ When defining an ability you need to provide the following properties:
146
146
 
147
147
  - `description`: A description of the ability.
148
148
  - `expression`: A boolean SQL expression that will be used to filter the results of the query. This expression can use any of the columns in the table that the ability is being applied to, as well as any context settings that have been defined in the `getContext` function.
149
-
150
149
  - For `INSERT`, `UPDATE` and `DELETE` operations, the expression uses the values from the row being inserted. If the expression returns `false` for a row, that row will not be inserted, updated or deleted.
151
150
  - For `SELECT` operations, the expression uses the values from the row being returned. If the expression returns `false` for a row, that row will not be returned.
152
-
153
151
  - `operation`: The operation that the ability is being applied to. This can be one of `CREATE`, `READ`, `UPDATE` or `DELETE`.
154
152
 
155
153
  ### Debug
@@ -161,11 +159,11 @@ To run Yates in debug mode, use the environment variable `DEBUG=yates`.
161
159
  ### Nested transactions
162
160
 
163
161
  Yates uses a transaction to apply the RLS policies to each query. This means that if you are using transactions in your application, rollbacks will not work as expected. This is because [Prisma has poor support for nested transactions](https://github.com/prisma/prisma/issues/15212) and will `COMMIT` the inner transaction even if the outer transaction is rolled back.
164
- If you need this functionality and you are using Yates, you can return `null` from the `getContext()` setup method to bypass the internal transaction, and therefore the RLS policies for the current request. see the `nested-transactions.spec.ts` test case for an example of how to do this.
162
+ If you need this functionality and you are using Yates, you can return `null` from the `getContext()` setup method to bypass the internal transaction, and therefore the RLS policies for the current request. See the `nested-transactions.spec.ts` test case for an example of how to do this.
165
163
 
166
164
  ### Unsupported Prisma Client query features
167
165
 
168
- If you are using the Prisma client to construct an ability expression, the following `where` keywords are not supported.
166
+ If you are using the Prisma Client to construct an ability expression, the following `where` keywords are not supported.
169
167
 
170
168
  - `AND`
171
169
  - `OR`
package/dist/index.d.ts CHANGED
@@ -1,6 +1,14 @@
1
1
  import { Prisma, PrismaClient } from "@prisma/client";
2
2
  import { Expression } from "./expressions";
3
3
  declare const VALID_OPERATIONS: readonly ["SELECT", "UPDATE", "INSERT", "DELETE"];
4
+ export interface ErrorWithBatchIndex {
5
+ batchRequestIdx?: number;
6
+ }
7
+ export declare function hasBatchIndex(value: object): value is Required<ErrorWithBatchIndex>;
8
+ export declare function waitForBatch<T extends PromiseLike<unknown>[]>(promises: T): Promise<{
9
+ [K in keyof T]: Awaited<T[K]>;
10
+ }>;
11
+ export declare function getLockCountPromise<V = void>(knock: number, cb?: () => V | void): PromiseLike<void | V>;
4
12
  type Operation = (typeof VALID_OPERATIONS)[number];
5
13
  export type Models = Prisma.ModelName;
6
14
  interface ClientOptions {
@@ -32,6 +40,7 @@ export type CustomAbilities<ContextKeys extends string = string, YModels extends
32
40
  };
33
41
  export type GetContextFn<ContextKeys extends string = string> = () => {
34
42
  role: string;
43
+ transactionId?: string;
35
44
  context?: {
36
45
  [key in ContextKeys]: string | number | string[];
37
46
  };
@@ -43,7 +52,7 @@ declare module "@prisma/client" {
43
52
  }
44
53
  export declare const createAbilityName: (model: string, ability: string) => string;
45
54
  export declare const createRoleName: (name: string) => string;
46
- export declare const createClient: (prisma: PrismaClient, getContext: GetContextFn, options?: ClientOptions) => import("@prisma/client/runtime/library").DynamicClientExtensionThis<Prisma.TypeMap<import("@prisma/client/runtime/library").Args_2 & {
55
+ export declare const createClient: (prisma: PrismaClient, getContext: GetContextFn, options?: ClientOptions) => import("@prisma/client/runtime/library").DynamicClientExtensionThis<Prisma.TypeMap<import("@prisma/client/runtime/library").InternalArgs & {
47
56
  result: {};
48
57
  model: {};
49
58
  query: {};
@@ -89,7 +98,7 @@ export interface SetupParams<ContextKeys extends string = string, YModels extend
89
98
  /**
90
99
  * Creates an extended client that sets contextual parameters and user role on every query
91
100
  **/
92
- export declare const setup: <ContextKeys extends string = string, YModels extends Prisma.ModelName = Prisma.ModelName, K extends CustomAbilities<ContextKeys, YModels> = CustomAbilities<ContextKeys, YModels>>(params: SetupParams<ContextKeys, YModels, K>) => Promise<import("@prisma/client/runtime/library").DynamicClientExtensionThis<Prisma.TypeMap<import("@prisma/client/runtime/library").Args_2 & {
101
+ export declare const setup: <ContextKeys extends string = string, YModels extends Prisma.ModelName = Prisma.ModelName, K extends CustomAbilities<ContextKeys, YModels> = CustomAbilities<ContextKeys, YModels>>(params: SetupParams<ContextKeys, YModels, K>) => Promise<import("@prisma/client/runtime/library").DynamicClientExtensionThis<Prisma.TypeMap<import("@prisma/client/runtime/library").InternalArgs & {
93
102
  result: {};
94
103
  model: {};
95
104
  query: {};
package/dist/index.js CHANGED
@@ -113,7 +113,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
113
113
  return (mod && mod.__esModule) ? mod : { "default": mod };
114
114
  };
115
115
  Object.defineProperty(exports, "__esModule", { value: true });
116
- exports.setup = exports.createRoles = exports.createClient = exports.createRoleName = exports.createAbilityName = void 0;
116
+ exports.setup = exports.createRoles = exports.createClient = exports.createRoleName = exports.createAbilityName = exports.getLockCountPromise = exports.waitForBatch = exports.hasBatchIndex = void 0;
117
117
  var crypto = __importStar(require("crypto"));
118
118
  var debug_1 = __importDefault(require("debug"));
119
119
  var difference_1 = __importDefault(require("lodash/difference"));
@@ -123,6 +123,86 @@ var toPairs_1 = __importDefault(require("lodash/toPairs"));
123
123
  var expressions_1 = require("./expressions");
124
124
  var VALID_OPERATIONS = ["SELECT", "UPDATE", "INSERT", "DELETE"];
125
125
  var debug = (0, debug_1.default)("yates");
126
+ var BatchTxIdCounter = {
127
+ id: 0,
128
+ nextId: function () {
129
+ return ++this.id;
130
+ },
131
+ };
132
+ function hasBatchIndex(value) {
133
+ // @ts-ignore
134
+ return typeof value["batchRequestIdx"] === "number";
135
+ }
136
+ exports.hasBatchIndex = hasBatchIndex;
137
+ function waitForBatch(promises) {
138
+ if (promises.length === 0) {
139
+ return Promise.resolve([]);
140
+ }
141
+ return new Promise(function (resolve, reject) {
142
+ var successfulResults = new Array(promises.length);
143
+ var bestError = null;
144
+ var done = false;
145
+ var settledPromisesCount = 0;
146
+ var settleOnePromise = function () {
147
+ if (done) {
148
+ return;
149
+ }
150
+ settledPromisesCount++;
151
+ if (settledPromisesCount === promises.length) {
152
+ done = true;
153
+ if (bestError) {
154
+ reject(bestError);
155
+ }
156
+ else {
157
+ resolve(successfulResults);
158
+ }
159
+ }
160
+ };
161
+ var immediatelyReject = function (error) {
162
+ if (!done) {
163
+ done = true;
164
+ reject(error);
165
+ }
166
+ };
167
+ var _loop_1 = function (i) {
168
+ promises[i].then(function (result) {
169
+ successfulResults[i] = result;
170
+ settleOnePromise();
171
+ }, function (error) {
172
+ if (!hasBatchIndex(error)) {
173
+ immediatelyReject(error);
174
+ return;
175
+ }
176
+ if (error.batchRequestIdx === i) {
177
+ immediatelyReject(error);
178
+ }
179
+ else {
180
+ if (!bestError) {
181
+ bestError = error;
182
+ }
183
+ settleOnePromise();
184
+ }
185
+ });
186
+ };
187
+ for (var i = 0; i < promises.length; i++) {
188
+ _loop_1(i);
189
+ }
190
+ });
191
+ }
192
+ exports.waitForBatch = waitForBatch;
193
+ function getLockCountPromise(knock, cb) {
194
+ if (cb === void 0) { cb = function () { }; }
195
+ var resolve;
196
+ var lock = new Promise(function (res) { return (resolve = res); });
197
+ return {
198
+ then: function (onFulfilled) {
199
+ if (--knock === 0)
200
+ resolve(cb());
201
+ return onFulfilled === null || onFulfilled === void 0 ? void 0 : onFulfilled(lock);
202
+ },
203
+ };
204
+ }
205
+ exports.getLockCountPromise = getLockCountPromise;
126
206
  /**
127
207
  * This function is used to take a lock that is automatically released at the end of the current transaction.
128
208
  * This is very convenient for ensuring we don't hit concurrency issues when running setup code.
@@ -185,18 +265,93 @@ var createClient = function (prisma, getContext, options) {
185
265
  if (options === void 0) { options = {}; }
186
266
  // Set default options
187
267
  var _a = options.txMaxWait, txMaxWait = _a === void 0 ? 30000 : _a, _b = options.txTimeout, txTimeout = _b === void 0 ? 30000 : _b;
268
+ // biome-ignore lint/suspicious/noExplicitAny: TODO fix this
269
+ prisma._transactionWithArray = function (_a) {
270
+ return __awaiter(this, arguments, void 0, function (_b) {
271
+ var id, lock, requests;
272
+ var _this = this;
273
+ var promises = _b.promises, options = _b.options;
274
+ return __generator(this, function (_c) {
275
+ id = BatchTxIdCounter.nextId();
276
+ lock = getLockCountPromise(promises.length);
277
+ requests = promises.map(function (request, index) {
278
+ var _a, _b, _c;
279
+ if ((request === null || request === void 0 ? void 0 : request[Symbol.toStringTag]) !== "PrismaPromise") {
280
+ throw new Error("All elements of the array need to be Prisma Client promises. Hint: Please make sure you are not awaiting the Prisma client calls you intended to pass in the $transaction function.");
281
+ }
282
+ var isolationLevel = (_a = options === null || options === void 0 ? void 0 : options.isolationLevel) !== null && _a !== void 0 ? _a : _this._engineConfig.transactionOptions.isolationLevel;
283
+ var transaction = {
284
+ kind: "batch",
285
+ id: id,
286
+ index: index,
287
+ isolationLevel: isolationLevel,
288
+ lock: lock,
289
+ yates_id: options === null || options === void 0 ? void 0 : options.new_tx_id,
290
+ };
291
+ // @ts-ignore
292
+ return (_c = (_b = request.requestTransaction) === null || _b === void 0 ? void 0 : _b.call(request, transaction)) !== null && _c !== void 0 ? _c : request;
293
+ });
294
+ return [2 /*return*/, waitForBatch(requests)];
295
+ });
296
+ });
297
+ };
298
+ // biome-ignore lint/suspicious/noExplicitAny: TODO fix this
299
+ prisma._transactionWithCallback = function (_a) {
300
+ return __awaiter(this, arguments, void 0, function (_b) {
301
+ var headers, optionsWithDefaults, info, result, transaction, e_1;
302
+ var _c, _d, _e, _f;
303
+ var callback = _b.callback, options = _b.options;
304
+ return __generator(this, function (_g) {
305
+ switch (_g.label) {
306
+ case 0:
307
+ headers = { traceparent: this._tracingHelper.getTraceParent() };
308
+ optionsWithDefaults = {
309
+ maxWait: (_c = options === null || options === void 0 ? void 0 : options.maxWait) !== null && _c !== void 0 ? _c : this._engineConfig.transactionOptions.maxWait,
310
+ timeout: (_d = options === null || options === void 0 ? void 0 : options.timeout) !== null && _d !== void 0 ? _d : this._engineConfig.transactionOptions.timeout,
311
+ isolationLevel: (_e = options === null || options === void 0 ? void 0 : options.isolationLevel) !== null && _e !== void 0 ? _e : this._engineConfig.transactionOptions.isolationLevel,
312
+ new_tx_id: (_f = options === null || options === void 0 ? void 0 : options.new_tx_id) !== null && _f !== void 0 ? _f : undefined,
313
+ };
314
+ return [4 /*yield*/, this._engine.transaction("start", headers, optionsWithDefaults)];
315
+ case 1:
316
+ info = _g.sent();
317
+ _g.label = 2;
318
+ case 2:
319
+ _g.trys.push([2, 5, , 7]);
320
+ transaction = __assign({ kind: "itx" }, info);
321
+ transaction.yates_id = optionsWithDefaults.new_tx_id;
322
+ return [4 /*yield*/, callback(this._createItxClient(transaction))];
323
+ case 3:
324
+ result = _g.sent();
325
+ // it went well, then we commit the transaction
326
+ return [4 /*yield*/, this._engine.transaction("commit", headers, info)];
327
+ case 4:
328
+ // it went well, then we commit the transaction
329
+ _g.sent();
330
+ return [3 /*break*/, 7];
331
+ case 5:
332
+ e_1 = _g.sent();
333
+ // it went bad, then we rollback the transaction
334
+ return [4 /*yield*/, this._engine.transaction("rollback", headers, info).catch(function () { })];
335
+ case 6:
336
+ // it went bad, then we rollback the transaction
337
+ _g.sent();
338
+ throw e_1; // silent rollback, throw original error
339
+ case 7: return [2 /*return*/, result];
340
+ }
341
+ });
342
+ });
343
+ };
188
344
  var client = prisma.$extends({
189
345
  name: "Yates client",
190
346
  query: {
191
347
  $allModels: {
192
348
  $allOperations: function (params) {
193
349
  return __awaiter(this, void 0, void 0, function () {
194
- var model, args, query, operation, ctx, role, context, pgRole, _a, _b, k, _c, _d, v, queryResults, e_1;
195
- var e_2, _e, e_3, _f;
196
- var _this = this;
197
- var _g;
198
- return __generator(this, function (_h) {
199
- switch (_h.label) {
350
+ var model, args, query, operation, ctx, role, context, pgRole, _a, _b, k, _c, _d, v, txId, txInitiatedInTick, results_1, results, e_2;
351
+ var e_3, _e, e_4, _f;
352
+ var _g, _h;
353
+ return __generator(this, function (_j) {
354
+ switch (_j.label) {
200
355
  case 0:
201
356
  model = params.model, args = params.args, query = params.query, operation = params.operation;
202
357
  if (!model) {
@@ -226,105 +381,87 @@ var createClient = function (prisma, getContext, options) {
226
381
  }
227
382
  if (Array.isArray(context[k])) {
228
383
  try {
229
- for (_c = (e_3 = void 0, __values(context[k])), _d = _c.next(); !_d.done; _d = _c.next()) {
384
+ for (_c = (e_4 = void 0, __values(context[k])), _d = _c.next(); !_d.done; _d = _c.next()) {
230
385
  v = _d.value;
231
386
  if (typeof v !== "string") {
232
387
  throw new Error("Context variable \"".concat(k, "\" must be an array of strings. Got ").concat(typeof v));
233
388
  }
234
389
  }
235
390
  }
236
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
391
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
237
392
  finally {
238
393
  try {
239
394
  if (_d && !_d.done && (_f = _c.return)) _f.call(_c);
240
395
  }
241
- finally { if (e_3) throw e_3.error; }
396
+ finally { if (e_4) throw e_4.error; }
242
397
  }
243
398
  // Cast to a JSON string so that it can be used in RLS expressions
244
399
  context[k] = JSON.stringify(context[k]);
245
400
  }
246
401
  }
247
402
  }
248
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
403
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
249
404
  finally {
250
405
  try {
251
406
  if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
252
407
  }
253
- finally { if (e_2) throw e_2.error; }
408
+ finally { if (e_3) throw e_3.error; }
254
409
  }
255
410
  }
256
- _h.label = 1;
411
+ _j.label = 1;
257
412
  case 1:
258
- _h.trys.push([1, 3, , 4]);
259
- return [4 /*yield*/, prisma.$transaction(function (tx) { return __awaiter(_this, void 0, void 0, function () {
260
- var _a, _b, _c, key, value, e_4_1, txId, __internalParams, result;
261
- var e_4, _d;
262
- return __generator(this, function (_e) {
263
- switch (_e.label) {
264
- case 0:
265
- // Switch to the user role, We can't use a prepared statement here, due to limitations in PG not allowing prepared statements to be used in SET ROLE
266
- return [4 /*yield*/, tx.$queryRawUnsafe("SET ROLE ".concat(pgRole))];
267
- case 1:
268
- // Switch to the user role, We can't use a prepared statement here, due to limitations in PG not allowing prepared statements to be used in SET ROLE
269
- _e.sent();
270
- _e.label = 2;
271
- case 2:
272
- _e.trys.push([2, 7, 8, 9]);
273
- _a = __values((0, toPairs_1.default)(context)), _b = _a.next();
274
- _e.label = 3;
275
- case 3:
276
- if (!!_b.done) return [3 /*break*/, 6];
277
- _c = __read(_b.value, 2), key = _c[0], value = _c[1];
278
- return [4 /*yield*/, tx.$queryRaw(templateObject_2 || (templateObject_2 = __makeTemplateObject(["SELECT set_config(", ", ", ", true);"], ["SELECT set_config(", ", ", ", true);"])), key, value.toString())];
279
- case 4:
280
- _e.sent();
281
- _e.label = 5;
282
- case 5:
283
- _b = _a.next();
284
- return [3 /*break*/, 3];
285
- case 6: return [3 /*break*/, 9];
286
- case 7:
287
- e_4_1 = _e.sent();
288
- e_4 = { error: e_4_1 };
289
- return [3 /*break*/, 9];
290
- case 8:
291
- try {
292
- if (_b && !_b.done && (_d = _a.return)) _d.call(_a);
293
- }
294
- finally { if (e_4) throw e_4.error; }
295
- return [7 /*endfinally*/];
296
- case 9:
297
- txId = tx[Symbol.for("prisma.client.transaction.id")];
298
- __internalParams = params.__internalParams;
299
- return [4 /*yield*/, prisma._executeRequest(__assign(__assign({}, __internalParams), { transaction: {
300
- kind: "itx",
301
- id: txId,
302
- } }))];
303
- case 10:
304
- result = _e.sent();
305
- // Switch role back to admin user
306
- return [4 /*yield*/, tx.$queryRawUnsafe("SET ROLE none")];
307
- case 11:
308
- // Switch role back to admin user
309
- _e.sent();
310
- return [2 /*return*/, result];
311
- }
312
- });
313
- }); }, {
413
+ _j.trys.push([1, 5, , 6]);
414
+ txId = (_g = ctx.transactionId) !== null && _g !== void 0 ? _g : hashWithPrefix("yates_tx_", JSON.stringify(ctx));
415
+ // @ts-ignore
416
+ if (!globalThis.txIdSet) {
417
+ // @ts-ignore
418
+ globalThis.txIdSet = new Set();
419
+ }
420
+ txInitiatedInTick = false;
421
+ // @ts-ignore
422
+ if (globalThis.txIdSet.has(txId)) {
423
+ txInitiatedInTick = true;
424
+ }
425
+ else {
426
+ // @ts-ignore
427
+ globalThis.txIdSet.add(txId);
428
+ }
429
+ if (!txInitiatedInTick) return [3 /*break*/, 3];
430
+ return [4 /*yield*/, prisma.$transaction([query(args)], {
314
431
  maxWait: txMaxWait,
315
432
  timeout: txTimeout,
433
+ new_tx_id: txId,
316
434
  })];
317
435
  case 2:
318
- queryResults = _h.sent();
319
- return [2 /*return*/, queryResults];
320
- case 3:
321
- e_1 = _h.sent();
436
+ results_1 = _j.sent();
437
+ return [2 /*return*/, results_1.pop()];
438
+ case 3: return [4 /*yield*/, prisma.$transaction(__spreadArray(__spreadArray([
439
+ // Switch to the user role, We can't use a prepared statement here, due to limitations in PG not allowing prepared statements to be used in SET ROLE
440
+ prisma.$queryRawUnsafe("SET ROLE ".concat(pgRole))
441
+ ], __read((0, toPairs_1.default)(context).map(function (_a) {
442
+ var _b = __read(_a, 2), key = _b[0], value = _b[1];
443
+ return prisma.$queryRaw(templateObject_2 || (templateObject_2 = __makeTemplateObject(["SELECT set_config(", ", ", ", true);"], ["SELECT set_config(", ", ", ", true);"])), key, value.toString());
444
+ })), false), [
445
+ // Inconveniently, the `query` function will not run inside an interactive transaction.
446
+ // We need to manually reconstruct the query, and attached the "secret" transaction ID.
447
+ // This ensures that the query will run inside the transaction AND that middlewares will not be re-applied
448
+ query(args),
449
+ ], false), {
450
+ maxWait: txMaxWait,
451
+ timeout: txTimeout,
452
+ new_tx_id: txId,
453
+ })];
454
+ case 4:
455
+ results = _j.sent();
456
+ return [2 /*return*/, results.pop()];
457
+ case 5:
458
+ e_2 = _j.sent();
322
459
  // Normalize RLS errors to make them a bit more readable.
323
- if ((_g = e_1.message) === null || _g === void 0 ? void 0 : _g.includes("new row violates row-level security policy for table")) {
460
+ if ((_h = e_2.message) === null || _h === void 0 ? void 0 : _h.includes("new row violates row-level security policy for table")) {
324
461
  throw new Error("You do not have permission to perform this action: ".concat(model, ".").concat(operation, "(...)"));
325
462
  }
326
- throw e_1;
327
- case 4: return [2 /*return*/];
463
+ throw e_2;
464
+ case 6: return [2 /*return*/];
328
465
  }
329
466
  });
330
467
  });
@@ -335,8 +472,8 @@ var createClient = function (prisma, getContext, options) {
335
472
  return client;
336
473
  };
337
474
  exports.createClient = createClient;
338
- var setRLS = function (prisma, existingAbilities, table, roleName, slug, ability) { return __awaiter(void 0, void 0, void 0, function () {
339
- var operation, rawExpression, description, policyName, existingAbility, shouldUpdateAbilityTable, expression, expression;
475
+ var setRLS = function (prisma, table, roleName, slug, ability) { return __awaiter(void 0, void 0, void 0, function () {
476
+ var operation, rawExpression, description;
340
477
  return __generator(this, function (_a) {
341
478
  switch (_a.label) {
342
479
  case 0:
@@ -344,70 +481,85 @@ var setRLS = function (prisma, existingAbilities, table, roleName, slug, ability
344
481
  if (!rawExpression) {
345
482
  throw new Error("Expression must be defined for RLS abilities");
346
483
  }
347
- policyName = roleName;
348
- existingAbility = existingAbilities.find(function (row) {
349
- return row.ability_model === table && row.ability_policy_name === policyName;
350
- });
351
- shouldUpdateAbilityTable = false;
352
- if (!!existingAbility) return [3 /*break*/, 6];
353
- debug("Creating RLS policy for", roleName, "on", table, "for", operation);
354
- return [4 /*yield*/, (0, expressions_1.expressionToSQL)(rawExpression, table)];
484
+ // Take a lock and run the RLS setup in a transaction to prevent conflicts
485
+ // in a multi-server environment
486
+ return [4 /*yield*/, prisma.$transaction(function (tx) { return __awaiter(void 0, void 0, void 0, function () {
487
+ var policyName, existingAbilities, existingAbility, shouldUpdateAbilityTable, expression, expression;
488
+ return __generator(this, function (_a) {
489
+ switch (_a.label) {
490
+ case 0: return [4 /*yield*/, takeLock(tx)];
491
+ case 1:
492
+ _a.sent();
493
+ policyName = roleName;
494
+ return [4 /*yield*/, tx.$queryRaw(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n\t\t\tselect * from _yates._yates_abilities where ability_model = ", " and ability_policy_name = ", "\n\t\t"], ["\n\t\t\tselect * from _yates._yates_abilities where ability_model = ", " and ability_policy_name = ", "\n\t\t"])), table, policyName)];
495
+ case 2:
496
+ existingAbilities = _a.sent();
497
+ existingAbility = existingAbilities[0];
498
+ shouldUpdateAbilityTable = false;
499
+ if (!!existingAbility) return [3 /*break*/, 8];
500
+ debug("Creating RLS policy for", roleName, "on", table, "for", operation);
501
+ return [4 /*yield*/, (0, expressions_1.expressionToSQL)(rawExpression, table)];
502
+ case 3:
503
+ expression = _a.sent();
504
+ if (!(operation === "INSERT")) return [3 /*break*/, 5];
505
+ return [4 /*yield*/, tx.$queryRawUnsafe("\n\t\t\t\tCREATE POLICY ".concat(policyName, " ON \"public\".\"").concat(table, "\" FOR ").concat(operation, " TO ").concat(roleName, " WITH CHECK (").concat(expression, ");\n\t\t\t"))];
506
+ case 4:
507
+ _a.sent();
508
+ return [3 /*break*/, 7];
509
+ case 5: return [4 /*yield*/, tx.$queryRawUnsafe("\n\t\t\t\tCREATE POLICY ".concat(policyName, " ON \"public\".\"").concat(table, "\" FOR ").concat(operation, " TO ").concat(roleName, " USING (").concat(expression, ");\n\t\t\t"))];
510
+ case 6:
511
+ _a.sent();
512
+ _a.label = 7;
513
+ case 7:
514
+ shouldUpdateAbilityTable = true;
515
+ return [3 /*break*/, 14];
516
+ case 8:
517
+ if (!(existingAbility.ability_expression !== rawExpression.toString())) return [3 /*break*/, 14];
518
+ debug("Updating RLS policy for", roleName, "on", table, "for", operation);
519
+ return [4 /*yield*/, (0, expressions_1.expressionToSQL)(rawExpression, table)];
520
+ case 9:
521
+ expression = _a.sent();
522
+ if (!(operation === "INSERT")) return [3 /*break*/, 11];
523
+ return [4 /*yield*/, tx.$queryRawUnsafe("\n\t\t\t\tALTER POLICY ".concat(policyName, " ON \"public\".\"").concat(table, "\" TO ").concat(roleName, " WITH CHECK (").concat(expression, ");\n\t\t\t"))];
524
+ case 10:
525
+ _a.sent();
526
+ return [3 /*break*/, 13];
527
+ case 11: return [4 /*yield*/, tx.$queryRawUnsafe("\n\t\t\t\tALTER POLICY ".concat(policyName, " ON \"public\".\"").concat(table, "\" TO ").concat(roleName, " USING (").concat(expression, ");\n\t\t\t"))];
528
+ case 12:
529
+ _a.sent();
530
+ _a.label = 13;
531
+ case 13:
532
+ shouldUpdateAbilityTable = true;
533
+ _a.label = 14;
534
+ case 14:
535
+ if (!shouldUpdateAbilityTable) return [3 /*break*/, 16];
536
+ return [4 /*yield*/, upsertAbility(tx, {
537
+ ability_model: table,
538
+ ability_name: slug,
539
+ ability_policy_name: policyName,
540
+ ability_description: description !== null && description !== void 0 ? description : "",
541
+ ability_operation: operation,
542
+ // We store the string representation of the expression so that
543
+ // we can compare it later without having to recompute the SQL
544
+ ability_expression: rawExpression.toString(),
545
+ })];
546
+ case 15:
547
+ _a.sent();
548
+ _a.label = 16;
549
+ case 16: return [2 /*return*/];
550
+ }
551
+ });
552
+ }); })];
355
553
  case 1:
356
- expression = _a.sent();
357
- if (!(operation === "INSERT")) return [3 /*break*/, 3];
358
- return [4 /*yield*/, prisma.$queryRawUnsafe("\n\t\t\t\tCREATE POLICY ".concat(policyName, " ON \"public\".\"").concat(table, "\" FOR ").concat(operation, " TO ").concat(roleName, " WITH CHECK (").concat(expression, ");\n\t\t\t"))];
359
- case 2:
360
- _a.sent();
361
- return [3 /*break*/, 5];
362
- case 3: return [4 /*yield*/, prisma.$queryRawUnsafe("\n\t\t\t\tCREATE POLICY ".concat(policyName, " ON \"public\".\"").concat(table, "\" FOR ").concat(operation, " TO ").concat(roleName, " USING (").concat(expression, ");\n\t\t\t"))];
363
- case 4:
364
- _a.sent();
365
- _a.label = 5;
366
- case 5:
367
- shouldUpdateAbilityTable = true;
368
- return [3 /*break*/, 12];
369
- case 6:
370
- if (!(existingAbility.ability_expression !== rawExpression.toString())) return [3 /*break*/, 12];
371
- debug("Updating RLS policy for", roleName, "on", table, "for", operation);
372
- return [4 /*yield*/, (0, expressions_1.expressionToSQL)(rawExpression, table)];
373
- case 7:
374
- expression = _a.sent();
375
- if (!(operation === "INSERT")) return [3 /*break*/, 9];
376
- return [4 /*yield*/, prisma.$queryRawUnsafe("\n\t\t\t\tALTER POLICY ".concat(policyName, " ON \"public\".\"").concat(table, "\" TO ").concat(roleName, " WITH CHECK (").concat(expression, ");\n\t\t\t"))];
377
- case 8:
378
- _a.sent();
379
- return [3 /*break*/, 11];
380
- case 9: return [4 /*yield*/, prisma.$queryRawUnsafe("\n\t\t\t\tALTER POLICY ".concat(policyName, " ON \"public\".\"").concat(table, "\" TO ").concat(roleName, " USING (").concat(expression, ");\n\t\t\t"))];
381
- case 10:
382
- _a.sent();
383
- _a.label = 11;
384
- case 11:
385
- shouldUpdateAbilityTable = true;
386
- _a.label = 12;
387
- case 12:
388
- if (!shouldUpdateAbilityTable) return [3 /*break*/, 14];
389
- return [4 /*yield*/, prisma.$transaction([
390
- takeLock(prisma),
391
- upsertAbility(prisma, {
392
- ability_model: table,
393
- ability_name: slug,
394
- ability_policy_name: policyName,
395
- ability_description: description !== null && description !== void 0 ? description : "",
396
- ability_operation: operation,
397
- // We store the string representation of the expression so that
398
- // we can compare it later without having to recompute the SQL
399
- ability_expression: rawExpression.toString(),
400
- }),
401
- ])];
402
- case 13:
554
+ // Take a lock and run the RLS setup in a transaction to prevent conflicts
555
+ // in a multi-server environment
403
556
  _a.sent();
404
- _a.label = 14;
405
- case 14: return [2 /*return*/];
557
+ return [2 /*return*/];
406
558
  }
407
559
  });
408
560
  }); };
409
561
  var createRoles = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
410
- var abilities, runtimeDataModel, models, diff, models_1, models_1_1, model, ability, operation, roles, pgRoles, existingAbilities, pgPolicies, migratedAbilities, _c, _d, _e, _i, model, table, _loop_1, _f, _g, _h, _j, slug, _loop_2, _k, _l, _m, _o, key;
562
+ var abilities, runtimeDataModel, models, diff, models_1, models_1_1, model, ability, operation, roles, pgRoles, existingAbilities, pgPolicies, migratedAbilities, _c, _d, _e, _i, model, table, _loop_2, _f, _g, _h, _j, slug, _loop_3, _k, _l, _m, _o, key;
411
563
  var e_5, _p;
412
564
  var _q;
413
565
  var prisma = _b.prisma, customAbilities = _b.customAbilities, getRoles = _b.getRoles;
@@ -537,7 +689,7 @@ var createRoles = function (_a) { return __awaiter(void 0, [_a], void 0, functio
537
689
  ])];
538
690
  case 8:
539
691
  _r.sent();
540
- _loop_1 = function (slug) {
692
+ _loop_2 = function (slug) {
541
693
  var ability, roleName;
542
694
  return __generator(this, function (_s) {
543
695
  switch (_s.label) {
@@ -562,7 +714,7 @@ var createRoles = function (_a) { return __awaiter(void 0, [_a], void 0, functio
562
714
  _s.label = 3;
563
715
  case 3:
564
716
  if (!ability.expression) return [3 /*break*/, 5];
565
- return [4 /*yield*/, setRLS(prisma, existingAbilities, table, roleName, slug,
717
+ return [4 /*yield*/, setRLS(prisma, table, roleName, slug,
566
718
  // biome-ignore lint/suspicious/noExplicitAny: TODO fix this
567
719
  ability)];
568
720
  case 4:
@@ -583,7 +735,7 @@ var createRoles = function (_a) { return __awaiter(void 0, [_a], void 0, functio
583
735
  _h = _g[_j];
584
736
  if (!(_h in _f)) return [3 /*break*/, 11];
585
737
  slug = _h;
586
- return [5 /*yield**/, _loop_1(slug)];
738
+ return [5 /*yield**/, _loop_2(slug)];
587
739
  case 10:
588
740
  _r.sent();
589
741
  _r.label = 11;
@@ -594,7 +746,7 @@ var createRoles = function (_a) { return __awaiter(void 0, [_a], void 0, functio
594
746
  _i++;
595
747
  return [3 /*break*/, 7];
596
748
  case 13:
597
- _loop_2 = function (key) {
749
+ _loop_3 = function (key) {
598
750
  var role, wildCardAbilities, roleAbilities, rlsRoles, userRoles, oldRoles, policies;
599
751
  return __generator(this, function (_t) {
600
752
  switch (_t.label) {
@@ -680,7 +832,7 @@ var createRoles = function (_a) { return __awaiter(void 0, [_a], void 0, functio
680
832
  _m = _l[_o];
681
833
  if (!(_m in _k)) return [3 /*break*/, 16];
682
834
  key = _m;
683
- return [5 /*yield**/, _loop_2(key)];
835
+ return [5 /*yield**/, _loop_3(key)];
684
836
  case 15:
685
837
  _r.sent();
686
838
  _r.label = 16;
@@ -716,5 +868,5 @@ var setup = function (params) { return __awaiter(void 0, void 0, void 0, functio
716
868
  });
717
869
  }); };
718
870
  exports.setup = setup;
719
- var templateObject_1, templateObject_2;
871
+ var templateObject_1, templateObject_2, templateObject_3;
720
872
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAiC;AAEjC,gDAA2B;AAC3B,iEAA2C;AAC3C,2DAAqC;AACrC,mDAA6B;AAC7B,2DAAqC;AACrC,6CAA8E;AAE9E,IAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAE3E,IAAM,KAAK,GAAG,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC;AA+E9B;;;GAGG;AACH,IAAM,QAAQ,GAAG,UAAC,MAAoB;IACrC,OAAA,MAAM,CAAC,iBAAiB,CACvB,oDAAoD,CACpD;AAFD,CAEC,CAAC;AAEH;;;;;;;;;GASG;AACH,IAAM,iBAAiB,GAAG,UAAC,MAAoB;IAC9C,OAAO,MAAM,CAAC,YAAY,CAAC;QAC1B,QAAQ,CAAC,MAAM,CAAC;QAChB,MAAM,CAAC,iBAAiB,CAAC,iDAExB,CAAC;QACF,MAAM,CAAC,iBAAiB,CAAC,4aAYzB,CAAC;KACD,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,IAAM,aAAa,GAAG,UACrB,MAAoB,EACpB,OAAiE;IAGhE,IAAA,aAAa,GAMV,OAAO,cANG,EACb,YAAY,GAKT,OAAO,aALE,EACZ,mBAAmB,GAIhB,OAAO,oBAJS,EACnB,mBAAmB,GAGhB,OAAO,oBAHS,EACnB,iBAAiB,GAEd,OAAO,kBAFO,EACjB,kBAAkB,GACf,OAAO,mBADQ,CACP;IACZ,OAAO,MAAM,CAAC,SAAS,okBAAA,wKAEZ,EAAa,IAAK,EAAY,IAAK,EAAmB,IAAK,EAAmB,IAAK,EAAiB,IAAK,EAAkB,yTAGrI,KAHU,aAAa,EAAK,YAAY,EAAK,mBAAmB,EAAK,mBAAmB,EAAK,iBAAiB,EAAK,kBAAkB,EAGpI;AACH,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,IAAM,cAAc,GAAG,UAAC,MAAc,EAAE,WAAmB;IAC1D,IAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACzB,IAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAM,SAAS,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;IACrC,OAAO,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF,kGAAkG;AAClG,IAAM,YAAY,GAAG,UAAC,IAAY;IACjC,OAAA,IAAI;SACF,WAAW,EAAE;SACb,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;SACjB,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;AAH7B,CAG6B,CAAC;AAExB,IAAM,iBAAiB,GAAG,UAAC,KAAa,EAAE,OAAe;IAC/D,OAAO,YAAY,CAAC,cAAc,CAAC,gBAAgB,EAAE,UAAG,KAAK,cAAI,OAAO,CAAE,CAAC,CAAC,CAAC;AAC9E,CAAC,CAAC;AAFW,QAAA,iBAAiB,qBAE5B;AAEK,IAAM,cAAc,GAAG,UAAC,IAAY;IAC1C,OAAO,YAAY,CAAC,cAAc,CAAC,aAAa,EAAE,UAAG,IAAI,CAAE,CAAC,CAAC,CAAC;AAC/D,CAAC,CAAC;AAFW,QAAA,cAAc,kBAEzB;AAEF,0GAA0G;AACnG,IAAM,YAAY,GAAG,UAC3B,MAAoB,EACpB,UAAwB,EACxB,OAA2B;IAA3B,wBAAA,EAAA,YAA2B;IAE3B,sBAAsB;IACd,IAAA,KAAyC,OAAO,UAA/B,EAAjB,SAAS,mBAAG,KAAK,KAAA,EAAE,KAAsB,OAAO,UAAZ,EAAjB,SAAS,mBAAG,KAAK,KAAA,CAAa;IACzD,IAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC9B,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE;YACN,UAAU,EAAE;gBACL,cAAc,YAAC,MAAM;;;;;;;;;oCAClB,KAAK,GAA6B,MAAM,MAAnC,EAAE,IAAI,GAAuB,MAAM,KAA7B,EAAE,KAAK,GAAgB,MAAM,MAAtB,EAAE,SAAS,GAAK,MAAM,UAAX,CAAY;oCACjD,IAAI,CAAC,KAAK,EAAE,CAAC;wCACZ,kDAAkD;wCAClD,2EAA2E;wCAC3E,wDAAwD;wCACxD,sBAAQ,KAAa,CAAC,IAAI,CAAC,EAAC;oCAC7B,CAAC;oCAEK,GAAG,GAAG,UAAU,EAAE,CAAC;oCAEzB,uDAAuD;oCACvD,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;wCAClB,sBAAO,KAAK,CAAC,IAAI,CAAC,EAAC;oCACpB,CAAC;oCAEO,IAAI,GAAc,GAAG,KAAjB,EAAE,OAAO,GAAK,GAAG,QAAR,CAAS;oCAExB,MAAM,GAAG,IAAA,sBAAc,EAAC,IAAI,CAAC,CAAC;oCAEpC,IAAI,OAAO,EAAE,CAAC;;4CACb,KAAgB,KAAA,SAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA,4CAAE,CAAC;gDAA5B,CAAC;gDACX,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;oDAC7B,MAAM,IAAI,KAAK,CACd,6BAAqB,CAAC,6HAAyH,CAC/I,CAAC;gDACH,CAAC;gDACD,IACC,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ;oDAC9B,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ;oDAC9B,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EACzB,CAAC;oDACF,MAAM,IAAI,KAAK,CACd,6BAAqB,CAAC,uDAA4C,OAAO,OAAO,CAC/E,CAAC,CACD,CAAE,CACH,CAAC;gDACH,CAAC;gDACD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;;wDAC/B,KAAgB,oBAAA,SAAA,OAAO,CAAC,CAAC,CAAc,CAAA,CAAA,4CAAE,CAAC;4DAA/B,CAAC;4DACX,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;gEAC3B,MAAM,IAAI,KAAK,CACd,6BAAqB,CAAC,iDAAsC,OAAO,CAAC,CAAE,CACtE,CAAC;4DACH,CAAC;wDACF,CAAC;;;;;;;;;oDACD,kEAAkE;oDAClE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gDACzC,CAAC;4CACF,CAAC;;;;;;;;;oCACF,CAAC;;;;oCAOqB,qBAAM,MAAM,CAAC,YAAY,CAC7C,UAAO,EAAE;;;;;;oDACR,oJAAoJ;oDACpJ,qBAAM,EAAE,CAAC,eAAe,CAAC,mBAAY,MAAM,CAAE,CAAC,EAAA;;wDAD9C,oJAAoJ;wDACpJ,SAA8C,CAAC;;;;wDAEpB,KAAA,SAAA,IAAA,iBAAO,EAAC,OAAO,CAAC,CAAA;;;;wDAAhC,KAAA,mBAAY,EAAX,GAAG,QAAA,EAAE,KAAK,QAAA;wDACrB,qBAAM,EAAE,CAAC,SAAS,0GAAA,oBAAqB,EAAG,IAAK,EAAgB,WAAW,KAAnC,GAAG,EAAK,KAAK,CAAC,QAAQ,EAAE,GAAW;;wDAA1E,SAA0E,CAAC;;;;;;;;;;;;;;;;;wDAStE,IAAI,GAAI,EAAU,CACvB,MAAM,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAC1C,CAAC;wDAII,gBAAgB,GAAI,MAAc,CAAC,gBAAgB,CAAC;wDAC3C,qBAAM,MAAM,CAAC,eAAe,uBACvC,gBAAgB,KACnB,WAAW,EAAE;oEACZ,IAAI,EAAE,KAAK;oEACX,EAAE,EAAE,IAAI;iEACR,IACA,EAAA;;wDANI,MAAM,GAAG,SAMb;wDACF,iCAAiC;wDACjC,qBAAM,EAAE,CAAC,eAAe,CAAC,eAAe,CAAC,EAAA;;wDADzC,iCAAiC;wDACjC,SAAyC,CAAC;wDAE1C,sBAAO,MAAM,EAAC;;;6CACd,EACD;4CACC,OAAO,EAAE,SAAS;4CAClB,OAAO,EAAE,SAAS;yCAClB,CACD,EAAA;;oCAtCK,YAAY,GAAG,SAsCpB;oCAED,sBAAO,YAAY,EAAC;;;oCAEpB,yDAAyD;oCACzD,IACC,MAAA,GAAC,CAAC,OAAO,0CAAE,QAAQ,CAClB,sDAAsD,CACtD,EACA,CAAC;wCACF,MAAM,IAAI,KAAK,CACd,6DAAsD,KAAK,cAAI,SAAS,UAAO,CAC/E,CAAC;oCACH,CAAC;oCAED,MAAM,GAAC,CAAC;;;;;iBAET;aACD;SACD;KACD,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AAjIW,QAAA,YAAY,gBAiIvB;AAEF,IAAM,MAAM,GAAG,UACd,MAAoB,EACpB,iBAAmC,EACnC,KAAa,EACb,QAAgB,EAChB,IAAY,EACZ,OAAqC;;;;;gBAE7B,SAAS,GAA6C,OAAO,UAApD,EAAc,aAAa,GAAkB,OAAO,WAAzB,EAAE,WAAW,GAAK,OAAO,YAAZ,CAAa;gBACtE,IAAI,CAAC,aAAa,EAAE,CAAC;oBACpB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;gBACjE,CAAC;gBAGK,UAAU,GAAG,QAAQ,CAAC;gBACtB,eAAe,GAAG,iBAAiB,CAAC,IAAI,CAC7C,UAAC,GAAG;oBACH,OAAA,GAAG,CAAC,aAAa,KAAK,KAAK,IAAI,GAAG,CAAC,mBAAmB,KAAK,UAAU;gBAArE,CAAqE,CACtE,CAAC;gBAEE,wBAAwB,GAAG,KAAK,CAAC;qBAGjC,CAAC,eAAe,EAAhB,wBAAgB;gBACnB,KAAK,CAAC,yBAAyB,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;gBACvD,qBAAM,IAAA,6BAAe,EAAC,aAAa,EAAE,KAAK,CAAC,EAAA;;gBAAxD,UAAU,GAAG,SAA2C;qBAG1D,CAAA,SAAS,KAAK,QAAQ,CAAA,EAAtB,wBAAsB;gBACzB,qBAAM,MAAM,CAAC,eAAe,CAAC,kCACZ,UAAU,8BAAiB,KAAK,oBAAS,SAAS,iBAAO,QAAQ,0BAAgB,UAAU,eAC3G,CAAC,EAAA;;gBAFF,SAEE,CAAC;;oBAEH,qBAAM,MAAM,CAAC,eAAe,CAAC,kCACZ,UAAU,8BAAiB,KAAK,oBAAS,SAAS,iBAAO,QAAQ,qBAAW,UAAU,eACtG,CAAC,EAAA;;gBAFF,SAEE,CAAC;;;gBAEJ,wBAAwB,GAAG,IAAI,CAAC;;;qBACtB,CAAA,eAAe,CAAC,kBAAkB,KAAK,aAAa,CAAC,QAAQ,EAAE,CAAA,EAA/D,yBAA+D;gBACzE,KAAK,CAAC,yBAAyB,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;gBACvD,qBAAM,IAAA,6BAAe,EAAC,aAAa,EAAE,KAAK,CAAC,EAAA;;gBAAxD,UAAU,GAAG,SAA2C;qBAC1D,CAAA,SAAS,KAAK,QAAQ,CAAA,EAAtB,wBAAsB;gBACzB,qBAAM,MAAM,CAAC,eAAe,CAAC,iCACb,UAAU,8BAAiB,KAAK,mBAAQ,QAAQ,0BAAgB,UAAU,eACzF,CAAC,EAAA;;gBAFF,SAEE,CAAC;;oBAEH,qBAAM,MAAM,CAAC,eAAe,CAAC,iCACb,UAAU,8BAAiB,KAAK,mBAAQ,QAAQ,qBAAW,UAAU,eACpF,CAAC,EAAA;;gBAFF,SAEE,CAAC;;;gBAEJ,wBAAwB,GAAG,IAAI,CAAC;;;qBAG7B,wBAAwB,EAAxB,yBAAwB;gBAC3B,qBAAM,MAAM,CAAC,YAAY,CAAC;wBACzB,QAAQ,CAAC,MAAM,CAAC;wBAChB,aAAa,CAAC,MAAM,EAAE;4BACrB,aAAa,EAAE,KAAK;4BACpB,YAAY,EAAE,IAAI;4BAClB,mBAAmB,EAAE,UAAU;4BAC/B,mBAAmB,EAAE,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,EAAE;4BACtC,iBAAiB,EAAE,SAAS;4BAC5B,+DAA+D;4BAC/D,8DAA8D;4BAC9D,kBAAkB,EAAE,aAAa,CAAC,QAAQ,EAAE;yBAC5C,CAAC;qBACF,CAAC,EAAA;;gBAZF,SAYE,CAAC;;;;;KAEJ,CAAC;AAEK,IAAM,WAAW,GAAG,iEAKzB,EAUD;;;;QATA,MAAM,YAAA,EACN,eAAe,qBAAA,EACf,QAAQ,cAAA;;;;gBAQF,SAAS,GAA8B,EAAE,CAAC;gBAO1C,gBAAgB,GAAI,MAAc;qBACtC,iBAAqC,CAAC;gBAClC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,CACtD,UAAC,CAAC,IAAK,OAAA,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,EAAtC,CAAsC,CACjC,CAAC;gBACd,IAAI,eAAe,EAAE,CAAC;oBACf,IAAI,GAAG,IAAA,oBAAU,EAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC;oBAC9D,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;wBACjB,MAAM,IAAI,KAAK,CAAC,8CAAuC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,CAAC,CAAC;oBAC3E,CAAC;gBACF,CAAC;;oBACD,KAAoB,WAAA,SAAA,MAAM,CAAA,gFAAE,CAAC;wBAAlB,KAAK;wBACf,SAAS,CAAC,KAAK,CAAC,GAAG;4BAClB,MAAM,EAAE;gCACP,WAAW,EAAE,iBAAU,KAAK,CAAE;gCAC9B,UAAU,EAAE,MAAM;gCAClB,SAAS,EAAE,QAAQ;gCACnB,4DAA4D;gCAC5D,KAAK,EAAE,KAAY;gCACnB,IAAI,EAAE,QAAQ;6BACd;4BACD,IAAI,EAAE;gCACL,WAAW,EAAE,eAAQ,KAAK,CAAE;gCAC5B,UAAU,EAAE,MAAM;gCAClB,SAAS,EAAE,QAAQ;gCACnB,4DAA4D;gCAC5D,KAAK,EAAE,KAAY;gCACnB,IAAI,EAAE,MAAM;6BACZ;4BACD,MAAM,EAAE;gCACP,WAAW,EAAE,iBAAU,KAAK,CAAE;gCAC9B,UAAU,EAAE,MAAM;gCAClB,SAAS,EAAE,QAAQ;gCACnB,4DAA4D;gCAC5D,KAAK,EAAE,KAAY;gCACnB,IAAI,EAAE,QAAQ;6BACd;4BACD,MAAM,EAAE;gCACP,WAAW,EAAE,iBAAU,KAAK,CAAE;gCAC9B,UAAU,EAAE,MAAM;gCAClB,SAAS,EAAE,QAAQ;gCACnB,4DAA4D;gCAC5D,KAAK,EAAE,KAAY;gCACnB,IAAI,EAAE,QAAQ;6BACd;yBACD,CAAC;wBACF,IAAI,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAG,KAAK,CAAC,EAAE,CAAC;4BAC9B,KAAW,OAAO,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;gCACxC,SAAS;gCACd,4DAA4D;gCAC5D,MAAA,eAAe,CAAC,KAAK,CAAE,CAAC,OAAyB,CAAC,0CAAE,SAAS,CAAC;gCAC/D,IAAI,CAAC,SAAS;oCAAE,SAAS;gCACzB,4DAA4D;gCAC5D,SAAS,CAAC,KAAK,CAAE,CAAC,OAAyB,CAAC,yBAExC,eAAe,CAAC,KAAK,CAAE,CAAC,OAAO,CAAC,KACnC,SAAS,WAAA;oCACT,4DAA4D;oCAC5D,KAAK,EAAE,KAAY,EACnB,IAAI,EAAE,OAAO,GACb,CAAC;4BACH,CAAC;wBACF,CAAC;oBACF,CAAC;;;;;;;;;gBAED,KAAK,CAAC,0BAA0B,CAAC,CAAC;gBAClC,qBAAM,iBAAiB,CAAC,MAAM,CAAC,EAAA;;gBAA/B,SAA+B,CAAC;gBAE1B,KAAK,GAAG,QAAQ,CAAC,SAAc,CAAC,CAAC;gBAEb,qBAAM,MAAM,CAAC,eAAe,CAAC,yEAEtD,CAAC,EAAA;;gBAFI,OAAO,GAAa,SAExB;gBAC0C,qBAAM,MAAM,CAAC,eAAe,CAAC,kDAExE,CAAC,EAAA;;gBAFI,iBAAiB,GAAqB,SAE1C;qBAIE,CAAA,iBAAiB,CAAC,MAAM,KAAK,CAAC,CAAA,EAA9B,wBAA8B;gBACjC,KAAK,CAAC,iEAAiE,CAAC,CAAC;gBAC1C,qBAAM,MAAM,CAAC,eAAe,CAAC,mFAE3D,CAAC,EAAA;;gBAFI,UAAU,GAAe,SAE7B;qBAEE,UAAU,CAAC,MAAM,EAAjB,wBAAiB;gBACd,iBAAiB,GAAG,UAAU,CAAC,GAAG,CAAC,UAAC,MAAM;;oBAAK,OAAA,CAAC;wBACrD,aAAa,EAAE,MAAM,CAAC,SAAS;wBAC/B,YAAY,EAAE,MAAM,CAAC,UAAU;wBAC/B,mBAAmB,EAAE,MAAM,CAAC,UAAU;wBACtC,mBAAmB,EAAE,EAAE;wBACvB,iBAAiB,EAAE,MAAM,CAAC,GAAG;wBAC7B,kBAAkB,EAAE,MAAA,MAAA,MAAM,CAAC,IAAI,mCAAI,MAAM,CAAC,UAAU,mCAAI,EAAE;qBAC1D,CAAC,CAAA;iBAAA,CAAC,CAAC;gBAEJ,qBAAM,MAAM,CAAC,YAAY;wBACxB,QAAQ,CAAC,MAAM,CAAC;8BACb,iBAAiB,CAAC,GAAG,CAAC,UAAC,EAAE,IAAK,OAAA,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,EAAzB,CAAyB,CAAC,UAC1D,EAAA;;gBAHF,SAGE,CAAC;gBAEH,iBAAiB,CAAC,IAAI,OAAtB,iBAAiB,2BAAU,iBAAsC,WAAE;;;qBAMjD,SAAS;;;;;;;;;;;gBACtB,KAAK,GAAG,KAAK,CAAC;gBAEpB,qBAAM,MAAM,CAAC,YAAY,CAAC;wBACzB,QAAQ,CAAC,MAAM,CAAC;wBAChB,MAAM,CAAC,eAAe,CACrB,wBAAgB,KAAK,kCAA8B,CACnD;qBACD,CAAC,EAAA;;gBALF,SAKE,CAAC;oCAEQ,IAAI;;;;;gCACR,OAAO;gCACZ,4DAA4D;gCAC5D,SAAS,CAAC,KAA+B,CAAE,CAAC,IAAsB,CAAC,CAAC;gCAErE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;oCACnD,MAAM,IAAI,KAAK,CAAC,6BAAsB,OAAO,CAAC,SAAS,CAAE,CAAC,CAAC;gCAC5D,CAAC;gCAEK,QAAQ,GAAG,IAAA,yBAAiB,EAAC,KAAK,EAAE,IAAI,CAAC,CAAC;qCAI/C,OAAO,CAAC,IAAI,CAAC,UAAC,IAAyB,IAAK,OAAA,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAzB,CAAyB,CAAC,EAAtE,wBAAsE;gCAEtE,KAAK,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAC;;oCAEvC,qBAAM,MAAM,CAAC,YAAY,CAAC;oCACzB,QAAQ,CAAC,MAAM,CAAC;oCAChB,MAAM,CAAC,eAAe,CAAC,qIAI6C,QAAQ,+CAC7D,QAAQ,6EAKvB,CAAC;oCACD,MAAM,CAAC,eAAe,CAAC,4BACf,OAAO,CAAC,SAAS,mBAAQ,KAAK,mBAAQ,QAAQ,gBACtD,CAAC;iCACD,CAAC,EAAA;;gCAhBF,SAgBE,CAAC;;;qCAGA,OAAO,CAAC,UAAU,EAAlB,wBAAkB;gCACrB,qBAAM,MAAM,CACX,MAAM,EACN,iBAAiB,EACjB,KAAK,EACL,QAAQ,EACR,IAAI;oCACJ,4DAA4D;oCAC5D,OAAc,CACd,EAAA;;gCARD,SAQC,CAAC;;;;;;qBA7Ce,SAAS,CAAC,KAA+B,CAAC;;;;;;;;;;;8CAAlD,IAAI;;;;;;;;;;;oCAqDL,GAAG;;;;;gCACP,IAAI,GAAG,IAAA,sBAAc,EAAC,GAAG,CAAC,CAAC;gCACjC,qBAAM,MAAM,CAAC,iBAAiB,CAAC,qHAIsC,IAAI,2CACzD,IAAI,yDAKnB,CAAC,EAAA;;gCAVF,SAUE,CAAC;gCAEG,iBAAiB,GAAG,IAAA,iBAAO,EAAC,SAAS,EAAE,UAAC,KAAK,EAAE,SAAS;oCAC7D,OAAO,IAAA,aAAG,EAAC,KAAK,EAAE,UAAC,OAAO,EAAE,IAAI;wCAC/B,OAAO,IAAA,yBAAiB,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC;oCAC3C,CAAC,CAAC,CAAC;gCACJ,CAAC,CAAC,CAAC;gCACG,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gCAC3B,QAAQ,GACb,aAAa,KAAK,GAAG;oCACpB,CAAC,CAAC,iBAAiB;oCACnB,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,UAAC,OAAO;wCAC1B,4DAA4D;wCAC5D,OAAA,IAAA,yBAAiB,EAAC,OAAO,CAAC,KAAM,EAAE,OAAO,CAAC,IAAK,CAAC;oCAAhD,CAAgD,CAC/C,CAAC;gCAEN,4IAA4I;gCAC5I,+JAA+J;gCAC/J,qBAAM,MAAM,CAAC,YAAY,CAAC;wCACzB,QAAQ,CAAC,MAAM,CAAC;wCAChB,MAAM,CAAC,iBAAiB,CACvB,sDAA+C,IAAI,MAAG,CACtD;wCACD,MAAM,CAAC,iBAAiB,CAAC,mEACyB,IAAI,cACrD,CAAC;wCACF,MAAM,CAAC,iBAAiB,CAAC,kDACQ,IAAI,cACpC,CAAC;wCACF,MAAM,CAAC,eAAe,CAAC,gBAAS,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAO,IAAI,CAAE,CAAC;qCACjE,CAAC,EAAA;;gCAdF,4IAA4I;gCAC5I,+JAA+J;gCAC/J,SAYE,CAAC;gCAIF,qBAAM,MAAM,CAAC,eAAe,CAAC,6FAEgB,IAAI,0OAMkC,IAAI,aACvF,CAAC,EAAA;;gCAVI,SAAS,GACd,SASC;gCAEI,QAAQ,GAAG,SAAS;qCACxB,MAAM,CAAC,UAAC,EAAY;wCAAV,QAAQ,cAAA;oCAAO,OAAA,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;gCAA5B,CAA4B,CAAC;qCACtD,GAAG,CAAC,UAAC,EAAY;wCAAV,QAAQ,cAAA;oCAAO,OAAA,QAAQ;gCAAR,CAAQ,CAAC,CAAC;qCAE9B,QAAQ,CAAC,MAAM,EAAf,wBAAe;gCAClB,0CAA0C;gCAC1C,KAAK,CAAC,oBAAoB,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gCACjD,qBAAM,MAAM,CAAC,iBAAiB,CAC7B,iBAAU,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAS,IAAI,CAAE,CAC5C,EAAA;;gCAFD,SAEC,CAAC;gCACe,qBAAM,MAAM,CAAC,eAAe,CAC5C,oEAA6D,QAAQ;yCACnE,GAAG,CAAC,UAAC,EAAE,IAAK,OAAA,WAAI,EAAE,MAAG,EAAT,CAAS,CAAC;yCACtB,IAAI,CAAC,IAAI,CAAC,MAAG,CACf,EAAA;;gCAJK,QAAQ,GAAG,SAIhB;gCACD,qBAAM,MAAM,CAAC,YAAY;wCACxB,QAAQ,CAAC,MAAM,CAAC;8CACb,QAAQ,CAAC,GAAG,CAAC,UAAC,SAAS;wCACzB,OAAA,MAAM,CAAC,iBAAiB,CACvB,sBAAe,SAAS,CAAC,UAAU,mBAAQ,SAAS,CAAC,SAAS,OAAG,CACjE;oCAFD,CAEC,CACD,UACA,EAAA;;gCAPF,SAOE,CAAC;gCAEH,KAAK,CAAC,qCAAqC,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gCAClE,qBAAM,MAAM,CAAC,iBAAiB,CAC7B,4EAAqE,QAAQ;yCAC3E,GAAG,CAAC,UAAC,EAAE,IAAK,OAAA,WAAI,EAAE,MAAG,EAAT,CAAS,CAAC;yCACtB,IAAI,CAAC,IAAI,CAAC,MAAG,CACf,EAAA;;gCAJD,SAIC,CAAC;;;;;;qBAtFc,KAAK;;;;;;;;;;;8CAAZ,GAAG;;;;;;;;;;KAyFd,CAAC;AAzRW,QAAA,WAAW,eAyRtB;AAmCF;;IAEI;AACG,IAAM,KAAK,GAAG,UAQpB,MAA4C;;;;;gBAEtC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;gBAExB,MAAM,GAA4C,MAAM,OAAlD,EAAE,eAAe,GAA2B,MAAM,gBAAjC,EAAE,QAAQ,GAAiB,MAAM,SAAvB,EAAE,UAAU,GAAK,MAAM,WAAX,CAAY;gBACjE,qBAAM,IAAA,mBAAW,EAA0B;wBAC1C,MAAM,QAAA;wBACN,eAAe,iBAAA;wBACf,QAAQ,UAAA;qBACR,CAAC,EAAA;;gBAJF,SAIE,CAAC;gBACG,MAAM,GAAG,IAAA,oBAAY,EAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEhE,KAAK,CAAC,oBAAoB,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC;gBAE7D,sBAAO,MAAM,EAAC;;;KACd,CAAC;AAvBW,QAAA,KAAK,SAuBhB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,51 +1,51 @@
1
1
  {
2
- "name": "@cerebruminc/yates",
3
- "version": "3.5.1",
4
- "description": "Role based access control for Prisma Apps",
5
- "main": "dist/index.js",
6
- "files": [
7
- "CHANGELOG.md",
8
- "dist",
9
- "images"
10
- ],
11
- "scripts": {
12
- "generate": "prisma generate",
13
- "build": "rimraf dist && tsc -p tsconfig.build.json",
14
- "test": "npm run lint",
15
- "lint": "biome check .",
16
- "lint:fix": "biome check . --apply",
17
- "test:types": "tsc --noEmit",
18
- "test:integration": "jest --runInBand test/integration",
19
- "test:compose:integration": "docker compose -f docker-compose.yml --profile with-sut up db sut --exit-code-from sut",
20
- "setup": "prisma generate && prisma migrate dev",
21
- "prepublishOnly": "npm run build"
22
- },
23
- "author": "Cerebrum <hello@cerebrum.com> (https://cerebrum.com)",
24
- "license": "MIT",
25
- "devDependencies": {
26
- "@biomejs/biome": "1.5.3",
27
- "@prisma/client": "^5.0.0",
28
- "@types/cls-hooked": "^4.3.3",
29
- "@types/jest": "^29.2.6",
30
- "@types/lodash": "^4.14.191",
31
- "@types/uuid": "^9.0.0",
32
- "cls-hooked": "^4.2.2",
33
- "jest": "^29.3.1",
34
- "prisma": "^5.0.0",
35
- "rimraf": "^5.0.5",
36
- "ts-jest": "^29.0.5",
37
- "typescript": "^5.3.3",
38
- "uuid": "^9.0.0"
39
- },
40
- "dependencies": {
41
- "@types/debug": "^4.1.12",
42
- "debug": "^4.3.4",
43
- "lodash": "^4.17.21",
44
- "node-sql-parser": "^4.12.0",
45
- "type-fest": "^4.10.3"
46
- },
47
- "peerDependencies": {
48
- "@prisma/client": "^5.0.0",
49
- "prisma": "^5.0.0"
50
- }
2
+ "name": "@cerebruminc/yates",
3
+ "version": "3.5.2-beta.dangerous.0a294bd",
4
+ "description": "Role based access control for Prisma Apps",
5
+ "main": "dist/index.js",
6
+ "files": [
7
+ "CHANGELOG.md",
8
+ "dist",
9
+ "images"
10
+ ],
11
+ "scripts": {
12
+ "generate": "prisma generate",
13
+ "build": "rimraf dist && tsc -p tsconfig.build.json",
14
+ "test": "npm run lint",
15
+ "lint": "biome check .",
16
+ "lint:fix": "biome check . --apply",
17
+ "test:types": "tsc --noEmit",
18
+ "test:integration": "jest --runInBand test/integration",
19
+ "test:compose:integration": "docker compose -f docker-compose.yml --profile with-sut up db sut --exit-code-from sut",
20
+ "setup": "prisma generate && prisma migrate dev",
21
+ "prepublishOnly": "npm run build"
22
+ },
23
+ "author": "Cerebrum <hello@cerebrum.com> (https://cerebrum.com)",
24
+ "license": "MIT",
25
+ "devDependencies": {
26
+ "@biomejs/biome": "1.5.3",
27
+ "@prisma/client": "^5.11.0",
28
+ "@types/cls-hooked": "^4.3.3",
29
+ "@types/jest": "^29.2.6",
30
+ "@types/lodash": "^4.14.191",
31
+ "@types/uuid": "^9.0.0",
32
+ "cls-hooked": "^4.2.2",
33
+ "jest": "^29.3.1",
34
+ "prisma": "^5.0.0",
35
+ "rimraf": "^5.0.5",
36
+ "ts-jest": "^29.0.5",
37
+ "typescript": "^5.3.3",
38
+ "uuid": "^9.0.0"
39
+ },
40
+ "dependencies": {
41
+ "@types/debug": "^4.1.12",
42
+ "debug": "^4.3.4",
43
+ "lodash": "^4.17.21",
44
+ "node-sql-parser": "^4.12.0",
45
+ "type-fest": "^4.10.3"
46
+ },
47
+ "peerDependencies": {
48
+ "@prisma/client": "^5.11.0",
49
+ "prisma": "^5.11.0"
50
+ }
51
51
  }