@rebasepro/server-postgres 0.15.0 → 0.16.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.
- package/dist/PostgresBackendDriver.d.ts +1 -1
- package/dist/PostgresBootstrapper.d.ts +0 -11
- package/dist/auth/services.d.ts +2 -2
- package/dist/{auth-users-columns-JJ8ngvy5.js → auth-users-columns-CgyPWQ18.js} +3 -3
- package/dist/auth-users-columns-CgyPWQ18.js.map +1 -0
- package/dist/backup/backup-logic.d.ts +20 -0
- package/dist/backup/backup-service.d.ts +6 -0
- package/dist/backup/retention.d.ts +11 -0
- package/dist/{backup-service-czK-OAuG.js → backup-service-BZoixhVl.js} +56 -11
- package/dist/backup-service-BZoixhVl.js.map +1 -0
- package/dist/collections-schema-version-BMeu3cgv.js +81 -0
- package/dist/collections-schema-version-BMeu3cgv.js.map +1 -0
- package/dist/{ensure-collection-policies-D5PtQLyR.js → ensure-collection-policies-BVFb2olB.js} +4 -3
- package/dist/ensure-collection-policies-BVFb2olB.js.map +1 -0
- package/dist/{ensure-collection-tables-BHUjQ-z4.js → ensure-collection-tables-BY1pHRD_.js} +2 -2
- package/dist/{ensure-collection-tables-BHUjQ-z4.js.map → ensure-collection-tables-BY1pHRD_.js.map} +1 -1
- package/dist/index.es.js +65 -21
- package/dist/index.es.js.map +1 -1
- package/dist/{rls-enforcement-BDBfuTD4.js → rls-enforcement-Ch0T6OwW.js} +7 -7
- package/dist/rls-enforcement-Ch0T6OwW.js.map +1 -0
- package/dist/schema/collections-schema-version.d.ts +32 -0
- package/dist/security/policy-drift.d.ts +2 -2
- package/dist/security/rls-enforcement.d.ts +6 -6
- package/dist/services/realtimeService.d.ts +3 -1
- package/dist/src-BBFsDaeA.js.map +1 -1
- package/dist/websocket-BVgDVO-V.js.map +1 -1
- package/package.json +6 -6
- package/src/PostgresAdapter.ts +14 -0
- package/src/PostgresBackendDriver.ts +3 -3
- package/src/PostgresBootstrapper.ts +82 -12
- package/src/auth/services.ts +2 -2
- package/src/backup/backup-cli.ts +49 -12
- package/src/backup/backup-logic.ts +31 -0
- package/src/backup/backup-service.ts +42 -8
- package/src/backup/pg-tools.ts +12 -1
- package/src/backup/retention.ts +11 -0
- package/src/schema/collections-schema-version.ts +103 -0
- package/src/security/policy-drift.test.ts +25 -6
- package/src/security/policy-drift.ts +14 -6
- package/src/security/rls-enforcement.ts +7 -7
- package/src/services/realtimeService.ts +9 -1
- package/dist/auth-users-columns-JJ8ngvy5.js.map +0 -1
- package/dist/backup-service-czK-OAuG.js.map +0 -1
- package/dist/ensure-collection-policies-D5PtQLyR.js.map +0 -1
- package/dist/rls-enforcement-BDBfuTD4.js.map +0 -1
package/dist/index.es.js
CHANGED
|
@@ -3,11 +3,11 @@ import process from "process";
|
|
|
3
3
|
__createRequire(import.meta.url);
|
|
4
4
|
import { a as guardPoolAgainstDirtyRelease, i as createReadReplicaConnection, n as createDirectDatabaseConnection, o as pinSearchPath, r as createPostgresDatabaseConnection } from "./connection-BuZ97wsr.js";
|
|
5
5
|
import { n as resolveClientListLimit, t as ListLimitError } from "./data_driver-ULAyJEi9.js";
|
|
6
|
-
import { $ as mergeDeep, A as fieldKeyForColumn, B as parseIdValues, C as getJunctionCollectionConfig, D as policyToPostgres, E as getEffectiveSecurityRules, F as getTableVarName, G as updateDateAutoValues, H as createRelationRef, I as resolveCollectionRelations, J as legacyForeignKeyName, K as firstFreeKey, L as buildCompositeId, M as getColumnName, N as getEnumVarName, O as securityRuleToConditions, P as getTableName$1, Q as isPrototypePollutingKey, R as getDeclaredPrimaryKeys, S as resolveStringColumnLength, T as resolveJunctionSpecs, U as createRelationRefWithData, V as sortCollectionsBySlug, W as normalizeToEntityRelation, X as toWireKey, Z as getPolicyNamesForRule, _ as OrderBySpecError, at as isManyToMany, b as CollectionRegistry, et as camelCase, g as buildSdkData, h as visibleColumnProjection, it as hasForeignKeyOnTarget, j as findRelation, l as buildSearchColumnSpec, ot as Vector, q as generateForeignKeyName, r as authUsersColumnSql, s as SEARCH_UNACCENT_FN, t as AUTH_USERS_COLUMNS, tt as toSnakeCase, u as hiddenColumnsOption, v as normalizeDriverOrderBy, w as getJunctionSecurityRules, x as relationalCollections, y as parseOrderBySpecStrict, z as isAddressableId } from "./auth-users-columns-
|
|
6
|
+
import { $ as mergeDeep, A as fieldKeyForColumn, B as parseIdValues, C as getJunctionCollectionConfig, D as policyToPostgres, E as getEffectiveSecurityRules, F as getTableVarName, G as updateDateAutoValues, H as createRelationRef, I as resolveCollectionRelations, J as legacyForeignKeyName, K as firstFreeKey, L as buildCompositeId, M as getColumnName, N as getEnumVarName, O as securityRuleToConditions, P as getTableName$1, Q as isPrototypePollutingKey, R as getDeclaredPrimaryKeys, S as resolveStringColumnLength, T as resolveJunctionSpecs, U as createRelationRefWithData, V as sortCollectionsBySlug, W as normalizeToEntityRelation, X as toWireKey, Z as getPolicyNamesForRule, _ as OrderBySpecError, at as isManyToMany, b as CollectionRegistry, et as camelCase, g as buildSdkData, h as visibleColumnProjection, it as hasForeignKeyOnTarget, j as findRelation, l as buildSearchColumnSpec, ot as Vector, q as generateForeignKeyName, r as authUsersColumnSql, s as SEARCH_UNACCENT_FN, t as AUTH_USERS_COLUMNS, tt as toSnakeCase, u as hiddenColumnsOption, v as normalizeDriverOrderBy, w as getJunctionSecurityRules, x as relationalCollections, y as parseOrderBySpecStrict, z as isAddressableId } from "./auth-users-columns-CgyPWQ18.js";
|
|
7
7
|
import { c as isPostgresCollectionConfig, f as ALL_WHERE_FILTER_OPS, g as encodeRelationAggregateSort, l as isRelationalCollectionConfig, v as parseRelationAggregateSort } from "./src-BBFsDaeA.js";
|
|
8
8
|
import { t as createPostgresWebSocket } from "./websocket-BVgDVO-V.js";
|
|
9
|
-
import { a as warnOnAnonymousGrants, c as REBASE_USER_ROLE, i as validatePolicyPgRoles, l as revokeInternalTableAccess, n as detectConnectionPosture, o as warnOnLegacyRlsFunctions, r as ensureAppRole, s as warnOnRoleSchemaCollision, t as applyAuthContext, u as revokeInternalTableSql } from "./rls-enforcement-
|
|
10
|
-
import { A as
|
|
9
|
+
import { a as warnOnAnonymousGrants, c as REBASE_USER_ROLE, i as validatePolicyPgRoles, l as revokeInternalTableAccess, n as detectConnectionPosture, o as warnOnLegacyRlsFunctions, r as ensureAppRole, s as warnOnRoleSchemaCollision, t as applyAuthContext, u as revokeInternalTableSql } from "./rls-enforcement-Ch0T6OwW.js";
|
|
10
|
+
import { A as parseDbNameFromUrl, C as buildRowSecurityPgOptions, D as joinStorageKey, E as globalsFileForDump, F as withDatabaseName, M as resolveConnectionString, N as serverVersionNumToMajor, O as parseBackupDestination, P as splitGlobalsStatements, S as buildPgRestoreListArgs, T as diagnoseRowSecurityDumpFailure, _ as selectBackupsToPrune, a as detectToolMajor, b as buildPgDumpallGlobalsArgs, c as getServerVersionMajor, d as pruneBackups, f as resolvePgBinary, g as require_source, h as validateDump, i as createDump, j as parsePgToolMajor, k as parseBackupTimestamp, l as listBackups, m as uploadBackup, n as applyGlobals, o as discardPartialDump, p as restoreDump, s as ensureDatabaseExists, t as BackupToolError, u as preflight, v as buildBackupFilename, w as checkToolServerCompatibility, x as buildPgRestoreArgs, y as buildPgDumpArgs } from "./backup-service-BZoixhVl.js";
|
|
11
11
|
import { t as RLS_BOOTSTRAP_STATEMENTS } from "./rls-bootstrap-sql-B5Sajku6.js";
|
|
12
12
|
import { Client, Pool } from "pg";
|
|
13
13
|
import { drizzle } from "drizzle-orm/node-postgres";
|
|
@@ -6403,7 +6403,7 @@ var PostgresBackendDriver = class PostgresBackendDriver {
|
|
|
6403
6403
|
* PostgreSQL roles from `pg_roles` (`postgres`, `rebase_user`, …). Those
|
|
6404
6404
|
* are the roles the SQL editor can `SET ROLE` to. *These* are the strings
|
|
6405
6405
|
* held in the users table's `roles` column, injected per-transaction as
|
|
6406
|
-
* `
|
|
6406
|
+
* `rebase.roles()` and matched by `SecurityRule.roles`. Feeding the pg roles
|
|
6407
6407
|
* into a `SecurityRule.roles` field produces a condition no user can ever
|
|
6408
6408
|
* satisfy, so the two must not be conflated.
|
|
6409
6409
|
*
|
|
@@ -9898,9 +9898,10 @@ var RealtimeService = class RealtimeService extends EventEmitter {
|
|
|
9898
9898
|
* inert, no schema is created, and broadcast keeps its original
|
|
9899
9899
|
* fire-and-forget path.
|
|
9900
9900
|
*/
|
|
9901
|
-
async configureChannelHistory(rules) {
|
|
9901
|
+
async configureChannelHistory(rules, options) {
|
|
9902
9902
|
this.channelHistory = new ChannelHistoryStore(this.db, rules ?? []);
|
|
9903
9903
|
if (!this.channelHistory.enabled) return;
|
|
9904
|
+
if (options?.provision === false) return;
|
|
9904
9905
|
await this.channelHistory.ensureTables();
|
|
9905
9906
|
}
|
|
9906
9907
|
/** Whether any channel is configured to retain messages. */
|
|
@@ -10560,7 +10561,7 @@ function createBackupCron(config) {
|
|
|
10560
10561
|
enabled: config.enabled ?? true,
|
|
10561
10562
|
timeoutSeconds: 3600,
|
|
10562
10563
|
async handler({ log }) {
|
|
10563
|
-
const { createDump, pruneBackups, uploadBackup, validateDump } = await import("./backup-service-
|
|
10564
|
+
const { createDump, pruneBackups, uploadBackup, validateDump } = await import("./backup-service-BZoixhVl.js").then((n) => n.r);
|
|
10564
10565
|
const { destination } = config;
|
|
10565
10566
|
if (destination.kind !== "local" && !config.storage) throw new Error(`Backup destination is ${destination.kind} but no storage controller was provided. Pass the backend's configured StorageController to createBackupCron({ storage }).`);
|
|
10566
10567
|
log(`Starting backup of "${dbName}"…`);
|
|
@@ -11597,7 +11598,7 @@ var UserService = class {
|
|
|
11597
11598
|
* Run a privileged auth write with an explicitly cleared RLS context.
|
|
11598
11599
|
*
|
|
11599
11600
|
* The auth services run on the base/owner connection, which by design
|
|
11600
|
-
* carries a NULL `app.uid` so the `
|
|
11601
|
+
* carries a NULL `app.uid` so the `rebase.uid() IS NULL` server-escape
|
|
11601
11602
|
* in the default policies applies. That NULL is normally guaranteed by
|
|
11602
11603
|
* `set_config(..., is_local = true)` resetting at transaction end — but a
|
|
11603
11604
|
* GUC that survives on a pooled connection (or a connection role that
|
|
@@ -11605,7 +11606,7 @@ var UserService = class {
|
|
|
11605
11606
|
* turns the trusted write into an RLS-scoped one and denies it with
|
|
11606
11607
|
* SQLSTATE 42501. Clearing the GUCs here, transaction-locally at the
|
|
11607
11608
|
* single chokepoint, makes the server context deterministic instead of
|
|
11608
|
-
* trusting whatever state the pool hands us. `
|
|
11609
|
+
* trusting whatever state the pool hands us. `rebase.uid()` reads '' as
|
|
11609
11610
|
* NULL via NULLIF, so '' is the server context.
|
|
11610
11611
|
*/
|
|
11611
11612
|
async withServerContext(fn) {
|
|
@@ -13633,6 +13634,15 @@ function isScaffoldedLocalDatabase(connectionString) {
|
|
|
13633
13634
|
* });
|
|
13634
13635
|
* ```
|
|
13635
13636
|
*/
|
|
13637
|
+
/**
|
|
13638
|
+
* Where the collections schema stamp lives.
|
|
13639
|
+
*
|
|
13640
|
+
* The runtime's own internal schema, always — unlike the auth stamp, which
|
|
13641
|
+
* follows the users collection. `rebase` and `auth` sit outside
|
|
13642
|
+
* `introspectionSchema` by construction, so nothing here is ever served as a
|
|
13643
|
+
* collection.
|
|
13644
|
+
*/
|
|
13645
|
+
var SCHEMA_META_SCHEMA = "rebase";
|
|
13636
13646
|
function createPostgresBootstrapper(pgConfig) {
|
|
13637
13647
|
if (pgConfig.unknownFilterFields) configureUnknownFilterFields(pgConfig.unknownFilterFields);
|
|
13638
13648
|
/**
|
|
@@ -13651,6 +13661,17 @@ function createPostgresBootstrapper(pgConfig) {
|
|
|
13651
13661
|
* builder, not to `execute(sql.raw(...))` — and every statement these hooks
|
|
13652
13662
|
* emit is schema-qualified DDL, so neither depends on `search_path`.
|
|
13653
13663
|
*/
|
|
13664
|
+
/**
|
|
13665
|
+
* The drizzle handle itself, for the statements that want parameters.
|
|
13666
|
+
*
|
|
13667
|
+
* `provisioningQueryable` below hands back a `query(text)` shim because the
|
|
13668
|
+
* DDL it serves is built as text. The schema stamp writes a *value*, so it
|
|
13669
|
+
* wants the parameterised form — building that string by hand would be one
|
|
13670
|
+
* more place a quoted literal has to be got right for no benefit.
|
|
13671
|
+
*/
|
|
13672
|
+
const provisioningDb = (driverResult) => {
|
|
13673
|
+
return (driverResult?.internals)?.db ?? pgConfig.connection;
|
|
13674
|
+
};
|
|
13654
13675
|
const provisioningQueryable = (driverResult) => {
|
|
13655
13676
|
const db = (driverResult?.internals)?.db ?? pgConfig.connection;
|
|
13656
13677
|
if (!db) throw new Error("Cannot provision the collection schema: this Postgres adapter was created without a `connection`, and no initialized driver was supplied to fall back on. Pass `connection` to `createPostgresAdapter` (see `createPostgresDatabaseConnection`).");
|
|
@@ -13662,7 +13683,9 @@ function createPostgresBootstrapper(pgConfig) {
|
|
|
13662
13683
|
return {
|
|
13663
13684
|
type: "postgres",
|
|
13664
13685
|
async initializeDriver(config) {
|
|
13665
|
-
const { collections, collectionRegistry, introspectCollections, baas, schemaProvisioning } = config;
|
|
13686
|
+
const { collections, collectionRegistry, introspectCollections, baas, schemaProvisioning, realtime } = config;
|
|
13687
|
+
const realtimeSubscribes = realtime?.subscribe ?? true;
|
|
13688
|
+
const realtimeProvisions = realtime?.provision ?? true;
|
|
13666
13689
|
const unprotectedTables = baas?.unprotectedTables ?? "exclude";
|
|
13667
13690
|
const connection = pgConfig.connection;
|
|
13668
13691
|
const rawClient = connection && typeof connection === "object" && "$client" in connection ? connection.$client : connection;
|
|
@@ -13775,7 +13798,7 @@ function createPostgresBootstrapper(pgConfig) {
|
|
|
13775
13798
|
logger.warn("⚠️ Could not initialize branch metadata table", { error: err });
|
|
13776
13799
|
}
|
|
13777
13800
|
try {
|
|
13778
|
-
await realtimeService.configureChannelHistory(pgConfig.realtime?.channels);
|
|
13801
|
+
await realtimeService.configureChannelHistory(pgConfig.realtime?.channels, { provision: realtimeProvisions });
|
|
13779
13802
|
} catch (err) {
|
|
13780
13803
|
logger.warn("⚠️ Could not initialize channel history tables — retained channels will not replay", { error: err });
|
|
13781
13804
|
}
|
|
@@ -13800,7 +13823,7 @@ function createPostgresBootstrapper(pgConfig) {
|
|
|
13800
13823
|
logger.warn(`⚠️ [CDC] Unknown REALTIME_CDC value "${cdcMode}" — expected auto|wal|trigger|off. Defaulting to "auto".`);
|
|
13801
13824
|
cdcMode = "auto";
|
|
13802
13825
|
}
|
|
13803
|
-
const wantsCdc = cdcMode !== "off";
|
|
13826
|
+
const wantsCdc = cdcMode !== "off" && (realtimeSubscribes || realtimeProvisions);
|
|
13804
13827
|
const explicitCdc = cdcMode === "trigger" || cdcMode === "wal";
|
|
13805
13828
|
let cdcEnabled = false;
|
|
13806
13829
|
let provisionCdcForTables;
|
|
@@ -13822,19 +13845,19 @@ function createPostgresBootstrapper(pgConfig) {
|
|
|
13822
13845
|
schema: link.schema,
|
|
13823
13846
|
table: link.table
|
|
13824
13847
|
});
|
|
13825
|
-
await provisionTriggerCdc(cdcRunSql, cdcTables);
|
|
13826
|
-
await realtimeService.enableCdc(directUrl);
|
|
13848
|
+
if (realtimeProvisions) await provisionTriggerCdc(cdcRunSql, cdcTables);
|
|
13849
|
+
if (realtimeSubscribes) await realtimeService.enableCdc(directUrl);
|
|
13827
13850
|
cdcEnabled = true;
|
|
13828
|
-
provisionCdcForTables = async (tables) => {
|
|
13851
|
+
if (realtimeProvisions) provisionCdcForTables = async (tables) => {
|
|
13829
13852
|
await provisionTriggerCdc(cdcRunSql, tables);
|
|
13830
13853
|
};
|
|
13831
|
-
logger.info(`📡 [CDC] Realtime source = database-level change capture (mode: ${cdcMode === "wal" ? "wal→trigger" : "trigger"}). All writes now emit realtime events regardless of origin.`);
|
|
13854
|
+
logger.info(`📡 [CDC] Realtime source = database-level change capture (mode: ${cdcMode === "wal" ? "wal→trigger" : "trigger"}). All writes now emit realtime events regardless of origin.` + (realtimeSubscribes ? "" : " This process installs the capture but does not consume it."));
|
|
13832
13855
|
} catch (err) {
|
|
13833
13856
|
if (explicitCdc) logger.warn("⚠️ [CDC] Could not enable database-level change capture — falling back to app-level realtime.", { error: err });
|
|
13834
13857
|
else logger.info("ℹ️ [CDC] Database-level change capture unavailable (likely insufficient privileges to create triggers, or the LISTEN connection was refused) — using app-level realtime. Set REALTIME_CDC=off to silence this.", { detail: err instanceof Error ? err.message : String(err) });
|
|
13835
13858
|
}
|
|
13836
13859
|
}
|
|
13837
|
-
if (!cdcEnabled && directUrl) try {
|
|
13860
|
+
if (!cdcEnabled && directUrl && realtimeSubscribes) try {
|
|
13838
13861
|
await realtimeService.startListening(directUrl);
|
|
13839
13862
|
} catch (err) {
|
|
13840
13863
|
logger.warn("⚠️ Cross-instance realtime could not be started", { error: err });
|
|
@@ -13978,7 +14001,7 @@ function createPostgresBootstrapper(pgConfig) {
|
|
|
13978
14001
|
* proved it can bootstrap with.
|
|
13979
14002
|
*/
|
|
13980
14003
|
async ensureCollectionSchema(collections, driverResult, log) {
|
|
13981
|
-
const { ensureCollectionTables } = await import("./ensure-collection-tables-
|
|
14004
|
+
const { ensureCollectionTables } = await import("./ensure-collection-tables-BY1pHRD_.js");
|
|
13982
14005
|
const plan = await ensureCollectionTables(provisioningQueryable(driverResult), collections, log);
|
|
13983
14006
|
for (const failure of plan.failures) logger.warn(failure.kind === "comment-column" ? `🔍 [schema] Could not record the search fingerprint on "${failure.target}" — search works, but a later change to the \`search\` block will not be detected: ${failure.error}` : `🔗 [schema] Could not add foreign key "${failure.target}" — the column exists and the collection still serves, but rows are not policed by this constraint: ${failure.error}`);
|
|
13984
14007
|
return { applied: plan.actions.length - plan.failures.length };
|
|
@@ -13990,8 +14013,8 @@ function createPostgresBootstrapper(pgConfig) {
|
|
|
13990
14013
|
*
|
|
13991
14014
|
* The companion to {@link ensureCollectionSchema}: that creates the
|
|
13992
14015
|
* tables, this makes them servable. Boot runs it *after* auth
|
|
13993
|
-
* initialization, because the generated policies call `
|
|
13994
|
-
* `
|
|
14016
|
+
* initialization, because the generated policies call `rebase.uid()` /
|
|
14017
|
+
* `rebase.roles()`, and `CREATE POLICY` validates those functions exist.
|
|
13995
14018
|
*
|
|
13996
14019
|
* Runs through the same drizzle handle, one statement at a time (that
|
|
13997
14020
|
* handle speaks the extended query protocol, which rejects multi-command
|
|
@@ -13999,7 +14022,7 @@ function createPostgresBootstrapper(pgConfig) {
|
|
|
13999
14022
|
* stays RLS-enabled, so it denies rather than leaks.
|
|
14000
14023
|
*/
|
|
14001
14024
|
async ensureCollectionPolicies(collections, driverResult, log) {
|
|
14002
|
-
const { ensureCollectionPolicies } = await import("./ensure-collection-policies-
|
|
14025
|
+
const { ensureCollectionPolicies } = await import("./ensure-collection-policies-BVFb2olB.js");
|
|
14003
14026
|
const queryable = provisioningQueryable(driverResult);
|
|
14004
14027
|
const outcome = await ensureCollectionPolicies(queryable, collections, log);
|
|
14005
14028
|
for (const skip of outcome.skipped) logger.warn(`🔐 [rls] Policies not applied to "${skip.table}": ${skip.reason}`);
|
|
@@ -14018,6 +14041,25 @@ function createPostgresBootstrapper(pgConfig) {
|
|
|
14018
14041
|
}
|
|
14019
14042
|
return { applied: outcome.policiesApplied };
|
|
14020
14043
|
},
|
|
14044
|
+
/**
|
|
14045
|
+
* Read what the last provisioning boot recorded, or `null`.
|
|
14046
|
+
*
|
|
14047
|
+
* The meta schema is `rebase` rather than the auth stamp's — see
|
|
14048
|
+
* `schema/collections-schema-version.ts` for why the two can differ.
|
|
14049
|
+
*/
|
|
14050
|
+
async readCollectionsSchemaVersion(driverResult) {
|
|
14051
|
+
const db = provisioningDb(driverResult);
|
|
14052
|
+
if (!db) return null;
|
|
14053
|
+
const { readCollectionsSchemaVersion } = await import("./collections-schema-version-BMeu3cgv.js");
|
|
14054
|
+
return readCollectionsSchemaVersion(db, SCHEMA_META_SCHEMA);
|
|
14055
|
+
},
|
|
14056
|
+
/** Record what this process just applied. Only the provisioning process calls this. */
|
|
14057
|
+
async stampCollectionsSchemaVersion(version, driverResult) {
|
|
14058
|
+
const db = provisioningDb(driverResult);
|
|
14059
|
+
if (!db) return;
|
|
14060
|
+
const { stampCollectionsSchemaVersion } = await import("./collections-schema-version-BMeu3cgv.js");
|
|
14061
|
+
await stampCollectionsSchemaVersion(db, SCHEMA_META_SCHEMA, version);
|
|
14062
|
+
},
|
|
14021
14063
|
getAdmin(driverResult) {
|
|
14022
14064
|
return driverResult.internals.driver.admin;
|
|
14023
14065
|
},
|
|
@@ -14054,6 +14096,8 @@ function createPostgresAdapter(pgConfig) {
|
|
|
14054
14096
|
},
|
|
14055
14097
|
ensureCollectionSchema: bootstrapper.ensureCollectionSchema ? (collections, driverResult, log) => bootstrapper.ensureCollectionSchema(collections, driverResult, log) : void 0,
|
|
14056
14098
|
ensureCollectionPolicies: bootstrapper.ensureCollectionPolicies ? (collections, driverResult, log) => bootstrapper.ensureCollectionPolicies(collections, driverResult, log) : void 0,
|
|
14099
|
+
readCollectionsSchemaVersion: bootstrapper.readCollectionsSchemaVersion ? (driverResult) => bootstrapper.readCollectionsSchemaVersion(driverResult) : void 0,
|
|
14100
|
+
stampCollectionsSchemaVersion: bootstrapper.stampCollectionsSchemaVersion ? (version, driverResult) => bootstrapper.stampCollectionsSchemaVersion(version, driverResult) : void 0,
|
|
14057
14101
|
getAdmin(driverResult) {
|
|
14058
14102
|
if (bootstrapper.getAdmin) return bootstrapper.getAdmin(driverResult);
|
|
14059
14103
|
},
|
|
@@ -14063,6 +14107,6 @@ function createPostgresAdapter(pgConfig) {
|
|
|
14063
14107
|
};
|
|
14064
14108
|
}
|
|
14065
14109
|
//#endregion
|
|
14066
|
-
export { AuthenticatedPostgresBackendDriver, BackupToolError, BranchService, CHANNEL_BUS_NOTIFY_CHANNEL, DEFAULT_BATCH_WINDOW_MS, DatabasePoolManager, DrizzleConditionBuilder, MemoryChannelBus, PG_NOTIFY_MAX_PAYLOAD_BYTES, PostgresBackendDriver, PostgresChannelBus, PostgresCollectionRegistry, PostgresConditionBuilder, PostgresRealtimeProvider, RealtimeService, appConfig, applyGlobals, backupCronConfigFromEnv, buildBackupFilename, buildPgDumpArgs, buildPgDumpallGlobalsArgs, buildPgRestoreArgs, buildPgRestoreListArgs, buildRowSecurityPgOptions, checkToolServerCompatibility, configureUnknownFilterFields, createAuthSchema, createBackupCron, createChannelBus, createDirectDatabaseConnection, createDump, createPostgresAdapter, createPostgresBootstrapper, createPostgresDatabaseConnection, createPostgresWebSocket, createReadReplicaConnection, describeSchemaDriftCause, detectToolMajor, diagnoseRowSecurityDumpFailure, ensureDatabaseExists, escapeLikePattern, frameByteLength, generateSchema, getDrizzleColumn, getServerVersionMajor, getUnknownFilterFieldsMode, globalsFileForDump, guardPoolAgainstDirtyRelease, isChannelBusInstance, isScaffoldedLocalDatabase, joinStorageKey, listBackups, magicLinkTokens, magicLinkTokensRelations, mfaChallenges, mfaChallengesRelations, mfaFactors, mfaFactorsRelations, parseBackupDestination, parseBackupTimestamp, parseChannelBusFrame, parseChannelBusPayload, parseDbNameFromUrl, parsePgToolMajor, passwordResetTokens, passwordResetTokensRelations, pinSearchPath, preflight, pruneBackups, recoveryCodes, recoveryCodesRelations, refreshTokens, refreshTokensRelations, resolveChannelBusSetting, resolveConnectionString, resolveDriftCheckName, resolvePgBinary, restoreDump, selectBackupsToPrune, serverVersionNumToMajor, splitGlobalsStatements, uploadBackup, userIdentities, userIdentitiesRelations, users, usersRelations, usersSchema, validateDump, withDatabaseName };
|
|
14110
|
+
export { AuthenticatedPostgresBackendDriver, BackupToolError, BranchService, CHANNEL_BUS_NOTIFY_CHANNEL, DEFAULT_BATCH_WINDOW_MS, DatabasePoolManager, DrizzleConditionBuilder, MemoryChannelBus, PG_NOTIFY_MAX_PAYLOAD_BYTES, PostgresBackendDriver, PostgresChannelBus, PostgresCollectionRegistry, PostgresConditionBuilder, PostgresRealtimeProvider, RealtimeService, appConfig, applyGlobals, backupCronConfigFromEnv, buildBackupFilename, buildPgDumpArgs, buildPgDumpallGlobalsArgs, buildPgRestoreArgs, buildPgRestoreListArgs, buildRowSecurityPgOptions, checkToolServerCompatibility, configureUnknownFilterFields, createAuthSchema, createBackupCron, createChannelBus, createDirectDatabaseConnection, createDump, createPostgresAdapter, createPostgresBootstrapper, createPostgresDatabaseConnection, createPostgresWebSocket, createReadReplicaConnection, describeSchemaDriftCause, detectToolMajor, diagnoseRowSecurityDumpFailure, discardPartialDump, ensureDatabaseExists, escapeLikePattern, frameByteLength, generateSchema, getDrizzleColumn, getServerVersionMajor, getUnknownFilterFieldsMode, globalsFileForDump, guardPoolAgainstDirtyRelease, isChannelBusInstance, isScaffoldedLocalDatabase, joinStorageKey, listBackups, magicLinkTokens, magicLinkTokensRelations, mfaChallenges, mfaChallengesRelations, mfaFactors, mfaFactorsRelations, parseBackupDestination, parseBackupTimestamp, parseChannelBusFrame, parseChannelBusPayload, parseDbNameFromUrl, parsePgToolMajor, passwordResetTokens, passwordResetTokensRelations, pinSearchPath, preflight, pruneBackups, recoveryCodes, recoveryCodesRelations, refreshTokens, refreshTokensRelations, resolveChannelBusSetting, resolveConnectionString, resolveDriftCheckName, resolvePgBinary, restoreDump, selectBackupsToPrune, serverVersionNumToMajor, splitGlobalsStatements, uploadBackup, userIdentities, userIdentitiesRelations, users, usersRelations, usersSchema, validateDump, withDatabaseName };
|
|
14067
14111
|
|
|
14068
14112
|
//# sourceMappingURL=index.es.js.map
|