@rebasepro/server-postgresql 0.1.0 → 0.2.1

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 (75) hide show
  1. package/LICENSE +22 -6
  2. package/dist/common/src/util/entities.d.ts +2 -2
  3. package/dist/common/src/util/relations.d.ts +1 -1
  4. package/dist/index.es.js +1250 -1665
  5. package/dist/index.es.js.map +1 -1
  6. package/dist/index.umd.js +1196 -1611
  7. package/dist/index.umd.js.map +1 -1
  8. package/dist/server-postgresql/src/PostgresAdapter.d.ts +6 -0
  9. package/dist/server-postgresql/src/PostgresBackendDriver.d.ts +2 -1
  10. package/dist/server-postgresql/src/PostgresBootstrapper.d.ts +0 -5
  11. package/dist/server-postgresql/src/auth/ensure-tables.d.ts +2 -1
  12. package/dist/server-postgresql/src/auth/services.d.ts +37 -15
  13. package/dist/server-postgresql/src/index.d.ts +1 -0
  14. package/dist/server-postgresql/src/schema/auth-schema.d.ts +43 -856
  15. package/dist/server-postgresql/src/schema/default-collections.d.ts +2 -0
  16. package/dist/server-postgresql/src/schema/doctor.d.ts +10 -1
  17. package/dist/server-postgresql/src/schema/introspect-db-logic.d.ts +1 -0
  18. package/dist/server-postgresql/src/services/entity-helpers.d.ts +1 -1
  19. package/dist/server-postgresql/src/services/realtimeService.d.ts +12 -0
  20. package/dist/server-postgresql/src/websocket.d.ts +2 -1
  21. package/dist/types/src/controllers/auth.d.ts +9 -8
  22. package/dist/types/src/controllers/client.d.ts +3 -0
  23. package/dist/types/src/types/auth_adapter.d.ts +356 -0
  24. package/dist/types/src/types/collections.d.ts +67 -2
  25. package/dist/types/src/types/database_adapter.d.ts +94 -0
  26. package/dist/types/src/types/entity_actions.d.ts +7 -1
  27. package/dist/types/src/types/entity_callbacks.d.ts +1 -1
  28. package/dist/types/src/types/entity_views.d.ts +36 -1
  29. package/dist/types/src/types/index.d.ts +2 -0
  30. package/dist/types/src/types/plugins.d.ts +1 -1
  31. package/dist/types/src/types/properties.d.ts +24 -5
  32. package/dist/types/src/types/property_config.d.ts +6 -2
  33. package/dist/types/src/types/relations.d.ts +1 -1
  34. package/dist/types/src/types/translations.d.ts +8 -0
  35. package/dist/types/src/users/user.d.ts +5 -0
  36. package/package.json +21 -15
  37. package/src/PostgresAdapter.ts +59 -0
  38. package/src/PostgresBackendDriver.ts +57 -8
  39. package/src/PostgresBootstrapper.ts +35 -15
  40. package/src/auth/ensure-tables.ts +82 -189
  41. package/src/auth/services.ts +421 -170
  42. package/src/cli.ts +44 -13
  43. package/src/data-transformer.ts +78 -8
  44. package/src/history/HistoryService.ts +25 -2
  45. package/src/index.ts +1 -0
  46. package/src/schema/auth-schema.ts +130 -98
  47. package/src/schema/default-collections.ts +68 -0
  48. package/src/schema/doctor-cli.ts +5 -1
  49. package/src/schema/doctor.ts +85 -8
  50. package/src/schema/generate-drizzle-schema-logic.ts +74 -27
  51. package/src/schema/generate-drizzle-schema.ts +13 -3
  52. package/src/schema/introspect-db-inference.ts +5 -5
  53. package/src/schema/introspect-db-logic.ts +9 -2
  54. package/src/schema/introspect-db.ts +14 -3
  55. package/src/services/EntityFetchService.ts +5 -5
  56. package/src/services/RelationService.ts +2 -2
  57. package/src/services/entity-helpers.ts +1 -1
  58. package/src/services/realtimeService.ts +145 -136
  59. package/src/utils/drizzle-conditions.ts +16 -2
  60. package/src/websocket.ts +113 -37
  61. package/test/auth-services.test.ts +163 -74
  62. package/test/data-transformer-hardening.test.ts +57 -0
  63. package/test/data-transformer.test.ts +43 -0
  64. package/test/generate-drizzle-schema.test.ts +7 -5
  65. package/test/introspect-db-utils.test.ts +4 -1
  66. package/test/postgresDataDriver.test.ts +17 -0
  67. package/test/realtimeService.test.ts +7 -7
  68. package/test/websocket.test.ts +139 -0
  69. package/examples/sdk-demo/node_modules/esbuild/LICENSE.md +0 -21
  70. package/examples/sdk-demo/node_modules/esbuild/README.md +0 -3
  71. package/examples/sdk-demo/node_modules/esbuild/bin/esbuild +0 -223
  72. package/examples/sdk-demo/node_modules/esbuild/install.js +0 -289
  73. package/examples/sdk-demo/node_modules/esbuild/lib/main.d.ts +0 -716
  74. package/examples/sdk-demo/node_modules/esbuild/lib/main.js +0 -2242
  75. package/examples/sdk-demo/node_modules/esbuild/package.json +0 -49
@@ -0,0 +1,6 @@
1
+ import { DatabaseAdapter } from "@rebasepro/types";
2
+ import type { PostgresDriverConfig } from "@rebasepro/server-core";
3
+ /**
4
+ * Creates a Postgres database adapter for Rebase.
5
+ */
6
+ export declare function createPostgresAdapter(pgConfig: PostgresDriverConfig): DatabaseAdapter;
@@ -5,7 +5,7 @@ import { DatabasePoolManager } from "./databasePoolManager";
5
5
  import { DrizzleClient } from "./interfaces";
6
6
  import { User, RebaseClient } from "@rebasepro/types";
7
7
  import { PostgresCollectionRegistry } from "./collections/PostgresCollectionRegistry";
8
- import { DataDriver, DeleteEntityProps, Entity, EntityCollection, FetchCollectionProps, FetchEntityProps, ListenCollectionProps, ListenEntityProps, SaveEntityProps, RebaseData, TableMetadata, DatabaseAdmin } from "@rebasepro/types";
8
+ import { DataDriver, DeleteEntityProps, Entity, EntityCollection, FetchCollectionProps, FetchEntityProps, ListenCollectionProps, ListenEntityProps, SaveEntityProps, RebaseData, TableMetadata, DatabaseAdmin, RestFetchService } from "@rebasepro/types";
9
9
  import { HistoryService } from "./history/HistoryService";
10
10
  export declare class PostgresBackendDriver implements DataDriver {
11
11
  db: DrizzleClient;
@@ -90,6 +90,7 @@ export declare class AuthenticatedPostgresBackendDriver implements DataDriver {
90
90
  * Typed admin capabilities — delegates to the base driver.
91
91
  */
92
92
  admin: DatabaseAdmin;
93
+ get restFetchService(): RestFetchService | undefined;
93
94
  private withTransaction;
94
95
  fetchCollection<M extends Record<string, unknown>>(props: FetchCollectionProps<M>): Promise<Entity<M>[]>;
95
96
  /**
@@ -2,11 +2,6 @@
2
2
  * PostgresBootstrapper
3
3
  *
4
4
  * Implements the `BackendBootstrapper` interface for PostgreSQL.
5
- * Encapsulates all Postgres-specific initialization logic that was previously
6
- * hardcoded inside `initializeRebaseBackend()`.
7
- *
8
- * Third-party drivers (MongoDB, MySQL, etc.) can implement their own
9
- * bootstrapper following this pattern and pass it to the coordinator.
10
5
  */
11
6
  import { NodePgDatabase } from "drizzle-orm/node-postgres";
12
7
  import { BackendBootstrapper } from "@rebasepro/types";
@@ -1,6 +1,7 @@
1
1
  import { NodePgDatabase } from "drizzle-orm/node-postgres";
2
+ import { PostgresCollectionRegistry } from "../collections/PostgresCollectionRegistry";
2
3
  /**
3
4
  * Auto-create auth tables if they don't exist
4
5
  * This runs on startup to ensure the database is ready for auth
5
6
  */
6
- export declare function ensureAuthTablesExist(db: NodePgDatabase): Promise<void>;
7
+ export declare function ensureAuthTablesExist(db: NodePgDatabase, registry?: PostgresCollectionRegistry): Promise<void>;
@@ -1,23 +1,39 @@
1
1
  import { NodePgDatabase } from "drizzle-orm/node-postgres";
2
- import { User, NewUser } from "../schema/auth-schema";
2
+ import { PgTable, AnyPgColumn } from "drizzle-orm/pg-core";
3
3
  import { UserRepository, RoleRepository, TokenRepository, AuthRepository, UserData, CreateUserData, RoleData, CreateRoleData, RefreshTokenInfo, PasswordResetTokenInfo, UserIdentityData, ListUsersOptions, PaginatedUsersResult, RoleData as Role } from "@rebasepro/server-core";
4
4
  export type { Role };
5
+ export interface AuthSchemaTables {
6
+ users: PgTable & Record<string, AnyPgColumn>;
7
+ roles: PgTable & Record<string, AnyPgColumn>;
8
+ userRoles: PgTable & Record<string, AnyPgColumn>;
9
+ refreshTokens: PgTable & Record<string, AnyPgColumn>;
10
+ passwordResetTokens: PgTable & Record<string, AnyPgColumn>;
11
+ appConfig: PgTable & Record<string, AnyPgColumn>;
12
+ userIdentities: PgTable & Record<string, AnyPgColumn>;
13
+ }
5
14
  /**
6
15
  * PostgreSQL implementation of UserRepository.
7
16
  * Handles all user-related database operations using Drizzle ORM.
8
17
  */
9
18
  export declare class UserService implements UserRepository {
10
19
  private db;
11
- constructor(db: NodePgDatabase);
12
- createUser(data: NewUser): Promise<User>;
13
- getUserById(id: string): Promise<User | null>;
14
- getUserByEmail(email: string): Promise<User | null>;
15
- getUserByIdentity(provider: string, providerId: string): Promise<User | null>;
20
+ private usersTable;
21
+ private userIdentitiesTable;
22
+ private userRolesTable;
23
+ private rolesTable;
24
+ constructor(db: NodePgDatabase, tableOrTables?: (PgTable & Record<string, AnyPgColumn>) | Partial<AuthSchemaTables>);
25
+ private getQualifiedUsersTableName;
26
+ private mapRowToUser;
27
+ private mapPayload;
28
+ createUser(data: CreateUserData): Promise<UserData>;
29
+ getUserById(id: string): Promise<UserData | null>;
30
+ getUserByEmail(email: string): Promise<UserData | null>;
31
+ getUserByIdentity(provider: string, providerId: string): Promise<UserData | null>;
16
32
  getUserIdentities(userId: string): Promise<UserIdentityData[]>;
17
33
  linkUserIdentity(userId: string, provider: string, providerId: string, profileData?: Record<string, unknown>): Promise<void>;
18
- updateUser(id: string, data: Partial<Omit<NewUser, "id">>): Promise<User | null>;
34
+ updateUser(id: string, data: Partial<Omit<CreateUserData, "id">>): Promise<UserData | null>;
19
35
  deleteUser(id: string): Promise<void>;
20
- listUsers(): Promise<User[]>;
36
+ listUsers(): Promise<UserData[]>;
21
37
  listUsersPaginated(options?: ListUsersOptions): Promise<PaginatedUsersResult>;
22
38
  /**
23
39
  * Update user's password hash
@@ -34,7 +50,7 @@ export declare class UserService implements UserRepository {
34
50
  /**
35
51
  * Find user by email verification token
36
52
  */
37
- getUserByVerificationToken(token: string): Promise<User | null>;
53
+ getUserByVerificationToken(token: string): Promise<UserData | null>;
38
54
  /**
39
55
  * Get roles for a user from database
40
56
  */
@@ -55,7 +71,7 @@ export declare class UserService implements UserRepository {
55
71
  * Get user with their roles
56
72
  */
57
73
  getUserWithRoles(userId: string): Promise<{
58
- user: User;
74
+ user: UserData;
59
75
  roles: Role[];
60
76
  } | null>;
61
77
  }
@@ -65,7 +81,9 @@ export declare class UserService implements UserRepository {
65
81
  */
66
82
  export declare class RoleService implements RoleRepository {
67
83
  private db;
68
- constructor(db: NodePgDatabase);
84
+ private rolesTable;
85
+ constructor(db: NodePgDatabase, tableOrTables?: (PgTable & Record<string, AnyPgColumn>) | Partial<AuthSchemaTables>);
86
+ private getQualifiedRolesTableName;
69
87
  getRoleById(id: string): Promise<Role | null>;
70
88
  listRoles(): Promise<Role[]>;
71
89
  createRole(data: Omit<Role, "isAdmin" | "collectionPermissions"> & {
@@ -77,7 +95,9 @@ export declare class RoleService implements RoleRepository {
77
95
  }
78
96
  export declare class RefreshTokenService {
79
97
  private db;
80
- constructor(db: NodePgDatabase);
98
+ private refreshTokensTable;
99
+ constructor(db: NodePgDatabase, tableOrTables?: (PgTable & Record<string, AnyPgColumn>) | Partial<AuthSchemaTables>);
100
+ private getQualifiedRefreshTokensTableName;
81
101
  createToken(userId: string, tokenHash: string, expiresAt: Date, userAgent?: string, ipAddress?: string): Promise<void>;
82
102
  findByHash(tokenHash: string): Promise<RefreshTokenInfo | null>;
83
103
  deleteByHash(tokenHash: string): Promise<void>;
@@ -90,7 +110,9 @@ export declare class RefreshTokenService {
90
110
  */
91
111
  export declare class PasswordResetTokenService {
92
112
  private db;
93
- constructor(db: NodePgDatabase);
113
+ private passwordResetTokensTable;
114
+ constructor(db: NodePgDatabase, tableOrTables?: (PgTable & Record<string, AnyPgColumn>) | Partial<AuthSchemaTables>);
115
+ private getQualifiedPasswordResetTokensTableName;
94
116
  /**
95
117
  * Create a password reset token
96
118
  */
@@ -123,7 +145,7 @@ export declare class PostgresTokenRepository implements TokenRepository {
123
145
  private db;
124
146
  private refreshTokenService;
125
147
  private passwordResetTokenService;
126
- constructor(db: NodePgDatabase);
148
+ constructor(db: NodePgDatabase, tableOrTables?: (PgTable & Record<string, AnyPgColumn>) | Partial<AuthSchemaTables>);
127
149
  createRefreshToken(userId: string, tokenHash: string, expiresAt: Date, userAgent?: string, ipAddress?: string): Promise<void>;
128
150
  findRefreshTokenByHash(tokenHash: string): Promise<RefreshTokenInfo | null>;
129
151
  deleteRefreshToken(tokenHash: string): Promise<void>;
@@ -146,7 +168,7 @@ export declare class PostgresAuthRepository implements AuthRepository {
146
168
  private userService;
147
169
  private roleService;
148
170
  private tokenRepository;
149
- constructor(db: NodePgDatabase);
171
+ constructor(db: NodePgDatabase, tableOrTables?: (PgTable & Record<string, AnyPgColumn>) | Partial<AuthSchemaTables>);
150
172
  createUser(data: CreateUserData): Promise<UserData>;
151
173
  getUserById(id: string): Promise<UserData | null>;
152
174
  getUserByEmail(email: string): Promise<UserData | null>;
@@ -11,3 +11,4 @@ export * from "./websocket";
11
11
  export * from "./collections/PostgresCollectionRegistry";
12
12
  export * from "./services/BranchService";
13
13
  export * from "./PostgresBootstrapper";
14
+ export * from "./PostgresAdapter";