@rebasepro/server-postgresql 0.4.0 → 0.6.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 (168) hide show
  1. package/README.md +69 -89
  2. package/dist/{server-postgresql/src/PostgresAdapter.d.ts → PostgresAdapter.d.ts} +1 -1
  3. package/dist/{server-postgresql/src/PostgresBackendDriver.d.ts → PostgresBackendDriver.d.ts} +2 -2
  4. package/dist/{server-postgresql/src/PostgresBootstrapper.d.ts → PostgresBootstrapper.d.ts} +11 -1
  5. package/dist/{server-postgresql/src/auth → auth}/services.d.ts +11 -11
  6. package/dist/{server-postgresql/src/collections → collections}/PostgresCollectionRegistry.d.ts +4 -0
  7. package/dist/{server-postgresql/src/data-transformer.d.ts → data-transformer.d.ts} +0 -3
  8. package/dist/{server-postgresql/src/databasePoolManager.d.ts → databasePoolManager.d.ts} +1 -1
  9. package/dist/index.es.js +10174 -11184
  10. package/dist/index.es.js.map +1 -1
  11. package/dist/index.umd.js +10735 -11462
  12. package/dist/index.umd.js.map +1 -1
  13. package/dist/{server-postgresql/src/services → services}/EntityPersistService.d.ts +0 -14
  14. package/dist/types.d.ts +3 -0
  15. package/dist/utils/pg-error-utils.d.ts +55 -0
  16. package/dist/{server-postgresql/src/websocket.d.ts → websocket.d.ts} +8 -3
  17. package/package.json +24 -21
  18. package/src/PostgresAdapter.ts +9 -10
  19. package/src/PostgresBackendDriver.ts +135 -122
  20. package/src/PostgresBootstrapper.ts +90 -16
  21. package/src/auth/ensure-tables.ts +28 -5
  22. package/src/auth/services.ts +56 -45
  23. package/src/cli.ts +140 -110
  24. package/src/collections/PostgresCollectionRegistry.ts +7 -0
  25. package/src/connection.ts +11 -6
  26. package/src/data-transformer.ts +73 -109
  27. package/src/databasePoolManager.ts +5 -3
  28. package/src/history/HistoryService.ts +3 -2
  29. package/src/history/ensure-history-table.ts +5 -4
  30. package/src/schema/auth-schema.ts +1 -2
  31. package/src/schema/doctor-cli.ts +2 -1
  32. package/src/schema/doctor.ts +40 -37
  33. package/src/schema/generate-drizzle-schema-logic.ts +56 -18
  34. package/src/schema/generate-drizzle-schema.ts +11 -11
  35. package/src/schema/introspect-db-inference.ts +25 -25
  36. package/src/schema/introspect-db-logic.ts +38 -38
  37. package/src/schema/introspect-db.ts +28 -27
  38. package/src/services/BranchService.ts +14 -0
  39. package/src/services/EntityFetchService.ts +28 -25
  40. package/src/services/EntityPersistService.ts +11 -124
  41. package/src/services/RelationService.ts +57 -37
  42. package/src/services/entity-helpers.ts +6 -2
  43. package/src/services/realtimeService.ts +45 -32
  44. package/src/types.ts +4 -0
  45. package/src/utils/drizzle-conditions.ts +31 -15
  46. package/src/utils/pg-error-utils.ts +211 -0
  47. package/src/websocket.ts +51 -33
  48. package/test/auth-services.test.ts +36 -19
  49. package/test/batch-many-to-many-regression.test.ts +119 -39
  50. package/test/data-transformer-hardening.test.ts +67 -33
  51. package/test/data-transformer.test.ts +4 -2
  52. package/test/doctor.test.ts +10 -5
  53. package/test/drizzle-conditions.test.ts +59 -6
  54. package/test/generate-drizzle-schema.test.ts +65 -40
  55. package/test/introspect-db-generation.test.ts +179 -81
  56. package/test/introspect-db-utils.test.ts +92 -37
  57. package/test/mocks/chalk.cjs +7 -0
  58. package/test/pg-error-utils.test.ts +221 -0
  59. package/test/postgresDataDriver.test.ts +14 -5
  60. package/test/property-ordering.test.ts +126 -79
  61. package/test/realtimeService.test.ts +6 -2
  62. package/test/relation-pipeline-gaps.test.ts +84 -36
  63. package/test/relations.test.ts +247 -0
  64. package/test/unmapped-tables-safety.test.ts +14 -6
  65. package/test/websocket.test.ts +1 -1
  66. package/tsconfig.json +5 -0
  67. package/tsconfig.prod.json +3 -0
  68. package/vite.config.ts +5 -5
  69. package/dist/common/src/collections/CollectionRegistry.d.ts +0 -56
  70. package/dist/common/src/collections/default-collections.d.ts +0 -9
  71. package/dist/common/src/collections/index.d.ts +0 -2
  72. package/dist/common/src/data/buildRebaseData.d.ts +0 -14
  73. package/dist/common/src/data/query_builder.d.ts +0 -55
  74. package/dist/common/src/index.d.ts +0 -4
  75. package/dist/common/src/util/builders.d.ts +0 -57
  76. package/dist/common/src/util/callbacks.d.ts +0 -6
  77. package/dist/common/src/util/collections.d.ts +0 -11
  78. package/dist/common/src/util/common.d.ts +0 -2
  79. package/dist/common/src/util/conditions.d.ts +0 -26
  80. package/dist/common/src/util/entities.d.ts +0 -58
  81. package/dist/common/src/util/enums.d.ts +0 -3
  82. package/dist/common/src/util/index.d.ts +0 -16
  83. package/dist/common/src/util/navigation_from_path.d.ts +0 -34
  84. package/dist/common/src/util/navigation_utils.d.ts +0 -20
  85. package/dist/common/src/util/parent_references_from_path.d.ts +0 -6
  86. package/dist/common/src/util/paths.d.ts +0 -14
  87. package/dist/common/src/util/permissions.d.ts +0 -6
  88. package/dist/common/src/util/references.d.ts +0 -2
  89. package/dist/common/src/util/relations.d.ts +0 -22
  90. package/dist/common/src/util/resolutions.d.ts +0 -72
  91. package/dist/common/src/util/storage.d.ts +0 -24
  92. package/dist/types/src/controllers/analytics_controller.d.ts +0 -7
  93. package/dist/types/src/controllers/auth.d.ts +0 -104
  94. package/dist/types/src/controllers/client.d.ts +0 -168
  95. package/dist/types/src/controllers/collection_registry.d.ts +0 -46
  96. package/dist/types/src/controllers/customization_controller.d.ts +0 -60
  97. package/dist/types/src/controllers/data.d.ts +0 -207
  98. package/dist/types/src/controllers/data_driver.d.ts +0 -218
  99. package/dist/types/src/controllers/database_admin.d.ts +0 -11
  100. package/dist/types/src/controllers/dialogs_controller.d.ts +0 -36
  101. package/dist/types/src/controllers/effective_role.d.ts +0 -4
  102. package/dist/types/src/controllers/email.d.ts +0 -36
  103. package/dist/types/src/controllers/index.d.ts +0 -18
  104. package/dist/types/src/controllers/local_config_persistence.d.ts +0 -20
  105. package/dist/types/src/controllers/navigation.d.ts +0 -225
  106. package/dist/types/src/controllers/registry.d.ts +0 -63
  107. package/dist/types/src/controllers/side_dialogs_controller.d.ts +0 -67
  108. package/dist/types/src/controllers/side_entity_controller.d.ts +0 -97
  109. package/dist/types/src/controllers/snackbar.d.ts +0 -24
  110. package/dist/types/src/controllers/storage.d.ts +0 -171
  111. package/dist/types/src/index.d.ts +0 -4
  112. package/dist/types/src/rebase_context.d.ts +0 -122
  113. package/dist/types/src/types/auth_adapter.d.ts +0 -301
  114. package/dist/types/src/types/backend.d.ts +0 -536
  115. package/dist/types/src/types/backend_hooks.d.ts +0 -172
  116. package/dist/types/src/types/builders.d.ts +0 -15
  117. package/dist/types/src/types/chips.d.ts +0 -5
  118. package/dist/types/src/types/collections.d.ts +0 -941
  119. package/dist/types/src/types/component_ref.d.ts +0 -47
  120. package/dist/types/src/types/cron.d.ts +0 -102
  121. package/dist/types/src/types/data_source.d.ts +0 -64
  122. package/dist/types/src/types/database_adapter.d.ts +0 -94
  123. package/dist/types/src/types/entities.d.ts +0 -145
  124. package/dist/types/src/types/entity_actions.d.ts +0 -104
  125. package/dist/types/src/types/entity_callbacks.d.ts +0 -173
  126. package/dist/types/src/types/entity_link_builder.d.ts +0 -7
  127. package/dist/types/src/types/entity_overrides.d.ts +0 -10
  128. package/dist/types/src/types/entity_views.d.ts +0 -87
  129. package/dist/types/src/types/export_import.d.ts +0 -21
  130. package/dist/types/src/types/formex.d.ts +0 -40
  131. package/dist/types/src/types/index.d.ts +0 -28
  132. package/dist/types/src/types/locales.d.ts +0 -4
  133. package/dist/types/src/types/modify_collections.d.ts +0 -5
  134. package/dist/types/src/types/plugins.d.ts +0 -282
  135. package/dist/types/src/types/properties.d.ts +0 -1181
  136. package/dist/types/src/types/property_config.d.ts +0 -74
  137. package/dist/types/src/types/relations.d.ts +0 -336
  138. package/dist/types/src/types/slots.d.ts +0 -262
  139. package/dist/types/src/types/translations.d.ts +0 -900
  140. package/dist/types/src/types/user_management_delegate.d.ts +0 -86
  141. package/dist/types/src/types/websockets.d.ts +0 -78
  142. package/dist/types/src/users/index.d.ts +0 -1
  143. package/dist/types/src/users/user.d.ts +0 -50
  144. package/drizzle.test.config.ts +0 -10
  145. /package/dist/{server-postgresql/src/auth → auth}/ensure-tables.d.ts +0 -0
  146. /package/dist/{server-postgresql/src/cli.d.ts → cli.d.ts} +0 -0
  147. /package/dist/{server-postgresql/src/connection.d.ts → connection.d.ts} +0 -0
  148. /package/dist/{server-postgresql/src/history → history}/HistoryService.d.ts +0 -0
  149. /package/dist/{server-postgresql/src/history → history}/ensure-history-table.d.ts +0 -0
  150. /package/dist/{server-postgresql/src/index.d.ts → index.d.ts} +0 -0
  151. /package/dist/{server-postgresql/src/interfaces.d.ts → interfaces.d.ts} +0 -0
  152. /package/dist/{server-postgresql/src/schema → schema}/auth-schema.d.ts +0 -0
  153. /package/dist/{server-postgresql/src/schema → schema}/doctor-cli.d.ts +0 -0
  154. /package/dist/{server-postgresql/src/schema → schema}/doctor.d.ts +0 -0
  155. /package/dist/{server-postgresql/src/schema → schema}/generate-drizzle-schema-logic.d.ts +0 -0
  156. /package/dist/{server-postgresql/src/schema → schema}/generate-drizzle-schema.d.ts +0 -0
  157. /package/dist/{server-postgresql/src/schema → schema}/introspect-db-inference.d.ts +0 -0
  158. /package/dist/{server-postgresql/src/schema → schema}/introspect-db-logic.d.ts +0 -0
  159. /package/dist/{server-postgresql/src/schema → schema}/introspect-db.d.ts +0 -0
  160. /package/dist/{server-postgresql/src/schema → schema}/test-schema.d.ts +0 -0
  161. /package/dist/{server-postgresql/src/services → services}/BranchService.d.ts +0 -0
  162. /package/dist/{server-postgresql/src/services → services}/EntityFetchService.d.ts +0 -0
  163. /package/dist/{server-postgresql/src/services → services}/RelationService.d.ts +0 -0
  164. /package/dist/{server-postgresql/src/services → services}/entity-helpers.d.ts +0 -0
  165. /package/dist/{server-postgresql/src/services → services}/entityService.d.ts +0 -0
  166. /package/dist/{server-postgresql/src/services → services}/index.d.ts +0 -0
  167. /package/dist/{server-postgresql/src/services → services}/realtimeService.d.ts +0 -0
  168. /package/dist/{server-postgresql/src/utils → utils}/drizzle-conditions.d.ts +0 -0
@@ -4,7 +4,6 @@ import { logger } from "@rebasepro/server-core";
4
4
  import type { EntityCollection } from "@rebasepro/types";
5
5
 
6
6
 
7
-
8
7
  /**
9
8
  * Auto-create auth tables if they don't exist.
10
9
  *
@@ -20,16 +19,17 @@ export async function ensureAuthTablesExist(db: NodePgDatabase, collection?: Ent
20
19
  let usersTableName = '"rebase"."users"';
21
20
  let userIdType = "TEXT";
22
21
  let usersSchema = "rebase";
22
+ let resolvedTable = "users";
23
23
  if (collection) {
24
- const rawTable = ("table" in collection && typeof collection.table === "string")
24
+ resolvedTable = ("table" in collection && typeof collection.table === "string")
25
25
  ? collection.table
26
26
  : collection.slug;
27
27
  usersSchema = ("schema" in collection && typeof collection.schema === "string")
28
28
  ? collection.schema
29
29
  : "public";
30
30
  usersTableName = usersSchema === "public"
31
- ? `"${rawTable}"`
32
- : `"${usersSchema}"."${rawTable}"`;
31
+ ? `"${resolvedTable}"`
32
+ : `"${usersSchema}"."${resolvedTable}"`;
33
33
 
34
34
  // Derive ID column type from collection properties
35
35
  const idProp = collection.properties?.id;
@@ -44,6 +44,30 @@ export async function ensureAuthTablesExist(db: NodePgDatabase, collection?: Ent
44
44
  }
45
45
  }
46
46
 
47
+ // Introspect the database to find the actual type of usersTableName's ID column if the table exists
48
+ try {
49
+ const result = await db.execute(sql`
50
+ SELECT data_type
51
+ FROM information_schema.columns
52
+ WHERE table_schema = ${usersSchema}
53
+ AND table_name = ${resolvedTable}
54
+ AND column_name = 'id'
55
+ `);
56
+ if (result && result.rows && result.rows.length > 0) {
57
+ const dbType = String((result.rows[0] as { data_type: string }).data_type).toUpperCase();
58
+ if (dbType === "UUID") {
59
+ userIdType = "UUID";
60
+ } else if (dbType === "INTEGER" || dbType === "SMALLINT" || dbType === "BIGINT") {
61
+ userIdType = "INTEGER";
62
+ } else {
63
+ userIdType = "TEXT";
64
+ }
65
+ logger.info(`✨ Detected ${usersTableName}.id type from database: ${dbType}. Using user_id type: ${userIdType}`);
66
+ }
67
+ } catch (err) {
68
+ // Ignore introspection errors, fallback to derived/default type
69
+ logger.warn(`⚠️ Failed to introspect ${usersTableName}.id type from database, falling back to config type: ${userIdType}`, { error: err });
70
+ }
47
71
 
48
72
 
49
73
  // ── Create schemas (idempotent) ──────────────────────────────────
@@ -81,7 +105,6 @@ export async function ensureAuthTablesExist(db: NodePgDatabase, collection?: Ent
81
105
  `);
82
106
 
83
107
 
84
-
85
108
  // Create refresh tokens table (includes user_agent, ip_address, and unique constraint)
86
109
  await db.execute(sql`
87
110
  CREATE TABLE IF NOT EXISTS ${sql.raw(refreshTokensTableName)} (
@@ -1,6 +1,7 @@
1
1
  import { eq, getTableName, sql } from "drizzle-orm";
2
2
  import { NodePgDatabase } from "drizzle-orm/node-postgres";
3
- import { getTableConfig, PgTable, AnyPgColumn } from "drizzle-orm/pg-core";
3
+ import { getTableConfig } from "drizzle-orm/pg-core";
4
+ import type { RebasePgTable } from "../types";
4
5
  import { users, refreshTokens, passwordResetTokens, userIdentities } from "../schema/auth-schema";
5
6
  import {
6
7
  UserRepository,
@@ -20,21 +21,20 @@ import {
20
21
  MfaFactor,
21
22
  MfaChallengeInfo,
22
23
  RoleData as Role
23
- // @ts-ignore
24
24
  } from "@rebasepro/server-core";
25
25
  import { toSnakeCase, camelCase } from "@rebasepro/utils";
26
26
 
27
27
  export type { Role };
28
28
 
29
29
  export interface AuthSchemaTables {
30
- users: PgTable & Record<string, AnyPgColumn>;
31
- refreshTokens: PgTable & Record<string, AnyPgColumn>;
32
- passwordResetTokens: PgTable & Record<string, AnyPgColumn>;
33
- appConfig: PgTable & Record<string, AnyPgColumn>;
34
- userIdentities: PgTable & Record<string, AnyPgColumn>;
30
+ users: RebasePgTable;
31
+ refreshTokens: RebasePgTable;
32
+ passwordResetTokens: RebasePgTable;
33
+ appConfig: RebasePgTable;
34
+ userIdentities: RebasePgTable;
35
35
  }
36
36
 
37
- function getColumnKey(table: (PgTable & Record<string, AnyPgColumn>) | undefined, ...keys: string[]): string | undefined {
37
+ function getColumnKey(table: RebasePgTable | undefined, ...keys: string[]): string | undefined {
38
38
  if (!table) return undefined;
39
39
  for (const key of keys) {
40
40
  if (key in table) return key;
@@ -46,7 +46,7 @@ function getColumnKey(table: (PgTable & Record<string, AnyPgColumn>) | undefined
46
46
  return undefined;
47
47
  }
48
48
 
49
- function getColumn(table: (PgTable & Record<string, AnyPgColumn>) | undefined, ...keys: string[]): AnyPgColumn | undefined {
49
+ function getColumn(table: RebasePgTable | undefined, ...keys: string[]): RebasePgTable[string] | undefined {
50
50
  if (!table) return undefined;
51
51
  const key = getColumnKey(table, ...keys);
52
52
  return key ? table[key] : undefined;
@@ -57,21 +57,21 @@ function getColumn(table: (PgTable & Record<string, AnyPgColumn>) | undefined, .
57
57
  * Handles all user-related database operations using Drizzle ORM.
58
58
  */
59
59
  export class UserService implements UserRepository {
60
- private usersTable: PgTable & Record<string, AnyPgColumn>;
61
- private userIdentitiesTable: PgTable & Record<string, AnyPgColumn>;
60
+ private usersTable: RebasePgTable;
61
+ private userIdentitiesTable: RebasePgTable;
62
62
 
63
63
  constructor(
64
64
  private db: NodePgDatabase,
65
- tableOrTables?: (PgTable & Record<string, AnyPgColumn>) | Partial<AuthSchemaTables>
65
+ tableOrTables?: RebasePgTable | Partial<AuthSchemaTables>
66
66
  ) {
67
67
  if (tableOrTables && ((tableOrTables as Partial<AuthSchemaTables>).users)) {
68
68
  const tables = tableOrTables as Partial<AuthSchemaTables>;
69
- this.usersTable = (tables.users || users) as unknown as PgTable & Record<string, AnyPgColumn>;
70
- this.userIdentitiesTable = (tables.userIdentities || userIdentities) as unknown as PgTable & Record<string, AnyPgColumn>;
69
+ this.usersTable = (tables.users || users) as RebasePgTable;
70
+ this.userIdentitiesTable = (tables.userIdentities || userIdentities) as RebasePgTable;
71
71
  } else {
72
- const table = tableOrTables as (PgTable & Record<string, AnyPgColumn>) | undefined;
73
- this.usersTable = table || (users as unknown as PgTable & Record<string, AnyPgColumn>);
74
- this.userIdentitiesTable = userIdentities as unknown as PgTable & Record<string, AnyPgColumn>;
72
+ const table = tableOrTables as RebasePgTable | undefined;
73
+ this.usersTable = table || (users as unknown as RebasePgTable);
74
+ this.userIdentitiesTable = userIdentities as unknown as RebasePgTable;
75
75
  }
76
76
  }
77
77
 
@@ -82,7 +82,7 @@ export class UserService implements UserRepository {
82
82
  }
83
83
 
84
84
  private mapRowToUser(row: Record<string, unknown>): UserData {
85
- if (!row) return row as unknown as UserData;
85
+ if (!row) return row as UserData;
86
86
 
87
87
  const id = (row.id ?? row.uid) as string;
88
88
  const email = row.email as string;
@@ -171,18 +171,18 @@ export class UserService implements UserRepository {
171
171
 
172
172
  for (const [key, val] of Object.entries(metadata)) {
173
173
  const tableColKey = getColumnKey(this.usersTable, key);
174
- if (tableColKey &&
175
- tableColKey !== idKey &&
176
- tableColKey !== emailKey &&
177
- tableColKey !== passwordHashKey &&
178
- tableColKey !== displayNameKey &&
179
- tableColKey !== photoUrlKey &&
180
- tableColKey !== emailVerifiedKey &&
181
- tableColKey !== emailVerificationTokenKey &&
182
- tableColKey !== emailVerificationSentAtKey &&
174
+ if (tableColKey &&
175
+ tableColKey !== idKey &&
176
+ tableColKey !== emailKey &&
177
+ tableColKey !== passwordHashKey &&
178
+ tableColKey !== displayNameKey &&
179
+ tableColKey !== photoUrlKey &&
180
+ tableColKey !== emailVerifiedKey &&
181
+ tableColKey !== emailVerificationTokenKey &&
182
+ tableColKey !== emailVerificationSentAtKey &&
183
183
  tableColKey !== isAnonymousKey &&
184
- tableColKey !== createdAtKey &&
185
- tableColKey !== updatedAtKey &&
184
+ tableColKey !== createdAtKey &&
185
+ tableColKey !== updatedAtKey &&
186
186
  tableColKey !== metadataKey) {
187
187
  payload[tableColKey] = val;
188
188
  } else {
@@ -220,7 +220,7 @@ export class UserService implements UserRepository {
220
220
  async getUserByIdentity(provider: string, providerId: string): Promise<UserData | null> {
221
221
  const userIdCol = getColumn(this.usersTable, "id");
222
222
  if (!userIdCol) return null;
223
-
223
+
224
224
  const result = await this.db
225
225
  .select({ user: this.usersTable })
226
226
  .from(this.usersTable)
@@ -495,18 +495,17 @@ export class UserService implements UserRepository {
495
495
  }
496
496
 
497
497
 
498
-
499
498
  export class RefreshTokenService {
500
- private refreshTokensTable: PgTable & Record<string, AnyPgColumn>;
499
+ private refreshTokensTable: RebasePgTable;
501
500
 
502
501
  constructor(
503
502
  private db: NodePgDatabase,
504
- tableOrTables?: (PgTable & Record<string, AnyPgColumn>) | Partial<AuthSchemaTables>
503
+ tableOrTables?: RebasePgTable | Partial<AuthSchemaTables>
505
504
  ) {
506
505
  if (tableOrTables && ((tableOrTables as Partial<AuthSchemaTables>).refreshTokens || (tableOrTables as Partial<AuthSchemaTables>).users)) {
507
- this.refreshTokensTable = ((tableOrTables as Partial<AuthSchemaTables>).refreshTokens || refreshTokens) as unknown as PgTable & Record<string, AnyPgColumn>;
506
+ this.refreshTokensTable = ((tableOrTables as Partial<AuthSchemaTables>).refreshTokens || refreshTokens) as RebasePgTable;
508
507
  } else {
509
- this.refreshTokensTable = (tableOrTables as unknown as PgTable & Record<string, AnyPgColumn>) || (refreshTokens as unknown as PgTable & Record<string, AnyPgColumn>);
508
+ this.refreshTokensTable = (tableOrTables as RebasePgTable) || (refreshTokens as unknown as RebasePgTable);
510
509
  }
511
510
  }
512
511
 
@@ -595,16 +594,16 @@ export class RefreshTokenService {
595
594
  * Password reset token service
596
595
  */
597
596
  export class PasswordResetTokenService {
598
- private passwordResetTokensTable: PgTable & Record<string, AnyPgColumn>;
597
+ private passwordResetTokensTable: RebasePgTable;
599
598
 
600
599
  constructor(
601
600
  private db: NodePgDatabase,
602
- tableOrTables?: (PgTable & Record<string, AnyPgColumn>) | Partial<AuthSchemaTables>
601
+ tableOrTables?: RebasePgTable | Partial<AuthSchemaTables>
603
602
  ) {
604
603
  if (tableOrTables && ((tableOrTables as Partial<AuthSchemaTables>).passwordResetTokens || (tableOrTables as Partial<AuthSchemaTables>).users)) {
605
- this.passwordResetTokensTable = ((tableOrTables as Partial<AuthSchemaTables>).passwordResetTokens || passwordResetTokens) as unknown as PgTable & Record<string, AnyPgColumn>;
604
+ this.passwordResetTokensTable = ((tableOrTables as Partial<AuthSchemaTables>).passwordResetTokens || passwordResetTokens) as RebasePgTable;
606
605
  } else {
607
- this.passwordResetTokensTable = (tableOrTables as unknown as PgTable & Record<string, AnyPgColumn>) || (passwordResetTokens as unknown as PgTable & Record<string, AnyPgColumn>);
606
+ this.passwordResetTokensTable = (tableOrTables as RebasePgTable) || (passwordResetTokens as unknown as RebasePgTable);
608
607
  }
609
608
  }
610
609
 
@@ -704,7 +703,7 @@ export class PostgresTokenRepository implements TokenRepository {
704
703
 
705
704
  constructor(
706
705
  private db: NodePgDatabase,
707
- tableOrTables?: (PgTable & Record<string, AnyPgColumn>) | Partial<AuthSchemaTables>
706
+ tableOrTables?: RebasePgTable | Partial<AuthSchemaTables>
708
707
  ) {
709
708
  this.refreshTokenService = new RefreshTokenService(db, tableOrTables);
710
709
  this.passwordResetTokenService = new PasswordResetTokenService(db, tableOrTables);
@@ -770,7 +769,7 @@ export class PostgresAuthRepository implements AuthRepository {
770
769
 
771
770
  constructor(
772
771
  private db: NodePgDatabase,
773
- tableOrTables?: (PgTable & Record<string, AnyPgColumn>) | Partial<AuthSchemaTables>
772
+ tableOrTables?: RebasePgTable | Partial<AuthSchemaTables>
774
773
  ) {
775
774
  this.userService = new UserService(db, tableOrTables);
776
775
  this.tokenRepository = new PostgresTokenRepository(db, tableOrTables);
@@ -868,9 +867,21 @@ export class PostgresAuthRepository implements AuthRepository {
868
867
 
869
868
  async listRoles(): Promise<RoleData[]> {
870
869
  return [
871
- { id: "admin", name: "Admin", isAdmin: true, defaultPermissions: null, collectionPermissions: null },
872
- { id: "editor", name: "Editor", isAdmin: false, defaultPermissions: null, collectionPermissions: null },
873
- { id: "viewer", name: "Viewer", isAdmin: false, defaultPermissions: null, collectionPermissions: null }
870
+ { id: "admin",
871
+ name: "Admin",
872
+ isAdmin: true,
873
+ defaultPermissions: null,
874
+ collectionPermissions: null },
875
+ { id: "editor",
876
+ name: "Editor",
877
+ isAdmin: false,
878
+ defaultPermissions: null,
879
+ collectionPermissions: null },
880
+ { id: "viewer",
881
+ name: "Viewer",
882
+ isAdmin: false,
883
+ defaultPermissions: null,
884
+ collectionPermissions: null }
874
885
  ];
875
886
  }
876
887
 
@@ -1016,7 +1027,7 @@ export class PostgresAuthRepository implements AuthRepository {
1016
1027
  * Handles all MFA-related database operations.
1017
1028
  */
1018
1029
  export class MfaService implements MfaRepository {
1019
- constructor(private db: NodePgDatabase, private schemaName: string = "rebase") {}
1030
+ constructor(private db: NodePgDatabase, private schemaName = "rebase") {}
1020
1031
 
1021
1032
  private qualify(tableName: string): string {
1022
1033
  return `"${this.schemaName}"."${tableName}"`;