@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.
- package/dist/common/src/collections/default-collections.d.ts +5 -8
- package/dist/common/src/data/query_builder.d.ts +6 -2
- package/dist/index.es.js +301 -500
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +297 -496
- package/dist/index.umd.js.map +1 -1
- package/dist/server-postgresql/src/PostgresBackendDriver.d.ts +2 -0
- package/dist/server-postgresql/src/auth/ensure-tables.d.ts +7 -4
- package/dist/server-postgresql/src/auth/services.d.ts +6 -31
- package/dist/server-postgresql/src/schema/auth-schema.d.ts +87 -340
- package/dist/server-postgresql/src/services/EntityFetchService.d.ts +2 -1
- package/dist/server-postgresql/src/services/EntityPersistService.d.ts +4 -0
- package/dist/server-postgresql/src/services/entityService.d.ts +4 -0
- package/dist/server-postgresql/src/utils/drizzle-conditions.d.ts +5 -1
- package/dist/types/src/controllers/auth.d.ts +2 -2
- package/dist/types/src/controllers/client.d.ts +25 -40
- package/dist/types/src/controllers/data.d.ts +21 -3
- package/dist/types/src/controllers/data_driver.d.ts +5 -0
- package/dist/types/src/controllers/email.d.ts +2 -0
- package/dist/types/src/types/auth_adapter.d.ts +3 -56
- package/dist/types/src/types/backend.d.ts +2 -2
- package/dist/types/src/types/backend_hooks.d.ts +2 -17
- package/dist/types/src/types/collections.d.ts +9 -5
- package/dist/types/src/types/entity_views.d.ts +19 -28
- package/dist/types/src/types/properties.d.ts +9 -7
- package/dist/types/src/types/user_management_delegate.d.ts +16 -53
- package/dist/types/src/users/index.d.ts +0 -1
- package/dist/types/src/users/user.d.ts +0 -1
- package/package.json +6 -6
- package/src/PostgresBackendDriver.ts +10 -0
- package/src/PostgresBootstrapper.ts +25 -21
- package/src/auth/ensure-tables.ts +82 -129
- package/src/auth/services.ts +71 -170
- package/src/schema/auth-schema.ts +13 -69
- package/src/schema/doctor.ts +44 -3
- package/src/schema/generate-drizzle-schema-logic.ts +33 -3
- package/src/schema/generate-drizzle-schema.ts +2 -6
- package/src/schema/introspect-db-logic.ts +7 -0
- package/src/services/EntityFetchService.ts +13 -1
- package/src/services/EntityPersistService.ts +9 -0
- package/src/services/entityService.ts +7 -0
- package/src/utils/drizzle-conditions.ts +40 -5
- package/src/websocket.ts +1 -3
- package/test/auth-services.test.ts +7 -150
- package/test/doctor.test.ts +6 -2
- package/test/relation-pipeline-gaps.test.ts +315 -0
- package/dist/server-postgresql/src/schema/default-collections.d.ts +0 -2
- package/dist/types/src/users/roles.d.ts +0 -14
- 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 {
|
|
2
|
+
import type { EntityCollection } from "@rebasepro/types";
|
|
3
3
|
/**
|
|
4
|
-
* Auto-create auth tables if they don't exist
|
|
5
|
-
*
|
|
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,
|
|
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,
|
|
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(
|
|
173
|
+
createRole(_data: CreateRoleData): Promise<RoleData>;
|
|
197
174
|
updateRole(id: string, data: Partial<Omit<RoleData, "id">>): Promise<RoleData | null>;
|
|
198
|
-
deleteRole(
|
|
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(
|
|
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
|
*/
|