@rebasepro/server-mongo 0.0.1-canary.4829d6e

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 (52) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +86 -0
  3. package/dist/MongoBootstrapper.d.ts +18 -0
  4. package/dist/MongoBootstrapper.d.ts.map +1 -0
  5. package/dist/auth/ensure-collections.d.ts +3 -0
  6. package/dist/auth/ensure-collections.d.ts.map +1 -0
  7. package/dist/auth/services.d.ts +156 -0
  8. package/dist/auth/services.d.ts.map +1 -0
  9. package/dist/connection.d.ts +35 -0
  10. package/dist/connection.d.ts.map +1 -0
  11. package/dist/db/MongoConditionBuilder.d.ts +64 -0
  12. package/dist/db/MongoConditionBuilder.d.ts.map +1 -0
  13. package/dist/db/MongoDataService.d.ts +101 -0
  14. package/dist/db/MongoDataService.d.ts.map +1 -0
  15. package/dist/ensure-collections-Bkx_O5CQ.js +94 -0
  16. package/dist/ensure-collections-Bkx_O5CQ.js.map +1 -0
  17. package/dist/ensure-history-collection-yajOt2dv.js +21 -0
  18. package/dist/ensure-history-collection-yajOt2dv.js.map +1 -0
  19. package/dist/factory.d.ts +151 -0
  20. package/dist/factory.d.ts.map +1 -0
  21. package/dist/history/ensure-history-collection.d.ts +3 -0
  22. package/dist/history/ensure-history-collection.d.ts.map +1 -0
  23. package/dist/index.d.ts +18 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.es.js +2508 -0
  26. package/dist/index.es.js.map +1 -0
  27. package/dist/index.umd.js +2925 -0
  28. package/dist/index.umd.js.map +1 -0
  29. package/dist/services/MongoDriver.d.ts +125 -0
  30. package/dist/services/MongoDriver.d.ts.map +1 -0
  31. package/dist/services/MongoHistoryService.d.ts +37 -0
  32. package/dist/services/MongoHistoryService.d.ts.map +1 -0
  33. package/dist/services/MongoRealtimeService.d.ts +103 -0
  34. package/dist/services/MongoRealtimeService.d.ts.map +1 -0
  35. package/dist/websocket-DQlwCHFq.js +281 -0
  36. package/dist/websocket-DQlwCHFq.js.map +1 -0
  37. package/dist/websocket.d.ts +7 -0
  38. package/dist/websocket.d.ts.map +1 -0
  39. package/package.json +81 -0
  40. package/src/MongoBootstrapper.ts +196 -0
  41. package/src/auth/ensure-collections.ts +105 -0
  42. package/src/auth/services.ts +732 -0
  43. package/src/connection.ts +60 -0
  44. package/src/db/MongoConditionBuilder.ts +224 -0
  45. package/src/db/MongoDataService.ts +368 -0
  46. package/src/factory.ts +305 -0
  47. package/src/history/ensure-history-collection.ts +22 -0
  48. package/src/index.ts +25 -0
  49. package/src/services/MongoDriver.ts +1120 -0
  50. package/src/services/MongoHistoryService.ts +181 -0
  51. package/src/services/MongoRealtimeService.ts +446 -0
  52. package/src/websocket.ts +297 -0
package/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Rebase
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
package/README.md ADDED
@@ -0,0 +1,86 @@
1
+ # @rebasepro/server-mongo
2
+
3
+ MongoDB database driver for Rebase.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ pnpm add @rebasepro/server-mongo
9
+ ```
10
+
11
+ ## What This Package Does
12
+
13
+ Implements the Rebase `BackendBootstrapper` and backend interfaces for MongoDB. Provides a complete data driver, change-stream-based realtime, snapshot history, auth repositories, and WebSocket support. Plug it into `@rebasepro/server` via `createMongoBootstrapper()`, or use the standalone `createMongoBackend()` factory for direct access.
14
+
15
+ ## Key Exports
16
+
17
+ | Export | Description |
18
+ |--------|-------------|
19
+ | `createMongoBootstrapper(config)` | Creates a `BackendBootstrapper` for use with `initializeRebaseBackend({ bootstrappers: [...] })`. |
20
+ | `createMongoBackend(config)` | Standalone factory — returns a `MongoBackendInstance` with driver, snapshot service, realtime, admin, and lifecycle methods. |
21
+ | `createMongoDelegate(db)` | Convenience factory for just the `MongoDriver` (DataDriver). |
22
+ | `createMongoRealtimeService(db)` | Creates a MongoDB change-stream-based realtime provider. |
23
+ | `createMongoSnapshotRepository(db)` | Creates an `SnapshotRepository` for direct CRUD. |
24
+ | `createMongoDBConnection(url, dbName)` | Connects to MongoDB and returns a `MongoDBConnection` wrapper. |
25
+ | `MongoDBConnection` | `DatabaseConnection` implementation wrapping `MongoClient` + `Db`. |
26
+ | `MongoDriver` | The `DataDriver` implementation for MongoDB. |
27
+ | `MongoSnapshotService` | Low-level snapshot CRUD service. |
28
+ | `MongoRealtimeService` | Change-stream-based `RealtimeProvider`. |
29
+ | `MongoCollectionRegistry` | In-memory collection registry. |
30
+ | `isMongoBackendConfig(config)` | Type guard for `MongoBackendConfig`. |
31
+
32
+ ## Quick Start
33
+
34
+ ### With server (recommended)
35
+
36
+ ```typescript
37
+ import { MongoClient } from "mongodb";
38
+ import { createMongoBootstrapper } from "@rebasepro/server-mongo";
39
+ import { initializeRebaseBackend } from "@rebasepro/server";
40
+
41
+ const client = new MongoClient("mongodb://localhost:27017");
42
+ await client.connect();
43
+ const db = client.db("my_database");
44
+
45
+ const backend = await initializeRebaseBackend({
46
+ app,
47
+ server,
48
+ bootstrappers: [
49
+ createMongoBootstrapper({ connection: db, client }),
50
+ ],
51
+ collections,
52
+ auth: { /* ... */ },
53
+ });
54
+ ```
55
+
56
+ ### Standalone (without server)
57
+
58
+ ```typescript
59
+ import { MongoClient } from "mongodb";
60
+ import { createMongoBackend } from "@rebasepro/server-mongo";
61
+
62
+ const client = new MongoClient("mongodb://localhost:27017");
63
+ await client.connect();
64
+
65
+ const backend = createMongoBackend({
66
+ type: "mongodb",
67
+ connection: client.db("my_database"),
68
+ client,
69
+ collections: myCollections,
70
+ });
71
+
72
+ // Use directly
73
+ const health = await backend.healthCheck();
74
+ const snapshots = await backend.snapshotService.fetchCollection("users", {});
75
+
76
+ // Cleanup
77
+ await backend.destroy();
78
+ ```
79
+
80
+ ## Related Packages
81
+
82
+ | Package | Role |
83
+ |---------|------|
84
+ | `@rebasepro/server` | Backend orchestrator (peer dependency, optional) |
85
+ | `@rebasepro/types` | Shared interfaces (`BackendBootstrapper`, `DataDriver`, `RealtimeProvider`) |
86
+ | `@rebasepro/common` | Default collections and shared utilities |
@@ -0,0 +1,18 @@
1
+ import { Db, MongoClient } from "mongodb";
2
+ import type { BackendBootstrapper } from "@rebasepro/types";
3
+ import { MongoDriver } from "./services/MongoDriver";
4
+ import { MongoRealtimeService } from "./services/MongoRealtimeService";
5
+ import { MongoCollectionRegistry } from "./factory";
6
+ export interface MongoDriverConfig {
7
+ connection: Db;
8
+ client: MongoClient;
9
+ }
10
+ export interface MongoDriverInternals {
11
+ db: Db;
12
+ client: MongoClient;
13
+ registry: MongoCollectionRegistry;
14
+ realtimeService: MongoRealtimeService;
15
+ driver: MongoDriver;
16
+ }
17
+ export declare function createMongoBootstrapper(mongoConfig: MongoDriverConfig): BackendBootstrapper;
18
+ //# sourceMappingURL=MongoBootstrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoBootstrapper.d.ts","sourceRoot":"","sources":["../src/MongoBootstrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EACR,mBAAmB,EAQtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAIpD,MAAM,WAAW,iBAAiB;IAC9B,UAAU,EAAE,EAAE,CAAC;IACf,MAAM,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACjC,EAAE,EAAE,EAAE,CAAC;IACP,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,uBAAuB,CAAC;IAClC,eAAe,EAAE,oBAAoB,CAAC;IACtC,MAAM,EAAE,WAAW,CAAC;CACvB;AAcD,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,iBAAiB,GAAG,mBAAmB,CAyJ3F"}
@@ -0,0 +1,3 @@
1
+ import { Db } from "mongodb";
2
+ export declare function ensureAuthCollectionsExist(db: Db): Promise<void>;
3
+ //# sourceMappingURL=ensure-collections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure-collections.d.ts","sourceRoot":"","sources":["../../src/auth/ensure-collections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AA0C7B,wBAAsB,0BAA0B,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwCtE"}
@@ -0,0 +1,156 @@
1
+ import { Db } from "mongodb";
2
+ /** Loose document type that allows string _id values (Rebase convention). */
3
+ export interface MongoDoc {
4
+ _id?: string;
5
+ [key: string]: any;
6
+ }
7
+ import { UserRepository, RoleRepository, TokenRepository, AuthRepository, UserData, CreateUserData, RoleData, CreateRoleData, RefreshTokenInfo, PasswordResetTokenInfo, MagicLinkTokenInfo, UserIdentityData, ListUsersOptions, PaginatedUsersResult, MfaFactor, MfaChallengeInfo } from "@rebasepro/server";
8
+ export type Role = RoleData;
9
+ export declare class MongoUserService implements UserRepository {
10
+ private db;
11
+ constructor(db: Db);
12
+ private get collection();
13
+ private get identitiesCollection();
14
+ private get userRolesCollection();
15
+ private get rolesCollection();
16
+ createUser(data: CreateUserData): Promise<UserData>;
17
+ getUserById(id: string): Promise<UserData | null>;
18
+ getUserByEmail(email: string): Promise<UserData | null>;
19
+ getUserByIdentity(provider: string, providerId: string): Promise<UserData | null>;
20
+ getUserIdentities(userId: string): Promise<UserIdentityData[]>;
21
+ linkUserIdentity(userId: string, provider: string, providerId: string, profileData?: Record<string, unknown>): Promise<void>;
22
+ updateUser(id: string, data: Partial<Omit<CreateUserData, "id">>): Promise<UserData | null>;
23
+ deleteUser(id: string): Promise<void>;
24
+ listUsers(): Promise<UserData[]>;
25
+ listUsersPaginated(options?: ListUsersOptions): Promise<PaginatedUsersResult>;
26
+ updatePassword(id: string, passwordHash: string): Promise<void>;
27
+ setEmailVerified(id: string, verified: boolean): Promise<void>;
28
+ setVerificationToken(id: string, token: string | null): Promise<void>;
29
+ getUserByVerificationToken(token: string): Promise<UserData | null>;
30
+ getUserRoles(userId: string): Promise<RoleData[]>;
31
+ getUserRoleIds(userId: string): Promise<string[]>;
32
+ setUserRoles(userId: string, roleIds: string[]): Promise<void>;
33
+ assignDefaultRole(userId: string, roleId: string): Promise<void>;
34
+ getUserWithRoles(userId: string): Promise<{
35
+ user: UserData;
36
+ roles: RoleData[];
37
+ } | null>;
38
+ }
39
+ export declare class MongoRoleService implements RoleRepository {
40
+ private db;
41
+ constructor(db: Db);
42
+ private get collection();
43
+ getRoleById(id: string): Promise<RoleData | null>;
44
+ listRoles(): Promise<RoleData[]>;
45
+ createRole(data: CreateRoleData): Promise<RoleData>;
46
+ updateRole(id: string, data: Partial<Omit<RoleData, "id">>): Promise<RoleData | null>;
47
+ deleteRole(id: string): Promise<void>;
48
+ }
49
+ export declare class MongoRefreshTokenService {
50
+ private db;
51
+ constructor(db: Db);
52
+ private get collection();
53
+ createToken(userId: string, tokenHash: string, expiresAt: Date, userAgent?: string, ipAddress?: string): Promise<void>;
54
+ findByHash(tokenHash: string): Promise<RefreshTokenInfo | null>;
55
+ deleteByHash(tokenHash: string): Promise<void>;
56
+ deleteAllForUser(userId: string): Promise<void>;
57
+ listForUser(userId: string): Promise<RefreshTokenInfo[]>;
58
+ deleteById(id: string, userId: string): Promise<void>;
59
+ }
60
+ export declare class MongoPasswordResetTokenService {
61
+ private db;
62
+ constructor(db: Db);
63
+ private get collection();
64
+ createToken(userId: string, tokenHash: string, expiresAt: Date): Promise<void>;
65
+ findValidByHash(tokenHash: string): Promise<{
66
+ userId: string;
67
+ expiresAt: Date;
68
+ } | null>;
69
+ markAsUsed(tokenHash: string): Promise<void>;
70
+ deleteAllForUser(userId: string): Promise<void>;
71
+ deleteExpired(): Promise<void>;
72
+ }
73
+ export declare class MongoTokenRepository implements TokenRepository {
74
+ private db;
75
+ private refreshTokenService;
76
+ private passwordResetTokenService;
77
+ constructor(db: Db);
78
+ createRefreshToken(userId: string, tokenHash: string, expiresAt: Date, userAgent?: string, ipAddress?: string): Promise<void>;
79
+ findRefreshTokenByHash(tokenHash: string): Promise<RefreshTokenInfo | null>;
80
+ deleteRefreshToken(tokenHash: string): Promise<void>;
81
+ deleteAllRefreshTokensForUser(userId: string): Promise<void>;
82
+ listRefreshTokensForUser(userId: string): Promise<RefreshTokenInfo[]>;
83
+ deleteRefreshTokenById(id: string, userId: string): Promise<void>;
84
+ createPasswordResetToken(userId: string, tokenHash: string, expiresAt: Date): Promise<void>;
85
+ findValidPasswordResetToken(tokenHash: string): Promise<PasswordResetTokenInfo | null>;
86
+ markPasswordResetTokenUsed(tokenHash: string): Promise<void>;
87
+ deleteAllPasswordResetTokensForUser(userId: string): Promise<void>;
88
+ deleteExpiredTokens(): Promise<void>;
89
+ createMagicLinkToken(userId: string, tokenHash: string, expiresAt: Date): Promise<void>;
90
+ findValidMagicLinkToken(tokenHash: string): Promise<MagicLinkTokenInfo | null>;
91
+ markMagicLinkTokenUsed(tokenHash: string): Promise<void>;
92
+ }
93
+ export declare class MongoAuthRepository implements AuthRepository {
94
+ private db;
95
+ private userService;
96
+ private roleService;
97
+ private tokenRepository;
98
+ constructor(db: Db);
99
+ createUser(data: CreateUserData): Promise<UserData>;
100
+ getUserById(id: string): Promise<UserData | null>;
101
+ getUserByEmail(email: string): Promise<UserData | null>;
102
+ getUserByIdentity(provider: string, providerId: string): Promise<UserData | null>;
103
+ getUserIdentities(userId: string): Promise<UserIdentityData[]>;
104
+ linkUserIdentity(userId: string, provider: string, providerId: string, profileData?: Record<string, unknown>): Promise<void>;
105
+ updateUser(id: string, data: Partial<Omit<CreateUserData, "id">>): Promise<UserData | null>;
106
+ deleteUser(id: string): Promise<void>;
107
+ listUsers(): Promise<UserData[]>;
108
+ listUsersPaginated(options?: ListUsersOptions): Promise<PaginatedUsersResult>;
109
+ updatePassword(id: string, passwordHash: string): Promise<void>;
110
+ setEmailVerified(id: string, verified: boolean): Promise<void>;
111
+ setVerificationToken(id: string, token: string | null): Promise<void>;
112
+ getUserByVerificationToken(token: string): Promise<UserData | null>;
113
+ getUserRoles(userId: string): Promise<RoleData[]>;
114
+ getUserRoleIds(userId: string): Promise<string[]>;
115
+ setUserRoles(userId: string, roleIds: string[]): Promise<void>;
116
+ assignDefaultRole(userId: string, roleId: string): Promise<void>;
117
+ getUserWithRoles(userId: string): Promise<{
118
+ user: UserData;
119
+ roles: RoleData[];
120
+ } | null>;
121
+ getRoleById(id: string): Promise<RoleData | null>;
122
+ listRoles(): Promise<RoleData[]>;
123
+ createRole(data: CreateRoleData): Promise<RoleData>;
124
+ updateRole(id: string, data: Partial<Omit<RoleData, "id">>): Promise<RoleData | null>;
125
+ deleteRole(id: string): Promise<void>;
126
+ createRefreshToken(userId: string, tokenHash: string, expiresAt: Date, userAgent?: string, ipAddress?: string): Promise<void>;
127
+ findRefreshTokenByHash(tokenHash: string): Promise<RefreshTokenInfo | null>;
128
+ deleteRefreshToken(tokenHash: string): Promise<void>;
129
+ deleteAllRefreshTokensForUser(userId: string): Promise<void>;
130
+ listRefreshTokensForUser(userId: string): Promise<RefreshTokenInfo[]>;
131
+ deleteRefreshTokenById(id: string, userId: string): Promise<void>;
132
+ createPasswordResetToken(userId: string, tokenHash: string, expiresAt: Date): Promise<void>;
133
+ findValidPasswordResetToken(tokenHash: string): Promise<PasswordResetTokenInfo | null>;
134
+ markPasswordResetTokenUsed(tokenHash: string): Promise<void>;
135
+ deleteAllPasswordResetTokensForUser(userId: string): Promise<void>;
136
+ deleteExpiredTokens(): Promise<void>;
137
+ createMagicLinkToken(userId: string, tokenHash: string, expiresAt: Date): Promise<void>;
138
+ findValidMagicLinkToken(tokenHash: string): Promise<MagicLinkTokenInfo | null>;
139
+ markMagicLinkTokenUsed(tokenHash: string): Promise<void>;
140
+ createMfaFactor(userId: string, factorType: "totp", secretEncrypted: string, friendlyName?: string): Promise<MfaFactor>;
141
+ getMfaFactors(userId: string): Promise<MfaFactor[]>;
142
+ getMfaFactorById(factorId: string): Promise<(MfaFactor & {
143
+ secretEncrypted: string;
144
+ }) | null>;
145
+ verifyMfaFactor(factorId: string): Promise<void>;
146
+ deleteMfaFactor(factorId: string, userId: string): Promise<void>;
147
+ createMfaChallenge(factorId: string, ipAddress?: string): Promise<MfaChallengeInfo>;
148
+ getMfaChallengeById(challengeId: string): Promise<MfaChallengeInfo | null>;
149
+ verifyMfaChallenge(challengeId: string): Promise<void>;
150
+ createRecoveryCodes(userId: string, codeHashes: string[]): Promise<void>;
151
+ useRecoveryCode(userId: string, codeHash: string): Promise<boolean>;
152
+ getUnusedRecoveryCodeCount(userId: string): Promise<number>;
153
+ deleteAllRecoveryCodes(userId: string): Promise<void>;
154
+ hasVerifiedMfaFactors(userId: string): Promise<boolean>;
155
+ }
156
+ //# sourceMappingURL=services.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/auth/services.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * MongoDB Connection
3
+ *
4
+ * Wraps MongoDB connection to implement the DatabaseConnection interface.
5
+ */
6
+ import { Db, MongoClient } from "mongodb";
7
+ import { DatabaseConnection } from "@rebasepro/types";
8
+ /**
9
+ * MongoDB database connection wrapper that implements DatabaseConnection interface.
10
+ */
11
+ export declare class MongoDBConnection implements DatabaseConnection {
12
+ readonly db: Db;
13
+ readonly client: MongoClient;
14
+ readonly type = "mongodb";
15
+ constructor(db: Db, client: MongoClient);
16
+ get isConnected(): boolean;
17
+ close(): Promise<void>;
18
+ }
19
+ /**
20
+ * Create a MongoDB database connection from a connection string.
21
+ *
22
+ * @param connectionString - MongoDB connection string (e.g., mongodb://localhost:27017)
23
+ * @param databaseName - Name of the database to use
24
+ * @returns Promise resolving to MongoDBConnection
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * const connection = await createMongoDBConnection(
29
+ * "mongodb://localhost:27017",
30
+ * "my_database"
31
+ * );
32
+ * ```
33
+ */
34
+ export declare function createMongoDBConnection(connectionString: string, databaseName: string): Promise<MongoDBConnection>;
35
+ //# sourceMappingURL=connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;GAEG;AACH,qBAAa,iBAAkB,YAAW,kBAAkB;aAIpC,EAAE,EAAE,EAAE;aACN,MAAM,EAAE,WAAW;IAJvC,QAAQ,CAAC,IAAI,aAAa;gBAGN,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,WAAW;IAGvC,IAAI,WAAW,IAAI,OAAO,CASzB;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,uBAAuB,CACzC,gBAAgB,EAAE,MAAM,EACxB,YAAY,EAAE,MAAM,GACrB,OAAO,CAAC,iBAAiB,CAAC,CAK5B"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * MongoDB Condition Builder
3
+ *
4
+ * Translates Rebase filter conditions to MongoDB query operators.
5
+ */
6
+ import { FilterValues } from "@rebasepro/types";
7
+ import { Filter, Document } from "mongodb";
8
+ /**
9
+ * MongoDB Condition Builder
10
+ *
11
+ * Provides static methods to translate Rebase filter conditions
12
+ * to MongoDB query filters.
13
+ */
14
+ export declare class MongoConditionBuilder {
15
+ /**
16
+ * Build MongoDB filter conditions from Rebase FilterValues
17
+ *
18
+ * @param filter - Rebase filter values
19
+ * @returns Array of MongoDB filter objects
20
+ */
21
+ static buildFilterConditions<M extends Record<string, any>>(filter: FilterValues<Extract<keyof M, string>>): Filter<Document>[];
22
+ /**
23
+ * Build search conditions for text search
24
+ *
25
+ * @param searchString - Text to search for
26
+ * @param properties - Properties to search in
27
+ * @returns Array of MongoDB filter objects for text search
28
+ */
29
+ static buildSearchConditions(searchString: string, properties: Record<string, any>): Filter<Document>[];
30
+ /**
31
+ * Combine multiple conditions with AND operator
32
+ *
33
+ * @param conditions - Array of filter conditions
34
+ * @returns Combined filter or undefined if empty
35
+ */
36
+ static combineConditionsWithAnd(conditions: Filter<Document>[]): Filter<Document> | undefined;
37
+ /**
38
+ * Combine multiple conditions with OR operator
39
+ *
40
+ * @param conditions - Array of filter conditions
41
+ * @returns Combined filter or undefined if empty
42
+ */
43
+ static combineConditionsWithOr(conditions: Filter<Document>[]): Filter<Document> | undefined;
44
+ /**
45
+ * Build a complete MongoDB query from Rebase options
46
+ *
47
+ * @param options - Rebase fetch options
48
+ * @returns MongoDB filter object
49
+ */
50
+ static buildQuery<M extends Record<string, any>>(options: {
51
+ filter?: FilterValues<Extract<keyof M, string>>;
52
+ searchString?: string;
53
+ properties?: Record<string, any>;
54
+ }): Filter<Document>;
55
+ /**
56
+ * Build MongoDB sort options from Rebase options
57
+ *
58
+ * @param orderBy - Field to order by
59
+ * @param order - Sort direction
60
+ * @returns MongoDB sort object
61
+ */
62
+ static buildSort(orderBy?: string, order?: "asc" | "desc"): Record<string, 1 | -1> | undefined;
63
+ }
64
+ //# sourceMappingURL=MongoConditionBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoConditionBuilder.d.ts","sourceRoot":"","sources":["../../src/db/MongoConditionBuilder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAiB,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAsC3C;;;;;GAKG;AACH,qBAAa,qBAAqB;IAC9B;;;;;OAKG;IACH,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtD,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,GAC/C,MAAM,CAAC,QAAQ,CAAC,EAAE;IAqDrB;;;;;;OAMG;IACH,MAAM,CAAC,qBAAqB,CACxB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAChC,MAAM,CAAC,QAAQ,CAAC,EAAE;IAyBrB;;;;;OAKG;IACH,MAAM,CAAC,wBAAwB,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAM7F;;;;;OAKG;IACH,MAAM,CAAC,uBAAuB,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAM5F;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE;QACtD,MAAM,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAChD,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACpC,GAAG,MAAM,CAAC,QAAQ,CAAC;IA2BpB;;;;;;OAMG;IACH,MAAM,CAAC,SAAS,CACZ,OAAO,CAAC,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,GACvB,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS;CAIxC"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * MongoDB Row Service
3
+ *
4
+ * Implements DataRepository interface for MongoDB.
5
+ * Provides all CRUD operations for rows.
6
+ */
7
+ import { Db, Document, Filter } from "mongodb";
8
+ import { FilterValues, DataRepository, CollectionConfig } from "@rebasepro/types";
9
+ /**
10
+ * MongoDB Row Service
11
+ *
12
+ * Implements the DataRepository interface for MongoDB.
13
+ * Provides all CRUD operations for rows stored in MongoDB collections.
14
+ */
15
+ export declare class MongoDataService implements DataRepository {
16
+ private db;
17
+ constructor(db: Db);
18
+ /**
19
+ * Get a MongoDB collection by its path
20
+ */
21
+ private getCollection;
22
+ /**
23
+ * Convert a string ID to ObjectId if it's a valid ObjectId string
24
+ */
25
+ private toObjectId;
26
+ /**
27
+ * Convert a MongoDB document to a flat row (`{ id, ...fields }`)
28
+ */
29
+ private documentToRow;
30
+ /**
31
+ * Convert values from MongoDB format to Rebase format
32
+ */
33
+ private convertFromMongoValues;
34
+ /**
35
+ * Convert a single value from MongoDB format
36
+ */
37
+ private convertFromMongoValue;
38
+ /**
39
+ * Convert values to MongoDB format for storage
40
+ */
41
+ private convertToMongoValues;
42
+ /**
43
+ * Convert a single value to MongoDB format
44
+ */
45
+ private convertToMongoValue;
46
+ /**
47
+ * Fetch a single row by ID
48
+ */
49
+ fetchOne<M extends Record<string, any>>(collectionPath: string, id: string | number, _databaseId?: string): Promise<Record<string, unknown> | undefined>;
50
+ /**
51
+ * Fetch a collection of rows with optional filtering, ordering, and pagination
52
+ */
53
+ fetchCollection<M extends Record<string, any>>(collectionPath: string, options?: {
54
+ filter?: FilterValues<Extract<keyof M, string>>;
55
+ orderBy?: string;
56
+ order?: "desc" | "asc";
57
+ limit?: number;
58
+ startAfter?: any;
59
+ searchString?: string;
60
+ databaseId?: string;
61
+ collection?: CollectionConfig;
62
+ rawQuery?: Filter<Document>;
63
+ }): Promise<Record<string, unknown>[]>;
64
+ /**
65
+ * Search rows by text
66
+ */
67
+ searchRows<M extends Record<string, any>>(collectionPath: string, searchString: string, options?: {
68
+ filter?: FilterValues<Extract<keyof M, string>>;
69
+ orderBy?: string;
70
+ order?: "desc" | "asc";
71
+ limit?: number;
72
+ databaseId?: string;
73
+ collection?: CollectionConfig;
74
+ rawQuery?: Filter<Document>;
75
+ }): Promise<Record<string, unknown>[]>;
76
+ /**
77
+ * Count rows in a collection
78
+ */
79
+ count<M extends Record<string, any>>(collectionPath: string, options?: {
80
+ filter?: FilterValues<Extract<keyof M, string>>;
81
+ databaseId?: string;
82
+ rawQuery?: Filter<Document>;
83
+ }): Promise<number>;
84
+ /**
85
+ * Save an row (create or update)
86
+ */
87
+ save<M extends Record<string, any>>(collectionPath: string, values: Partial<M>, id?: string | number, _databaseId?: string): Promise<Record<string, unknown>>;
88
+ /**
89
+ * Delete an row by ID
90
+ */
91
+ delete(collectionPath: string, id: string | number, _databaseId?: string): Promise<void>;
92
+ /**
93
+ * Check if a field value is unique in a collection
94
+ */
95
+ checkUniqueField(collectionPath: string, fieldName: string, value: any, excludeEntityId?: string, _databaseId?: string): Promise<boolean>;
96
+ /**
97
+ * Generate a new row ID
98
+ */
99
+ generateId(): string;
100
+ }
101
+ //# sourceMappingURL=MongoDataService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoDataService.d.ts","sourceRoot":"","sources":["../../src/db/MongoDataService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import { logger } from "@rebasepro/server";
2
+ //#region src/auth/ensure-collections.ts
3
+ /**
4
+ * Default roles to seed on first run
5
+ */
6
+ var DEFAULT_ROLES = [
7
+ {
8
+ _id: "admin",
9
+ id: "admin",
10
+ name: "Admin",
11
+ isAdmin: true,
12
+ defaultPermissions: {
13
+ read: true,
14
+ create: true,
15
+ edit: true,
16
+ delete: true
17
+ },
18
+ createdAt: /* @__PURE__ */ new Date()
19
+ },
20
+ {
21
+ _id: "editor",
22
+ id: "editor",
23
+ name: "Editor",
24
+ isAdmin: false,
25
+ defaultPermissions: {
26
+ read: true,
27
+ create: true,
28
+ edit: true,
29
+ delete: true
30
+ },
31
+ createdAt: /* @__PURE__ */ new Date()
32
+ },
33
+ {
34
+ _id: "viewer",
35
+ id: "viewer",
36
+ name: "Viewer",
37
+ isAdmin: false,
38
+ defaultPermissions: {
39
+ read: true,
40
+ create: false,
41
+ edit: false,
42
+ delete: false
43
+ },
44
+ createdAt: /* @__PURE__ */ new Date()
45
+ }
46
+ ];
47
+ async function ensureAuthCollectionsExist(db) {
48
+ logger.info("🔍 Checking MongoDB auth collections and indexes...");
49
+ try {
50
+ await db.collection("rebase_users").createIndex({ email: 1 }, { unique: true });
51
+ const identities = db.collection("rebase_user_identities");
52
+ await identities.createIndex({
53
+ provider: 1,
54
+ provider_id: 1
55
+ }, { unique: true });
56
+ await identities.createIndex({ user_id: 1 });
57
+ const userRoles = db.collection("rebase_user_roles");
58
+ await userRoles.createIndex({
59
+ user_id: 1,
60
+ role_id: 1
61
+ }, { unique: true });
62
+ await userRoles.createIndex({ user_id: 1 });
63
+ const refreshTokens = db.collection("rebase_refresh_tokens");
64
+ await refreshTokens.createIndex({ token_hash: 1 }, { unique: true });
65
+ await refreshTokens.createIndex({
66
+ user_id: 1,
67
+ user_agent: 1,
68
+ ip_address: 1
69
+ }, { unique: true });
70
+ await refreshTokens.createIndex({ user_id: 1 });
71
+ const resetTokens = db.collection("rebase_password_reset_tokens");
72
+ await resetTokens.createIndex({ token_hash: 1 }, { unique: true });
73
+ await resetTokens.createIndex({ user_id: 1 });
74
+ await seedDefaultRoles(db);
75
+ logger.info("✅ MongoDB Auth collections ready");
76
+ } catch (error) {
77
+ logger.error("❌ Failed to set up MongoDB auth collections", { error });
78
+ }
79
+ }
80
+ async function seedDefaultRoles(db) {
81
+ const roles = db.collection("rebase_roles");
82
+ const count = await roles.countDocuments();
83
+ if (count > 0) {
84
+ logger.info(`📋 Found ${count} existing roles`);
85
+ return;
86
+ }
87
+ logger.info("🌱 Seeding default roles...");
88
+ for (const role of DEFAULT_ROLES) await roles.updateOne({ id: role.id }, { $setOnInsert: role }, { upsert: true });
89
+ logger.info("✅ Default roles created: admin, editor, viewer");
90
+ }
91
+ //#endregion
92
+ export { ensureAuthCollectionsExist };
93
+
94
+ //# sourceMappingURL=ensure-collections-Bkx_O5CQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure-collections-Bkx_O5CQ.js","names":[],"sources":["../src/auth/ensure-collections.ts"],"sourcesContent":["import { Db } from \"mongodb\";\nimport { logger } from \"@rebasepro/server\";\n\n/**\n * Default roles to seed on first run\n */\nconst DEFAULT_ROLES = [\n {\n _id: \"admin\",\n id: \"admin\",\n name: \"Admin\",\n isAdmin: true,\n defaultPermissions: { read: true,\ncreate: true,\nedit: true,\ndelete: true },\n createdAt: new Date()\n },\n {\n _id: \"editor\",\n id: \"editor\",\n name: \"Editor\",\n isAdmin: false,\n defaultPermissions: { read: true,\ncreate: true,\nedit: true,\ndelete: true },\n createdAt: new Date()\n },\n {\n _id: \"viewer\",\n id: \"viewer\",\n name: \"Viewer\",\n isAdmin: false,\n defaultPermissions: { read: true,\ncreate: false,\nedit: false,\ndelete: false },\n createdAt: new Date()\n }\n];\n\nexport async function ensureAuthCollectionsExist(db: Db): Promise<void> {\n logger.info(\"🔍 Checking MongoDB auth collections and indexes...\");\n\n try {\n // Users\n const users = db.collection(\"rebase_users\");\n await users.createIndex({ email: 1 }, { unique: true });\n\n // User Identities\n const identities = db.collection(\"rebase_user_identities\");\n await identities.createIndex({ provider: 1,\nprovider_id: 1 }, { unique: true });\n await identities.createIndex({ user_id: 1 });\n\n // User Roles (junction collection)\n const userRoles = db.collection(\"rebase_user_roles\");\n await userRoles.createIndex({ user_id: 1,\nrole_id: 1 }, { unique: true });\n await userRoles.createIndex({ user_id: 1 });\n\n // Refresh Tokens\n const refreshTokens = db.collection(\"rebase_refresh_tokens\");\n await refreshTokens.createIndex({ token_hash: 1 }, { unique: true });\n await refreshTokens.createIndex({ user_id: 1,\nuser_agent: 1,\nip_address: 1 }, { unique: true });\n await refreshTokens.createIndex({ user_id: 1 });\n\n // Password Reset Tokens\n const resetTokens = db.collection(\"rebase_password_reset_tokens\");\n await resetTokens.createIndex({ token_hash: 1 }, { unique: true });\n await resetTokens.createIndex({ user_id: 1 });\n\n // Seed roles\n await seedDefaultRoles(db);\n\n logger.info(\"✅ MongoDB Auth collections ready\");\n } catch (error) {\n logger.error(\"❌ Failed to set up MongoDB auth collections\", { error: error });\n }\n}\n\nasync function seedDefaultRoles(db: Db): Promise<void> {\n const roles = db.collection(\"rebase_roles\");\n const count = await roles.countDocuments();\n\n if (count > 0) {\n logger.info(`📋 Found ${count} existing roles`);\n return;\n }\n\n logger.info(\"🌱 Seeding default roles...\");\n\n for (const role of DEFAULT_ROLES) {\n await roles.updateOne(\n { id: role.id },\n { $setOnInsert: role },\n { upsert: true }\n );\n }\n\n logger.info(\"✅ Default roles created: admin, editor, viewer\");\n}\n"],"mappings":";;;;;AAMA,IAAM,gBAAgB;CAClB;EACI,KAAK;EACL,IAAI;EACJ,MAAM;EACN,SAAS;EACT,oBAAoB;GAAE,MAAM;GACpC,QAAQ;GACR,MAAM;GACN,QAAQ;EAAK;EACL,2BAAW,IAAI,KAAK;CACxB;CACA;EACI,KAAK;EACL,IAAI;EACJ,MAAM;EACN,SAAS;EACT,oBAAoB;GAAE,MAAM;GACpC,QAAQ;GACR,MAAM;GACN,QAAQ;EAAK;EACL,2BAAW,IAAI,KAAK;CACxB;CACA;EACI,KAAK;EACL,IAAI;EACJ,MAAM;EACN,SAAS;EACT,oBAAoB;GAAE,MAAM;GACpC,QAAQ;GACR,MAAM;GACN,QAAQ;EAAM;EACN,2BAAW,IAAI,KAAK;CACxB;AACJ;AAEA,eAAsB,2BAA2B,IAAuB;CACpE,OAAO,KAAK,qDAAqD;CAEjE,IAAI;EAGA,MADc,GAAG,WAAW,cACtB,EAAM,YAAY,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,CAAC;EAGtD,MAAM,aAAa,GAAG,WAAW,wBAAwB;EACzD,MAAM,WAAW,YAAY;GAAE,UAAU;GACjD,aAAa;EAAE,GAAG,EAAE,QAAQ,KAAK,CAAC;EAC1B,MAAM,WAAW,YAAY,EAAE,SAAS,EAAE,CAAC;EAG3C,MAAM,YAAY,GAAG,WAAW,mBAAmB;EACnD,MAAM,UAAU,YAAY;GAAE,SAAS;GAC/C,SAAS;EAAE,GAAG,EAAE,QAAQ,KAAK,CAAC;EACtB,MAAM,UAAU,YAAY,EAAE,SAAS,EAAE,CAAC;EAG1C,MAAM,gBAAgB,GAAG,WAAW,uBAAuB;EAC3D,MAAM,cAAc,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,KAAK,CAAC;EACnE,MAAM,cAAc,YAAY;GAAE,SAAS;GACnD,YAAY;GACZ,YAAY;EAAE,GAAG,EAAE,QAAQ,KAAK,CAAC;EACzB,MAAM,cAAc,YAAY,EAAE,SAAS,EAAE,CAAC;EAG9C,MAAM,cAAc,GAAG,WAAW,8BAA8B;EAChE,MAAM,YAAY,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,KAAK,CAAC;EACjE,MAAM,YAAY,YAAY,EAAE,SAAS,EAAE,CAAC;EAG5C,MAAM,iBAAiB,EAAE;EAEzB,OAAO,KAAK,kCAAkC;CAClD,SAAS,OAAO;EACZ,OAAO,MAAM,+CAA+C,EAAS,MAAM,CAAC;CAChF;AACJ;AAEA,eAAe,iBAAiB,IAAuB;CACnD,MAAM,QAAQ,GAAG,WAAW,cAAc;CAC1C,MAAM,QAAQ,MAAM,MAAM,eAAe;CAEzC,IAAI,QAAQ,GAAG;EACX,OAAO,KAAK,YAAY,MAAM,gBAAgB;EAC9C;CACJ;CAEA,OAAO,KAAK,6BAA6B;CAEzC,KAAK,MAAM,QAAQ,eACf,MAAM,MAAM,UACR,EAAE,IAAI,KAAK,GAAG,GACd,EAAE,cAAc,KAAK,GACrB,EAAE,QAAQ,KAAK,CACnB;CAGJ,OAAO,KAAK,gDAAgD;AAChE"}