@rebasepro/server-postgresql 0.2.3 → 0.2.4

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 (50) hide show
  1. package/dist/common/src/collections/default-collections.d.ts +12 -0
  2. package/dist/common/src/collections/index.d.ts +1 -0
  3. package/dist/common/src/util/permissions.d.ts +1 -0
  4. package/dist/index.es.js +844 -160
  5. package/dist/index.es.js.map +1 -1
  6. package/dist/index.umd.js +842 -158
  7. package/dist/index.umd.js.map +1 -1
  8. package/dist/server-postgresql/src/PostgresBackendDriver.d.ts +1 -1
  9. package/dist/server-postgresql/src/PostgresBootstrapper.d.ts +1 -0
  10. package/dist/server-postgresql/src/auth/services.d.ts +43 -1
  11. package/dist/server-postgresql/src/connection.d.ts +25 -0
  12. package/dist/server-postgresql/src/schema/auth-schema.d.ts +2382 -35
  13. package/dist/server-postgresql/src/services/EntityFetchService.d.ts +4 -0
  14. package/dist/server-postgresql/src/services/entityService.d.ts +2 -0
  15. package/dist/server-postgresql/src/services/realtimeService.d.ts +20 -0
  16. package/dist/server-postgresql/src/utils/drizzle-conditions.d.ts +18 -0
  17. package/dist/types/src/controllers/auth.d.ts +2 -24
  18. package/dist/types/src/controllers/client.d.ts +0 -3
  19. package/dist/types/src/controllers/collection_registry.d.ts +1 -1
  20. package/dist/types/src/controllers/data_driver.d.ts +18 -0
  21. package/dist/types/src/controllers/registry.d.ts +5 -4
  22. package/dist/types/src/rebase_context.d.ts +1 -1
  23. package/dist/types/src/types/auth_adapter.d.ts +2 -4
  24. package/dist/types/src/types/collections.d.ts +0 -4
  25. package/dist/types/src/types/component_ref.d.ts +1 -1
  26. package/dist/types/src/types/cron.d.ts +1 -1
  27. package/dist/types/src/types/entity_views.d.ts +1 -0
  28. package/dist/types/src/types/export_import.d.ts +1 -1
  29. package/dist/types/src/types/formex.d.ts +2 -2
  30. package/dist/types/src/types/properties.d.ts +2 -2
  31. package/dist/types/src/types/translations.d.ts +28 -12
  32. package/dist/types/src/types/user_management_delegate.d.ts +6 -4
  33. package/dist/types/src/users/roles.d.ts +0 -8
  34. package/package.json +6 -6
  35. package/src/PostgresBackendDriver.ts +4 -2
  36. package/src/PostgresBootstrapper.ts +27 -8
  37. package/src/auth/ensure-tables.ts +79 -17
  38. package/src/auth/services.ts +292 -23
  39. package/src/connection.ts +77 -0
  40. package/src/data-transformer.ts +2 -2
  41. package/src/schema/auth-schema.ts +80 -14
  42. package/src/schema/generate-drizzle-schema.ts +6 -6
  43. package/src/services/EntityFetchService.ts +69 -10
  44. package/src/services/entityService.ts +2 -0
  45. package/src/services/realtimeService.ts +214 -2
  46. package/src/utils/drizzle-conditions.ts +74 -2
  47. package/src/websocket.ts +10 -2
  48. package/test/auth-services.test.ts +15 -28
  49. package/test/drizzle-conditions.test.ts +168 -0
  50. package/vite.config.ts +1 -1
@@ -45,7 +45,7 @@ export declare class PostgresBackendDriver implements DataDriver {
45
45
  */
46
46
  get restFetchService(): import("./services").EntityFetchService;
47
47
  private resolveCollectionCallbacks;
48
- fetchCollection<M extends Record<string, unknown>>({ path, collection, filter, limit, offset, startAfter, orderBy, searchString, order }: FetchCollectionProps<M>): Promise<Entity<M>[]>;
48
+ fetchCollection<M extends Record<string, unknown>>({ path, collection, filter, limit, offset, startAfter, orderBy, searchString, order, vectorSearch }: FetchCollectionProps<M>): Promise<Entity<M>[]>;
49
49
  listenCollection<M extends Record<string, unknown>>({ path, collection, filter, limit, offset, startAfter, orderBy, searchString, order, onUpdate, onError }: ListenCollectionProps<M>): () => void;
50
50
  fetchEntity<M extends Record<string, unknown>>({ path, entityId, databaseId, collection }: FetchEntityProps<M>): Promise<Entity<M> | undefined>;
51
51
  listenEntity<M extends Record<string, unknown>>({ path, entityId, collection, onUpdate, onError }: ListenEntityProps<M>): () => void;
@@ -16,6 +16,7 @@ import type { PostgresDriverConfig } from "@rebasepro/server-core";
16
16
  */
17
17
  export interface PostgresDriverInternals {
18
18
  db: NodePgDatabase<any>;
19
+ readDb?: NodePgDatabase<any>;
19
20
  registry: PostgresCollectionRegistry;
20
21
  realtimeService: RealtimeService;
21
22
  driver: PostgresBackendDriver;
@@ -1,6 +1,6 @@
1
1
  import { NodePgDatabase } from "drizzle-orm/node-postgres";
2
2
  import { PgTable, AnyPgColumn } from "drizzle-orm/pg-core";
3
- import { UserRepository, RoleRepository, TokenRepository, AuthRepository, UserData, CreateUserData, RoleData, CreateRoleData, RefreshTokenInfo, PasswordResetTokenInfo, UserIdentityData, ListUsersOptions, PaginatedUsersResult, RoleData as Role } from "@rebasepro/server-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";
4
4
  export type { Role };
5
5
  export interface AuthSchemaTables {
6
6
  users: PgTable & Record<string, AnyPgColumn>;
@@ -207,6 +207,48 @@ export declare class PostgresAuthRepository implements AuthRepository {
207
207
  markPasswordResetTokenUsed(tokenHash: string): Promise<void>;
208
208
  deleteAllPasswordResetTokensForUser(userId: string): Promise<void>;
209
209
  deleteExpiredTokens(): Promise<void>;
210
+ private _mfaService;
211
+ private getMfaService;
212
+ createMfaFactor(userId: string, factorType: "totp", secretEncrypted: string, friendlyName?: string): Promise<MfaFactor>;
213
+ getMfaFactors(userId: string): Promise<MfaFactor[]>;
214
+ getMfaFactorById(factorId: string): Promise<(MfaFactor & {
215
+ secretEncrypted: string;
216
+ }) | null>;
217
+ verifyMfaFactor(factorId: string): Promise<void>;
218
+ deleteMfaFactor(factorId: string, userId: string): Promise<void>;
219
+ createMfaChallenge(factorId: string, ipAddress?: string): Promise<MfaChallengeInfo>;
220
+ getMfaChallengeById(challengeId: string): Promise<MfaChallengeInfo | null>;
221
+ verifyMfaChallenge(challengeId: string): Promise<void>;
222
+ createRecoveryCodes(userId: string, codeHashes: string[]): Promise<void>;
223
+ useRecoveryCode(userId: string, codeHash: string): Promise<boolean>;
224
+ getUnusedRecoveryCodeCount(userId: string): Promise<number>;
225
+ deleteAllRecoveryCodes(userId: string): Promise<void>;
226
+ hasVerifiedMfaFactors(userId: string): Promise<boolean>;
227
+ }
228
+ /**
229
+ * PostgreSQL implementation of MfaRepository.
230
+ * Handles all MFA-related database operations.
231
+ */
232
+ export declare class MfaService implements MfaRepository {
233
+ private db;
234
+ private schemaName;
235
+ constructor(db: NodePgDatabase, schemaName?: string);
236
+ private qualify;
237
+ createMfaFactor(userId: string, factorType: "totp", secretEncrypted: string, friendlyName?: string): Promise<MfaFactor>;
238
+ getMfaFactors(userId: string): Promise<MfaFactor[]>;
239
+ getMfaFactorById(factorId: string): Promise<(MfaFactor & {
240
+ secretEncrypted: string;
241
+ }) | null>;
242
+ verifyMfaFactor(factorId: string): Promise<void>;
243
+ deleteMfaFactor(factorId: string, userId: string): Promise<void>;
244
+ createMfaChallenge(factorId: string, ipAddress?: string): Promise<MfaChallengeInfo>;
245
+ getMfaChallengeById(challengeId: string): Promise<MfaChallengeInfo | null>;
246
+ verifyMfaChallenge(challengeId: string): Promise<void>;
247
+ createRecoveryCodes(userId: string, codeHashes: string[]): Promise<void>;
248
+ useRecoveryCode(userId: string, codeHash: string): Promise<boolean>;
249
+ getUnusedRecoveryCodeCount(userId: string): Promise<number>;
250
+ deleteAllRecoveryCodes(userId: string): Promise<void>;
251
+ hasVerifiedMfaFactors(userId: string): Promise<boolean>;
210
252
  }
211
253
  /** PostgreSQL user repository implementation */
212
254
  export type PostgresUserRepository = UserService;
@@ -38,3 +38,28 @@ export declare function createPostgresDatabaseConnection(connectionString: strin
38
38
  pool: Pool;
39
39
  connectionString: string;
40
40
  };
41
+ /**
42
+ * Create a direct (non-pooled) connection for operations that require
43
+ * session-level features incompatible with PgBouncer transaction mode,
44
+ * such as LISTEN/NOTIFY, prepared statements, or advisory locks.
45
+ *
46
+ * Uses a smaller pool since this is only for specific use cases.
47
+ */
48
+ export declare function createDirectDatabaseConnection(connectionString: string, schema?: Record<string, unknown>, poolConfig?: PostgresPoolConfig): {
49
+ db: import("drizzle-orm/node-postgres").NodePgDatabase<Record<string, unknown>> & {
50
+ $client: Pool;
51
+ };
52
+ pool: Pool;
53
+ connectionString: string;
54
+ };
55
+ /**
56
+ * Create a read-only connection for routing read queries to replicas.
57
+ * Uses a moderate pool size since reads are distributed across replicas.
58
+ */
59
+ export declare function createReadReplicaConnection(connectionString: string, schema?: Record<string, unknown>, poolConfig?: PostgresPoolConfig): {
60
+ db: import("drizzle-orm/node-postgres").NodePgDatabase<Record<string, unknown>> & {
61
+ $client: Pool;
62
+ };
63
+ pool: Pool;
64
+ connectionString: string;
65
+ };