@rebasepro/server-postgres 0.9.1-canary.c0d4c07 → 0.9.1-canary.d198c11

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 (37) hide show
  1. package/dist/PostgresBootstrapper.d.ts +0 -10
  2. package/dist/auth/services.d.ts +0 -16
  3. package/dist/connection.d.ts +0 -21
  4. package/dist/data-transformer.d.ts +2 -9
  5. package/dist/index.es.js +318 -619
  6. package/dist/index.es.js.map +1 -1
  7. package/dist/schema/doctor.d.ts +1 -1
  8. package/dist/security/policy-drift.d.ts +0 -30
  9. package/dist/services/FetchService.d.ts +32 -4
  10. package/dist/services/RelationService.d.ts +1 -34
  11. package/dist/services/collection-helpers.d.ts +0 -76
  12. package/dist/services/index.d.ts +1 -1
  13. package/dist/services/realtimeService.d.ts +0 -7
  14. package/package.json +7 -11
  15. package/src/PostgresBackendDriver.ts +11 -39
  16. package/src/PostgresBootstrapper.ts +25 -62
  17. package/src/auth/ensure-tables.ts +11 -73
  18. package/src/auth/services.ts +19 -49
  19. package/src/cli.ts +0 -60
  20. package/src/connection.ts +1 -61
  21. package/src/data-transformer.ts +9 -11
  22. package/src/databasePoolManager.ts +0 -2
  23. package/src/schema/doctor.ts +20 -45
  24. package/src/schema/introspect-db.ts +2 -19
  25. package/src/security/policy-drift.test.ts +1 -106
  26. package/src/security/policy-drift.ts +0 -56
  27. package/src/services/FetchService.ts +229 -50
  28. package/src/services/PersistService.ts +2 -9
  29. package/src/services/RelationService.ts +94 -153
  30. package/src/services/collection-helpers.ts +3 -166
  31. package/src/services/index.ts +0 -1
  32. package/src/services/realtimeService.ts +19 -40
  33. package/src/utils/drizzle-conditions.ts +0 -13
  34. package/dist/collections/buildRegistry.d.ts +0 -27
  35. package/dist/services/row-pipeline.d.ts +0 -63
  36. package/src/collections/buildRegistry.ts +0 -59
  37. package/src/services/row-pipeline.ts +0 -239
@@ -9,7 +9,6 @@ import { PostgresBackendDriver } from "./PostgresBackendDriver";
9
9
  import { RealtimeService } from "./services/realtimeService";
10
10
  import { DatabasePoolManager } from "./databasePoolManager";
11
11
  import { PostgresCollectionRegistry } from "./collections/PostgresCollectionRegistry";
12
- import { type CdcTableRef } from "./services/cdc/trigger-cdc";
13
12
  export interface PostgresDriverConfig {
14
13
  connectionString?: string;
15
14
  adminConnectionString?: string;
@@ -37,15 +36,6 @@ export interface PostgresDriverInternals {
37
36
  realtimeService: RealtimeService;
38
37
  driver: PostgresBackendDriver;
39
38
  poolManager?: DatabasePoolManager;
40
- /**
41
- * Attach CDC triggers to tables that did not exist when the driver
42
- * bootstrapped. Only set when database-level capture is actually active.
43
- *
44
- * Auth owns its own tables and creates them later in boot, so at driver
45
- * bootstrap they are legitimately missing and get skipped; without this
46
- * they would stay uninstrumented until the next restart.
47
- */
48
- provisionCdcForTables?: (tables: CdcTableRef[]) => Promise<void>;
49
39
  }
50
40
  /**
51
41
  * Default PostgreSQL bootstrapper.
@@ -19,22 +19,6 @@ export declare class UserService implements UserRepository {
19
19
  private userIdentitiesTable;
20
20
  constructor(db: NodePgDatabase, tableOrTables?: RebasePgTable | Partial<AuthSchemaTables>);
21
21
  private getQualifiedUsersTableName;
22
- /**
23
- * Run a privileged auth write with an explicitly cleared RLS context.
24
- *
25
- * The auth services run on the base/owner connection, which by design
26
- * carries a NULL `app.user_id` so the `auth.uid() IS NULL` server-escape
27
- * in the default policies applies. That NULL is normally guaranteed by
28
- * `set_config(..., is_local = true)` resetting at transaction end — but a
29
- * GUC that survives on a pooled connection (or a connection role that
30
- * doesn't bypass RLS: FORCE ROW LEVEL SECURITY, or a non-owner role)
31
- * turns the trusted write into an RLS-scoped one and denies it with
32
- * SQLSTATE 42501. Clearing the GUCs here, transaction-locally at the
33
- * single chokepoint, makes the server context deterministic instead of
34
- * trusting whatever state the pool hands us. `auth.uid()` reads '' as
35
- * NULL via NULLIF, so '' is the server context.
36
- */
37
- private withServerContext;
38
22
  private mapRowToUser;
39
23
  private mapPayload;
40
24
  createUser(data: CreateUserData): Promise<UserData>;
@@ -19,27 +19,6 @@ export interface PostgresPoolConfig {
19
19
  /** Enable TCP keep-alive (default: true) */
20
20
  keepAlive?: boolean;
21
21
  }
22
- /**
23
- * Destroy pool clients that are released while still inside a transaction.
24
- *
25
- * pg-pool returns a client to the idle list whenever `release()` is called
26
- * without an error — even if the connection is still mid-transaction (status
27
- * `T`/`E`). That happens in practice: drizzle's pool transaction releases in
28
- * a `finally` after attempting ROLLBACK, and if the ROLLBACK itself fails
29
- * (e.g. it was queued behind a statement that hit the client-side
30
- * query_timeout), the client goes back dirty. The next checkout then runs
31
- * its statements inside the zombie transaction — with the previous request's
32
- * `app.*` RLS GUCs still applied, which turns unrelated queries into
33
- * RLS-scoped ones (observed in production as registration failing with
34
- * SQLSTATE 42501 under a leaked anonymous context).
35
- *
36
- * pg-pool emits `release` before it consults its private `_expired` set, so
37
- * marking the client expired here makes `_release()` destroy it instead of
38
- * pooling it. Both `client._txStatus` (pg ≥ 8.16) and `pool._expired` are
39
- * private APIs — feature-detect and fall back to loud logging so an upstream
40
- * change degrades to observability, never to silent corruption.
41
- */
42
- export declare function guardPoolAgainstDirtyRelease(pool: Pool, label: string): void;
43
22
  /**
44
23
  * Create a Drizzle-backed Postgres connection with a production-grade
45
24
  * connection pool.
@@ -12,19 +12,12 @@ import { PostgresCollectionRegistry } from "./collections/PostgresCollectionRegi
12
12
  export interface SerializedEntityData {
13
13
  /** Scalar column values ready for INSERT/UPDATE. */
14
14
  scalarData: Record<string, unknown>;
15
- /**
16
- * Inverse relation updates that must be applied to target tables.
17
- *
18
- * No address here: the row being written does not know its own. These are
19
- * applied by `PersistService`, which addresses them with the id it holds —
20
- * the one it was given for an update, or the one the INSERT returned — and
21
- * that is the authority. This item used to carry a `currentId` derived from
22
- * the *input* values, which nothing ever read.
23
- */
15
+ /** Inverse relation updates that must be applied to target tables. */
24
16
  inverseRelationUpdates: Array<{
25
17
  relationKey: string;
26
18
  relation: Relation;
27
19
  newValue: unknown;
20
+ currentId?: string | number;
28
21
  }>;
29
22
  /** JoinPath relation updates that require multi-hop writes. */
30
23
  joinPathRelationUpdates: Array<{