@rebasepro/server-postgresql 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/common/src/collections/default-collections.d.ts +5 -8
  2. package/dist/common/src/data/query_builder.d.ts +6 -2
  3. package/dist/index.es.js +301 -500
  4. package/dist/index.es.js.map +1 -1
  5. package/dist/index.umd.js +297 -496
  6. package/dist/index.umd.js.map +1 -1
  7. package/dist/server-postgresql/src/PostgresBackendDriver.d.ts +2 -0
  8. package/dist/server-postgresql/src/auth/ensure-tables.d.ts +7 -4
  9. package/dist/server-postgresql/src/auth/services.d.ts +6 -31
  10. package/dist/server-postgresql/src/schema/auth-schema.d.ts +87 -340
  11. package/dist/server-postgresql/src/services/EntityFetchService.d.ts +2 -1
  12. package/dist/server-postgresql/src/services/EntityPersistService.d.ts +4 -0
  13. package/dist/server-postgresql/src/services/entityService.d.ts +4 -0
  14. package/dist/server-postgresql/src/utils/drizzle-conditions.d.ts +5 -1
  15. package/dist/types/src/controllers/auth.d.ts +2 -2
  16. package/dist/types/src/controllers/client.d.ts +25 -40
  17. package/dist/types/src/controllers/data.d.ts +21 -3
  18. package/dist/types/src/controllers/data_driver.d.ts +5 -0
  19. package/dist/types/src/controllers/email.d.ts +2 -0
  20. package/dist/types/src/types/auth_adapter.d.ts +3 -56
  21. package/dist/types/src/types/backend.d.ts +2 -2
  22. package/dist/types/src/types/backend_hooks.d.ts +2 -17
  23. package/dist/types/src/types/collections.d.ts +9 -5
  24. package/dist/types/src/types/entity_views.d.ts +19 -28
  25. package/dist/types/src/types/properties.d.ts +9 -7
  26. package/dist/types/src/types/user_management_delegate.d.ts +16 -53
  27. package/dist/types/src/users/index.d.ts +0 -1
  28. package/dist/types/src/users/user.d.ts +0 -1
  29. package/package.json +6 -6
  30. package/src/PostgresBackendDriver.ts +10 -0
  31. package/src/PostgresBootstrapper.ts +25 -21
  32. package/src/auth/ensure-tables.ts +82 -129
  33. package/src/auth/services.ts +71 -170
  34. package/src/schema/auth-schema.ts +13 -69
  35. package/src/schema/doctor.ts +44 -3
  36. package/src/schema/generate-drizzle-schema-logic.ts +33 -3
  37. package/src/schema/generate-drizzle-schema.ts +2 -6
  38. package/src/schema/introspect-db-logic.ts +7 -0
  39. package/src/services/EntityFetchService.ts +13 -1
  40. package/src/services/EntityPersistService.ts +9 -0
  41. package/src/services/entityService.ts +7 -0
  42. package/src/utils/drizzle-conditions.ts +40 -5
  43. package/src/websocket.ts +1 -3
  44. package/test/auth-services.test.ts +7 -150
  45. package/test/doctor.test.ts +6 -2
  46. package/test/relation-pipeline-gaps.test.ts +315 -0
  47. package/dist/server-postgresql/src/schema/default-collections.d.ts +0 -2
  48. package/dist/types/src/users/roles.d.ts +0 -14
  49. package/src/schema/default-collections.ts +0 -69
@@ -51,6 +51,7 @@ export declare class PostgresBackendDriver implements DataDriver {
51
51
  listenEntity<M extends Record<string, unknown>>({ path, entityId, collection, onUpdate, onError }: ListenEntityProps<M>): () => void;
52
52
  saveEntity<M extends Record<string, unknown>>({ path, entityId, values, collection, status }: SaveEntityProps<M>): Promise<Entity<M>>;
53
53
  deleteEntity<M extends Record<string, unknown>>({ entity, collection }: DeleteEntityProps<M>): Promise<void>;
54
+ deleteAll(path: string): Promise<void>;
54
55
  checkUniqueField(path: string, name: string, value: unknown, entityId?: string, collection?: EntityCollection): Promise<boolean>;
55
56
  countEntities<M extends Record<string, unknown>>({ path, collection, filter, searchString }: FetchCollectionProps<M>): Promise<number>;
56
57
  private getTargetDb;
@@ -103,6 +104,7 @@ export declare class AuthenticatedPostgresBackendDriver implements DataDriver {
103
104
  listenEntity<M extends Record<string, unknown>>(props: ListenEntityProps<M>): () => void;
104
105
  saveEntity<M extends Record<string, unknown>>(props: SaveEntityProps<M>): Promise<Entity<M>>;
105
106
  deleteEntity<M extends Record<string, unknown>>(props: DeleteEntityProps<M>): Promise<void>;
107
+ deleteAll(path: string): Promise<void>;
106
108
  checkUniqueField(path: string, name: string, value: unknown, entityId?: string, collection?: EntityCollection): Promise<boolean>;
107
109
  countEntities<M extends Record<string, unknown>>(props: FetchCollectionProps<M>): Promise<number>;
108
110
  }
@@ -1,7 +1,10 @@
1
1
  import { NodePgDatabase } from "drizzle-orm/node-postgres";
2
- import { PostgresCollectionRegistry } from "../collections/PostgresCollectionRegistry";
2
+ import type { EntityCollection } from "@rebasepro/types";
3
3
  /**
4
- * Auto-create auth tables if they don't exist
5
- * This runs on startup to ensure the database is ready for auth
4
+ * Auto-create auth tables if they don't exist.
5
+ *
6
+ * @param db — Drizzle database instance
7
+ * @param collection — The collection that represents auth users.
8
+ * When omitted, a default `rebase.users` table is created.
6
9
  */
7
- export declare function ensureAuthTablesExist(db: NodePgDatabase, registry?: PostgresCollectionRegistry): Promise<void>;
10
+ export declare function ensureAuthTablesExist(db: NodePgDatabase, collection?: EntityCollection): Promise<void>;
@@ -1,11 +1,9 @@
1
1
  import { NodePgDatabase } from "drizzle-orm/node-postgres";
2
2
  import { PgTable, AnyPgColumn } from "drizzle-orm/pg-core";
3
- import { UserRepository, RoleRepository, TokenRepository, MfaRepository, AuthRepository, UserData, CreateUserData, RoleData, CreateRoleData, RefreshTokenInfo, PasswordResetTokenInfo, UserIdentityData, ListUsersOptions, PaginatedUsersResult, MfaFactor, MfaChallengeInfo, RoleData as Role } from "@rebasepro/server-core";
3
+ import { UserRepository, TokenRepository, MfaRepository, AuthRepository, UserData, CreateUserData, RoleData, CreateRoleData, RefreshTokenInfo, PasswordResetTokenInfo, UserIdentityData, ListUsersOptions, PaginatedUsersResult, MfaFactor, MfaChallengeInfo, RoleData as Role } from "@rebasepro/server-core";
4
4
  export type { Role };
5
5
  export interface AuthSchemaTables {
6
6
  users: PgTable & Record<string, AnyPgColumn>;
7
- roles: PgTable & Record<string, AnyPgColumn>;
8
- userRoles: PgTable & Record<string, AnyPgColumn>;
9
7
  refreshTokens: PgTable & Record<string, AnyPgColumn>;
10
8
  passwordResetTokens: PgTable & Record<string, AnyPgColumn>;
11
9
  appConfig: PgTable & Record<string, AnyPgColumn>;
@@ -19,8 +17,6 @@ export declare class UserService implements UserRepository {
19
17
  private db;
20
18
  private usersTable;
21
19
  private userIdentitiesTable;
22
- private userRolesTable;
23
- private rolesTable;
24
20
  constructor(db: NodePgDatabase, tableOrTables?: (PgTable & Record<string, AnyPgColumn>) | Partial<AuthSchemaTables>);
25
21
  private getQualifiedUsersTableName;
26
22
  private mapRowToUser;
@@ -52,7 +48,7 @@ export declare class UserService implements UserRepository {
52
48
  */
53
49
  getUserByVerificationToken(token: string): Promise<UserData | null>;
54
50
  /**
55
- * Get roles for a user from database
51
+ * Get roles for a user from database (inline TEXT[] column)
56
52
  */
57
53
  getUserRoles(userId: string): Promise<Role[]>;
58
54
  /**
@@ -60,11 +56,11 @@ export declare class UserService implements UserRepository {
60
56
  */
61
57
  getUserRoleIds(userId: string): Promise<string[]>;
62
58
  /**
63
- * Set roles for a user
59
+ * Set roles for a user (replaces existing roles)
64
60
  */
65
61
  setUserRoles(userId: string, roleIds: string[]): Promise<void>;
66
62
  /**
67
- * Assign a specific role to new user
63
+ * Assign a specific role to new user (appends if not present)
68
64
  */
69
65
  assignDefaultRole(userId: string, roleId: string): Promise<void>;
70
66
  /**
@@ -75,24 +71,6 @@ export declare class UserService implements UserRepository {
75
71
  roles: Role[];
76
72
  } | null>;
77
73
  }
78
- /**
79
- * PostgreSQL implementation of RoleRepository.
80
- * Handles all role-related database operations using Drizzle ORM.
81
- */
82
- export declare class RoleService implements RoleRepository {
83
- private db;
84
- private rolesTable;
85
- constructor(db: NodePgDatabase, tableOrTables?: (PgTable & Record<string, AnyPgColumn>) | Partial<AuthSchemaTables>);
86
- private getQualifiedRolesTableName;
87
- getRoleById(id: string): Promise<Role | null>;
88
- listRoles(): Promise<Role[]>;
89
- createRole(data: Omit<Role, "isAdmin" | "collectionPermissions"> & {
90
- isAdmin?: boolean;
91
- collectionPermissions?: Role["collectionPermissions"];
92
- }): Promise<Role>;
93
- updateRole(id: string, data: Partial<Omit<Role, "id">>): Promise<Role | null>;
94
- deleteRole(id: string): Promise<void>;
95
- }
96
74
  export declare class RefreshTokenService {
97
75
  private db;
98
76
  private refreshTokensTable;
@@ -166,7 +144,6 @@ export declare class PostgresTokenRepository implements TokenRepository {
166
144
  export declare class PostgresAuthRepository implements AuthRepository {
167
145
  private db;
168
146
  private userService;
169
- private roleService;
170
147
  private tokenRepository;
171
148
  constructor(db: NodePgDatabase, tableOrTables?: (PgTable & Record<string, AnyPgColumn>) | Partial<AuthSchemaTables>);
172
149
  createUser(data: CreateUserData): Promise<UserData>;
@@ -193,9 +170,9 @@ export declare class PostgresAuthRepository implements AuthRepository {
193
170
  } | null>;
194
171
  getRoleById(id: string): Promise<RoleData | null>;
195
172
  listRoles(): Promise<RoleData[]>;
196
- createRole(data: CreateRoleData): Promise<RoleData>;
173
+ createRole(_data: CreateRoleData): Promise<RoleData>;
197
174
  updateRole(id: string, data: Partial<Omit<RoleData, "id">>): Promise<RoleData | null>;
198
- deleteRole(id: string): Promise<void>;
175
+ deleteRole(_id: string): Promise<void>;
199
176
  createRefreshToken(userId: string, tokenHash: string, expiresAt: Date, userAgent?: string, ipAddress?: string): Promise<void>;
200
177
  findRefreshTokenByHash(tokenHash: string): Promise<RefreshTokenInfo | null>;
201
178
  deleteRefreshToken(tokenHash: string): Promise<void>;
@@ -252,5 +229,3 @@ export declare class MfaService implements MfaRepository {
252
229
  }
253
230
  /** PostgreSQL user repository implementation */
254
231
  export type PostgresUserRepository = UserService;
255
- /** PostgreSQL role repository implementation */
256
- export type PostgresRoleRepository = RoleService;
@@ -1,8 +1,7 @@
1
1
  /**
2
2
  * Factory function to dynamically create the auth tables bound to the specified schema names.
3
3
  */
4
- export declare function createAuthSchema(rolesSchemaName?: string, usersSchemaName?: string): {
5
- rolesSchema: import("drizzle-orm/pg-core").PgSchema<string> | null;
4
+ export declare function createAuthSchema(usersSchemaName?: string): {
6
5
  usersSchema: import("drizzle-orm/pg-core").PgSchema<string> | null;
7
6
  users: import("drizzle-orm/pg-core").PgTableWithColumns<{
8
7
  name: "users";
@@ -171,6 +170,49 @@ export declare function createAuthSchema(rolesSchemaName?: string, usersSchemaNa
171
170
  identity: undefined;
172
171
  generated: undefined;
173
172
  }, {}, {}>;
173
+ roles: import("drizzle-orm/pg-core").PgColumn<{
174
+ name: "roles";
175
+ tableName: "users";
176
+ dataType: "array";
177
+ columnType: "PgArray";
178
+ data: string[];
179
+ driverParam: string | string[];
180
+ notNull: true;
181
+ hasDefault: true;
182
+ isPrimaryKey: false;
183
+ isAutoincrement: false;
184
+ hasRuntimeDefault: false;
185
+ enumValues: [string, ...string[]];
186
+ baseColumn: import("drizzle-orm").Column<{
187
+ name: "roles";
188
+ tableName: "users";
189
+ dataType: "string";
190
+ columnType: "PgText";
191
+ data: string;
192
+ driverParam: string;
193
+ notNull: false;
194
+ hasDefault: false;
195
+ isPrimaryKey: false;
196
+ isAutoincrement: false;
197
+ hasRuntimeDefault: false;
198
+ enumValues: [string, ...string[]];
199
+ baseColumn: never;
200
+ identity: undefined;
201
+ generated: undefined;
202
+ }, {}, {}>;
203
+ identity: undefined;
204
+ generated: undefined;
205
+ }, {}, {
206
+ baseBuilder: import("drizzle-orm/pg-core").PgColumnBuilder<{
207
+ name: "roles";
208
+ dataType: "string";
209
+ columnType: "PgText";
210
+ data: string;
211
+ enumValues: [string, ...string[]];
212
+ driverParam: string;
213
+ }, {}, {}, import("drizzle-orm").ColumnBuilderExtraConfig>;
214
+ size: undefined;
215
+ }>;
174
216
  metadata: import("drizzle-orm/pg-core").PgColumn<{
175
217
  name: "metadata";
176
218
  tableName: "users";
@@ -227,169 +269,6 @@ export declare function createAuthSchema(rolesSchemaName?: string, usersSchemaNa
227
269
  };
228
270
  dialect: "pg";
229
271
  }>;
230
- roles: import("drizzle-orm/pg-core").PgTableWithColumns<{
231
- name: "roles";
232
- schema: undefined;
233
- columns: {
234
- id: import("drizzle-orm/pg-core").PgColumn<{
235
- name: "id";
236
- tableName: "roles";
237
- dataType: "string";
238
- columnType: "PgVarchar";
239
- data: string;
240
- driverParam: string;
241
- notNull: true;
242
- hasDefault: false;
243
- isPrimaryKey: true;
244
- isAutoincrement: false;
245
- hasRuntimeDefault: false;
246
- enumValues: [string, ...string[]];
247
- baseColumn: never;
248
- identity: undefined;
249
- generated: undefined;
250
- }, {}, {
251
- length: 50;
252
- }>;
253
- name: import("drizzle-orm/pg-core").PgColumn<{
254
- name: "name";
255
- tableName: "roles";
256
- dataType: "string";
257
- columnType: "PgVarchar";
258
- data: string;
259
- driverParam: string;
260
- notNull: true;
261
- hasDefault: false;
262
- isPrimaryKey: false;
263
- isAutoincrement: false;
264
- hasRuntimeDefault: false;
265
- enumValues: [string, ...string[]];
266
- baseColumn: never;
267
- identity: undefined;
268
- generated: undefined;
269
- }, {}, {
270
- length: 100;
271
- }>;
272
- isAdmin: import("drizzle-orm/pg-core").PgColumn<{
273
- name: "is_admin";
274
- tableName: "roles";
275
- dataType: "boolean";
276
- columnType: "PgBoolean";
277
- data: boolean;
278
- driverParam: boolean;
279
- notNull: true;
280
- hasDefault: true;
281
- isPrimaryKey: false;
282
- isAutoincrement: false;
283
- hasRuntimeDefault: false;
284
- enumValues: undefined;
285
- baseColumn: never;
286
- identity: undefined;
287
- generated: undefined;
288
- }, {}, {}>;
289
- defaultPermissions: import("drizzle-orm/pg-core").PgColumn<{
290
- name: "default_permissions";
291
- tableName: "roles";
292
- dataType: "json";
293
- columnType: "PgJsonb";
294
- data: {
295
- read?: boolean;
296
- create?: boolean;
297
- edit?: boolean;
298
- delete?: boolean;
299
- };
300
- driverParam: unknown;
301
- notNull: false;
302
- hasDefault: false;
303
- isPrimaryKey: false;
304
- isAutoincrement: false;
305
- hasRuntimeDefault: false;
306
- enumValues: undefined;
307
- baseColumn: never;
308
- identity: undefined;
309
- generated: undefined;
310
- }, {}, {
311
- $type: {
312
- read?: boolean;
313
- create?: boolean;
314
- edit?: boolean;
315
- delete?: boolean;
316
- };
317
- }>;
318
- collectionPermissions: import("drizzle-orm/pg-core").PgColumn<{
319
- name: "collection_permissions";
320
- tableName: "roles";
321
- dataType: "json";
322
- columnType: "PgJsonb";
323
- data: Record<string, {
324
- read?: boolean;
325
- create?: boolean;
326
- edit?: boolean;
327
- delete?: boolean;
328
- }>;
329
- driverParam: unknown;
330
- notNull: false;
331
- hasDefault: false;
332
- isPrimaryKey: false;
333
- isAutoincrement: false;
334
- hasRuntimeDefault: false;
335
- enumValues: undefined;
336
- baseColumn: never;
337
- identity: undefined;
338
- generated: undefined;
339
- }, {}, {
340
- $type: Record<string, {
341
- read?: boolean;
342
- create?: boolean;
343
- edit?: boolean;
344
- delete?: boolean;
345
- }>;
346
- }>;
347
- };
348
- dialect: "pg";
349
- }>;
350
- userRoles: import("drizzle-orm/pg-core").PgTableWithColumns<{
351
- name: "user_roles";
352
- schema: undefined;
353
- columns: {
354
- userId: import("drizzle-orm/pg-core").PgColumn<{
355
- name: "user_id";
356
- tableName: "user_roles";
357
- dataType: "string";
358
- columnType: "PgUUID";
359
- data: string;
360
- driverParam: string;
361
- notNull: true;
362
- hasDefault: false;
363
- isPrimaryKey: false;
364
- isAutoincrement: false;
365
- hasRuntimeDefault: false;
366
- enumValues: undefined;
367
- baseColumn: never;
368
- identity: undefined;
369
- generated: undefined;
370
- }, {}, {}>;
371
- roleId: import("drizzle-orm/pg-core").PgColumn<{
372
- name: "role_id";
373
- tableName: "user_roles";
374
- dataType: "string";
375
- columnType: "PgVarchar";
376
- data: string;
377
- driverParam: string;
378
- notNull: true;
379
- hasDefault: false;
380
- isPrimaryKey: false;
381
- isAutoincrement: false;
382
- hasRuntimeDefault: false;
383
- enumValues: [string, ...string[]];
384
- baseColumn: never;
385
- identity: undefined;
386
- generated: undefined;
387
- }, {}, {
388
- length: 50;
389
- }>;
390
- };
391
- dialect: "pg";
392
- }>;
393
272
  refreshTokens: import("drizzle-orm/pg-core").PgTableWithColumns<{
394
273
  name: "refresh_tokens";
395
274
  schema: undefined;
@@ -1178,7 +1057,6 @@ export declare function createAuthSchema(rolesSchemaName?: string, usersSchemaNa
1178
1057
  dialect: "pg";
1179
1058
  }>;
1180
1059
  };
1181
- export declare const rebaseSchema: import("drizzle-orm/pg-core").PgSchema<string> | null;
1182
1060
  export declare const usersSchema: import("drizzle-orm/pg-core").PgSchema<string> | null;
1183
1061
  export declare const users: import("drizzle-orm/pg-core").PgTableWithColumns<{
1184
1062
  name: "users";
@@ -1347,6 +1225,49 @@ export declare const users: import("drizzle-orm/pg-core").PgTableWithColumns<{
1347
1225
  identity: undefined;
1348
1226
  generated: undefined;
1349
1227
  }, {}, {}>;
1228
+ roles: import("drizzle-orm/pg-core").PgColumn<{
1229
+ name: "roles";
1230
+ tableName: "users";
1231
+ dataType: "array";
1232
+ columnType: "PgArray";
1233
+ data: string[];
1234
+ driverParam: string | string[];
1235
+ notNull: true;
1236
+ hasDefault: true;
1237
+ isPrimaryKey: false;
1238
+ isAutoincrement: false;
1239
+ hasRuntimeDefault: false;
1240
+ enumValues: [string, ...string[]];
1241
+ baseColumn: import("drizzle-orm").Column<{
1242
+ name: "roles";
1243
+ tableName: "users";
1244
+ dataType: "string";
1245
+ columnType: "PgText";
1246
+ data: string;
1247
+ driverParam: string;
1248
+ notNull: false;
1249
+ hasDefault: false;
1250
+ isPrimaryKey: false;
1251
+ isAutoincrement: false;
1252
+ hasRuntimeDefault: false;
1253
+ enumValues: [string, ...string[]];
1254
+ baseColumn: never;
1255
+ identity: undefined;
1256
+ generated: undefined;
1257
+ }, {}, {}>;
1258
+ identity: undefined;
1259
+ generated: undefined;
1260
+ }, {}, {
1261
+ baseBuilder: import("drizzle-orm/pg-core").PgColumnBuilder<{
1262
+ name: "roles";
1263
+ dataType: "string";
1264
+ columnType: "PgText";
1265
+ data: string;
1266
+ enumValues: [string, ...string[]];
1267
+ driverParam: string;
1268
+ }, {}, {}, import("drizzle-orm").ColumnBuilderExtraConfig>;
1269
+ size: undefined;
1270
+ }>;
1350
1271
  metadata: import("drizzle-orm/pg-core").PgColumn<{
1351
1272
  name: "metadata";
1352
1273
  tableName: "users";
@@ -1403,169 +1324,6 @@ export declare const users: import("drizzle-orm/pg-core").PgTableWithColumns<{
1403
1324
  };
1404
1325
  dialect: "pg";
1405
1326
  }>;
1406
- export declare const roles: import("drizzle-orm/pg-core").PgTableWithColumns<{
1407
- name: "roles";
1408
- schema: undefined;
1409
- columns: {
1410
- id: import("drizzle-orm/pg-core").PgColumn<{
1411
- name: "id";
1412
- tableName: "roles";
1413
- dataType: "string";
1414
- columnType: "PgVarchar";
1415
- data: string;
1416
- driverParam: string;
1417
- notNull: true;
1418
- hasDefault: false;
1419
- isPrimaryKey: true;
1420
- isAutoincrement: false;
1421
- hasRuntimeDefault: false;
1422
- enumValues: [string, ...string[]];
1423
- baseColumn: never;
1424
- identity: undefined;
1425
- generated: undefined;
1426
- }, {}, {
1427
- length: 50;
1428
- }>;
1429
- name: import("drizzle-orm/pg-core").PgColumn<{
1430
- name: "name";
1431
- tableName: "roles";
1432
- dataType: "string";
1433
- columnType: "PgVarchar";
1434
- data: string;
1435
- driverParam: string;
1436
- notNull: true;
1437
- hasDefault: false;
1438
- isPrimaryKey: false;
1439
- isAutoincrement: false;
1440
- hasRuntimeDefault: false;
1441
- enumValues: [string, ...string[]];
1442
- baseColumn: never;
1443
- identity: undefined;
1444
- generated: undefined;
1445
- }, {}, {
1446
- length: 100;
1447
- }>;
1448
- isAdmin: import("drizzle-orm/pg-core").PgColumn<{
1449
- name: "is_admin";
1450
- tableName: "roles";
1451
- dataType: "boolean";
1452
- columnType: "PgBoolean";
1453
- data: boolean;
1454
- driverParam: boolean;
1455
- notNull: true;
1456
- hasDefault: true;
1457
- isPrimaryKey: false;
1458
- isAutoincrement: false;
1459
- hasRuntimeDefault: false;
1460
- enumValues: undefined;
1461
- baseColumn: never;
1462
- identity: undefined;
1463
- generated: undefined;
1464
- }, {}, {}>;
1465
- defaultPermissions: import("drizzle-orm/pg-core").PgColumn<{
1466
- name: "default_permissions";
1467
- tableName: "roles";
1468
- dataType: "json";
1469
- columnType: "PgJsonb";
1470
- data: {
1471
- read?: boolean;
1472
- create?: boolean;
1473
- edit?: boolean;
1474
- delete?: boolean;
1475
- };
1476
- driverParam: unknown;
1477
- notNull: false;
1478
- hasDefault: false;
1479
- isPrimaryKey: false;
1480
- isAutoincrement: false;
1481
- hasRuntimeDefault: false;
1482
- enumValues: undefined;
1483
- baseColumn: never;
1484
- identity: undefined;
1485
- generated: undefined;
1486
- }, {}, {
1487
- $type: {
1488
- read?: boolean;
1489
- create?: boolean;
1490
- edit?: boolean;
1491
- delete?: boolean;
1492
- };
1493
- }>;
1494
- collectionPermissions: import("drizzle-orm/pg-core").PgColumn<{
1495
- name: "collection_permissions";
1496
- tableName: "roles";
1497
- dataType: "json";
1498
- columnType: "PgJsonb";
1499
- data: Record<string, {
1500
- read?: boolean;
1501
- create?: boolean;
1502
- edit?: boolean;
1503
- delete?: boolean;
1504
- }>;
1505
- driverParam: unknown;
1506
- notNull: false;
1507
- hasDefault: false;
1508
- isPrimaryKey: false;
1509
- isAutoincrement: false;
1510
- hasRuntimeDefault: false;
1511
- enumValues: undefined;
1512
- baseColumn: never;
1513
- identity: undefined;
1514
- generated: undefined;
1515
- }, {}, {
1516
- $type: Record<string, {
1517
- read?: boolean;
1518
- create?: boolean;
1519
- edit?: boolean;
1520
- delete?: boolean;
1521
- }>;
1522
- }>;
1523
- };
1524
- dialect: "pg";
1525
- }>;
1526
- export declare const userRoles: import("drizzle-orm/pg-core").PgTableWithColumns<{
1527
- name: "user_roles";
1528
- schema: undefined;
1529
- columns: {
1530
- userId: import("drizzle-orm/pg-core").PgColumn<{
1531
- name: "user_id";
1532
- tableName: "user_roles";
1533
- dataType: "string";
1534
- columnType: "PgUUID";
1535
- data: string;
1536
- driverParam: string;
1537
- notNull: true;
1538
- hasDefault: false;
1539
- isPrimaryKey: false;
1540
- isAutoincrement: false;
1541
- hasRuntimeDefault: false;
1542
- enumValues: undefined;
1543
- baseColumn: never;
1544
- identity: undefined;
1545
- generated: undefined;
1546
- }, {}, {}>;
1547
- roleId: import("drizzle-orm/pg-core").PgColumn<{
1548
- name: "role_id";
1549
- tableName: "user_roles";
1550
- dataType: "string";
1551
- columnType: "PgVarchar";
1552
- data: string;
1553
- driverParam: string;
1554
- notNull: true;
1555
- hasDefault: false;
1556
- isPrimaryKey: false;
1557
- isAutoincrement: false;
1558
- hasRuntimeDefault: false;
1559
- enumValues: [string, ...string[]];
1560
- baseColumn: never;
1561
- identity: undefined;
1562
- generated: undefined;
1563
- }, {}, {
1564
- length: 50;
1565
- }>;
1566
- };
1567
- dialect: "pg";
1568
- }>;
1569
1327
  export declare const refreshTokens: import("drizzle-orm/pg-core").PgTableWithColumns<{
1570
1328
  name: "refresh_tokens";
1571
1329
  schema: undefined;
@@ -2354,20 +2112,12 @@ export declare const recoveryCodes: import("drizzle-orm/pg-core").PgTableWithCol
2354
2112
  dialect: "pg";
2355
2113
  }>;
2356
2114
  export declare const usersRelations: import("drizzle-orm").Relations<"users", {
2357
- userRoles: import("drizzle-orm").Many<"user_roles">;
2358
2115
  refreshTokens: import("drizzle-orm").Many<"refresh_tokens">;
2359
2116
  passwordResetTokens: import("drizzle-orm").Many<"password_reset_tokens">;
2360
2117
  userIdentities: import("drizzle-orm").Many<"user_identities">;
2361
2118
  mfaFactors: import("drizzle-orm").Many<"mfa_factors">;
2362
2119
  recoveryCodes: import("drizzle-orm").Many<"recovery_codes">;
2363
2120
  }>;
2364
- export declare const rolesRelations: import("drizzle-orm").Relations<"roles", {
2365
- userRoles: import("drizzle-orm").Many<"user_roles">;
2366
- }>;
2367
- export declare const userRolesRelations: import("drizzle-orm").Relations<"user_roles", {
2368
- user: import("drizzle-orm").One<"users", true>;
2369
- role: import("drizzle-orm").One<"roles", true>;
2370
- }>;
2371
2121
  export declare const refreshTokensRelations: import("drizzle-orm").Relations<"refresh_tokens", {
2372
2122
  user: import("drizzle-orm").One<"users", true>;
2373
2123
  }>;
@@ -2389,9 +2139,6 @@ export declare const recoveryCodesRelations: import("drizzle-orm").Relations<"re
2389
2139
  }>;
2390
2140
  export type User = typeof users.$inferSelect;
2391
2141
  export type NewUser = typeof users.$inferInsert;
2392
- export type Role = typeof roles.$inferSelect;
2393
- export type NewRole = typeof roles.$inferInsert;
2394
- export type UserRole = typeof userRoles.$inferSelect;
2395
2142
  export type RefreshToken = typeof refreshTokens.$inferSelect;
2396
2143
  export type PasswordResetToken = typeof passwordResetTokens.$inferSelect;
2397
2144
  export type AppConfig = typeof appConfig.$inferSelect;
@@ -1,6 +1,6 @@
1
1
  import { SQL } from "drizzle-orm";
2
2
  import { PgTable } from "drizzle-orm/pg-core";
3
- import { Entity, FilterValues } from "@rebasepro/types";
3
+ import { Entity, FilterValues, LogicalCondition } from "@rebasepro/types";
4
4
  import type { VectorSearchParams } from "@rebasepro/types";
5
5
  import { RelationService } from "./RelationService";
6
6
  import { DrizzleClient } from "../interfaces";
@@ -104,6 +104,7 @@ export declare class EntityFetchService {
104
104
  searchString?: string;
105
105
  databaseId?: string;
106
106
  vectorSearch?: VectorSearchParams;
107
+ logical?: LogicalCondition;
107
108
  }): Promise<Entity<M>[]>;
108
109
  /**
109
110
  * Fallback path used when db.query is unavailable.
@@ -17,6 +17,10 @@ export declare class EntityPersistService {
17
17
  * Delete an entity by ID
18
18
  */
19
19
  deleteEntity(collectionPath: string, entityId: string | number, _databaseId?: string): Promise<void>;
20
+ /**
21
+ * Delete all entities from a collection
22
+ */
23
+ deleteAll(collectionPath: string, _databaseId?: string): Promise<void>;
20
24
  /**
21
25
  * Save an entity (create or update)
22
26
  */
@@ -87,6 +87,10 @@ export declare class EntityService implements EntityRepository {
87
87
  * Delete an entity by ID
88
88
  */
89
89
  deleteEntity(collectionPath: string, entityId: string | number, databaseId?: string): Promise<void>;
90
+ /**
91
+ * Delete all entities from a collection
92
+ */
93
+ deleteAll(collectionPath: string, databaseId?: string): Promise<void>;
90
94
  /**
91
95
  * Execute raw SQL
92
96
  */
@@ -1,6 +1,6 @@
1
1
  import { SQL } from "drizzle-orm";
2
2
  import { AnyPgColumn, PgTable } from "drizzle-orm/pg-core";
3
- import { FilterValues, WhereFilterOp, Relation } from "@rebasepro/types";
3
+ import { FilterValues, WhereFilterOp, Relation, LogicalCondition, FilterCondition } from "@rebasepro/types";
4
4
  import { PostgresCollectionRegistry } from "../collections/PostgresCollectionRegistry";
5
5
  /** Drizzle dynamic query builder — accepts innerJoin + where chaining */
6
6
  export interface DrizzleDynamicQuery {
@@ -22,6 +22,10 @@ export declare class DrizzleConditionBuilder {
22
22
  * Build filter conditions from FilterValues
23
23
  */
24
24
  static buildFilterConditions<M extends Record<string, unknown>>(filter: FilterValues<Extract<keyof M, string>>, table: PgTable<any>, collectionPath: string): SQL[];
25
+ /**
26
+ * Build logical conditions recursively from LogicalCondition or FilterCondition
27
+ */
28
+ static buildLogicalConditions(cond: LogicalCondition | FilterCondition, table: PgTable<any>, collectionPath: string): SQL | null;
25
29
  /**
26
30
  * Build a single filter condition for a specific operator and value
27
31
  */