@hasna/mementos 0.14.66 → 0.14.68
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/README.md +14 -5
- package/dist/cli/brains.d.ts.map +1 -1
- package/dist/cli/commands/agent.d.ts.map +1 -1
- package/dist/cli/commands/storage.d.ts.map +1 -1
- package/dist/cli/commands/system-auto-memory.d.ts.map +1 -1
- package/dist/cli/commands/system-completions.d.ts +10 -0
- package/dist/cli/commands/system-completions.d.ts.map +1 -1
- package/dist/cli/commands/system-hooks.d.ts.map +1 -1
- package/dist/cli/commands/system-misc.d.ts.map +1 -1
- package/dist/cli/commands/system-profile.d.ts.map +1 -1
- package/dist/cli/commands/system-session.d.ts.map +1 -1
- package/dist/cli/commands/system-synthesis.d.ts.map +1 -1
- package/dist/cli/index.js +1187 -2029
- package/dist/db/analytics.d.ts.map +1 -1
- package/dist/db/pg-migrate.d.ts +13 -0
- package/dist/db/pg-migrate.d.ts.map +1 -1
- package/dist/index.js +943 -1740
- package/dist/lib/storage-sync.d.ts +2 -1
- package/dist/lib/storage-sync.d.ts.map +1 -1
- package/dist/mcp/index.js +1042 -1735
- package/dist/mcp/tools/storage-tools.d.ts.map +1 -1
- package/dist/mcp/tools/system-tools-events.d.ts.map +1 -1
- package/dist/server/index.js +823 -1735
- package/dist/storage.d.ts +73 -0
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +214 -14
- package/package.json +1 -1
package/dist/storage.d.ts
CHANGED
|
@@ -153,15 +153,80 @@ export interface StorageEnvStatus {
|
|
|
153
153
|
active_name: string;
|
|
154
154
|
configured: boolean;
|
|
155
155
|
}
|
|
156
|
+
export type StorageRuntimeKind = "local-sqlite" | "cloud-postgres";
|
|
157
|
+
export interface StorageRuntimeContract {
|
|
158
|
+
contract: "mementos-cloud-runtime-v1";
|
|
159
|
+
kind: StorageRuntimeKind;
|
|
160
|
+
fail_closed: boolean;
|
|
161
|
+
local: {
|
|
162
|
+
adapter: "sqlite";
|
|
163
|
+
primary_runtime: boolean;
|
|
164
|
+
data_dir: string;
|
|
165
|
+
config_path: string;
|
|
166
|
+
local_file_sync: {
|
|
167
|
+
supported: false;
|
|
168
|
+
reason: string;
|
|
169
|
+
};
|
|
170
|
+
};
|
|
171
|
+
remote: {
|
|
172
|
+
adapter: "postgres";
|
|
173
|
+
purpose: "primary-runtime";
|
|
174
|
+
requested: boolean;
|
|
175
|
+
configured: boolean;
|
|
176
|
+
source: "env" | "config-file" | "none";
|
|
177
|
+
env_name: string | null;
|
|
178
|
+
redacted_url: string | null;
|
|
179
|
+
rds_compatible: boolean;
|
|
180
|
+
fail_closed: boolean;
|
|
181
|
+
missing: string[];
|
|
182
|
+
};
|
|
183
|
+
object_storage: {
|
|
184
|
+
s3: {
|
|
185
|
+
supported: false;
|
|
186
|
+
mutation_allowed: false;
|
|
187
|
+
reason: string;
|
|
188
|
+
};
|
|
189
|
+
aws: {
|
|
190
|
+
mutation_allowed: false;
|
|
191
|
+
reason: string;
|
|
192
|
+
};
|
|
193
|
+
};
|
|
194
|
+
migrations: {
|
|
195
|
+
target: "postgres-rds-compatible";
|
|
196
|
+
command: "mementos storage migrate";
|
|
197
|
+
dry_run_command: "mementos storage migrate --dry-run";
|
|
198
|
+
configured: boolean;
|
|
199
|
+
mutates_remote_on_apply: true;
|
|
200
|
+
requires_approval_for_live_run: true;
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
export interface SafeStorageConfigSummary {
|
|
204
|
+
mode: StorageMode;
|
|
205
|
+
auto_sync_interval_minutes: number;
|
|
206
|
+
feedback_endpoint_configured: boolean;
|
|
207
|
+
sync: StorageConfig["sync"];
|
|
208
|
+
rds: {
|
|
209
|
+
host_configured: boolean;
|
|
210
|
+
port: number;
|
|
211
|
+
username_configured: boolean;
|
|
212
|
+
password_env: string;
|
|
213
|
+
password_configured: boolean;
|
|
214
|
+
ssl: boolean;
|
|
215
|
+
};
|
|
216
|
+
}
|
|
156
217
|
export interface NativeStorageStatus {
|
|
157
218
|
ok: boolean;
|
|
158
219
|
service: "mementos";
|
|
159
220
|
mode: StorageMode;
|
|
160
221
|
local_default: boolean;
|
|
161
222
|
remote_enabled: boolean;
|
|
223
|
+
runtime: StorageRuntimeContract;
|
|
162
224
|
database: {
|
|
163
225
|
configured: boolean;
|
|
164
226
|
redacted_url: string | null;
|
|
227
|
+
source: "env" | "config-file" | "none";
|
|
228
|
+
env_name: string | null;
|
|
229
|
+
rds_compatible: boolean;
|
|
165
230
|
};
|
|
166
231
|
tables: readonly MementosStorageTable[];
|
|
167
232
|
env: {
|
|
@@ -179,6 +244,14 @@ export declare function getStorageDatabaseUrl(): string | null;
|
|
|
179
244
|
export declare function getStorageDatabaseEnvName(): string;
|
|
180
245
|
export declare function getStorageConfig(): StorageConfig;
|
|
181
246
|
export declare function getStorageMode(): StorageMode;
|
|
247
|
+
export declare function redactDatabaseUrl(value: string | null): string | null;
|
|
248
|
+
export interface PostgresConnectionStringValidation {
|
|
249
|
+
ok: boolean;
|
|
250
|
+
redacted_url: string | null;
|
|
251
|
+
issues: string[];
|
|
252
|
+
}
|
|
253
|
+
export declare function validatePostgresConnectionString(value: string | null): PostgresConnectionStringValidation;
|
|
254
|
+
export declare function getSafeStorageConfigSummary(config?: StorageConfig): SafeStorageConfigSummary;
|
|
182
255
|
export declare function getStorageStatus(): NativeStorageStatus;
|
|
183
256
|
export declare const getMementosStorageStatus: typeof getStorageStatus;
|
|
184
257
|
export declare function saveStorageConfig(config: StorageConfig): void;
|
package/dist/storage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
package/dist/storage.js
CHANGED
|
@@ -391,8 +391,67 @@ function getStorageConfig() {
|
|
|
391
391
|
function getStorageMode() {
|
|
392
392
|
return getStorageConfig().mode;
|
|
393
393
|
}
|
|
394
|
+
function isSecretQueryParam(key) {
|
|
395
|
+
const normalized = key.trim().toLowerCase();
|
|
396
|
+
return SECRET_QUERY_PARAMS.has(normalized) || /(?:secret|token|password|passphrase|credential|api[_-]?key|apikey|private[_-]?key|auth|session)/i.test(normalized);
|
|
397
|
+
}
|
|
394
398
|
function redactDatabaseUrl(value) {
|
|
395
|
-
|
|
399
|
+
if (!value) {
|
|
400
|
+
return null;
|
|
401
|
+
}
|
|
402
|
+
try {
|
|
403
|
+
const url = new URL(value);
|
|
404
|
+
if (url.password) {
|
|
405
|
+
url.password = "***";
|
|
406
|
+
}
|
|
407
|
+
for (const key of Array.from(url.searchParams.keys())) {
|
|
408
|
+
if (isSecretQueryParam(key)) {
|
|
409
|
+
url.searchParams.set(key, "***");
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
return url.toString();
|
|
413
|
+
} catch {
|
|
414
|
+
return value.replace(/:[^:@/\s]+@/, ":***@").replace(/([?&\s][^=&\s]*(?:secret|token|password|passphrase|credential|api[_-]?key|apikey|private[_-]?key|auth|session)[^=&\s]*=)[^&\s]+/gi, "$1***");
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
function validatePostgresConnectionString(value) {
|
|
418
|
+
const redactedUrl = redactDatabaseUrl(value);
|
|
419
|
+
if (!value) {
|
|
420
|
+
return {
|
|
421
|
+
ok: false,
|
|
422
|
+
redacted_url: redactedUrl,
|
|
423
|
+
issues: ["Missing PostgreSQL/RDS connection string."]
|
|
424
|
+
};
|
|
425
|
+
}
|
|
426
|
+
let url;
|
|
427
|
+
try {
|
|
428
|
+
url = new URL(value);
|
|
429
|
+
} catch {
|
|
430
|
+
return {
|
|
431
|
+
ok: false,
|
|
432
|
+
redacted_url: redactedUrl,
|
|
433
|
+
issues: ["PostgreSQL/RDS connection string must be a valid postgres:// or postgresql:// URL."]
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
if (url.protocol !== "postgres:" && url.protocol !== "postgresql:") {
|
|
437
|
+
return {
|
|
438
|
+
ok: false,
|
|
439
|
+
redacted_url: redactedUrl,
|
|
440
|
+
issues: ["PostgreSQL/RDS connection string must use postgres:// or postgresql://."]
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
if (!url.hostname) {
|
|
444
|
+
return {
|
|
445
|
+
ok: false,
|
|
446
|
+
redacted_url: redactedUrl,
|
|
447
|
+
issues: ["PostgreSQL/RDS connection string must include a host."]
|
|
448
|
+
};
|
|
449
|
+
}
|
|
450
|
+
return {
|
|
451
|
+
ok: true,
|
|
452
|
+
redacted_url: redactedUrl,
|
|
453
|
+
issues: []
|
|
454
|
+
};
|
|
396
455
|
}
|
|
397
456
|
function storageEnvStatus(key) {
|
|
398
457
|
const activeName = getStorageEnvName(key);
|
|
@@ -402,22 +461,139 @@ function storageEnvStatus(key) {
|
|
|
402
461
|
configured: readEnv(activeName) !== null
|
|
403
462
|
};
|
|
404
463
|
}
|
|
464
|
+
function remoteDatabaseConfigStatus(config) {
|
|
465
|
+
const env = getStorageDatabaseEnv();
|
|
466
|
+
const envUrl = env ? readEnv(env.name) : null;
|
|
467
|
+
if (env && envUrl) {
|
|
468
|
+
const validation = validatePostgresConnectionString(envUrl);
|
|
469
|
+
return {
|
|
470
|
+
configured: validation.ok,
|
|
471
|
+
source: "env",
|
|
472
|
+
env_name: env.name,
|
|
473
|
+
redacted_url: validation.redacted_url,
|
|
474
|
+
missing: [],
|
|
475
|
+
issues: validation.issues,
|
|
476
|
+
rds_compatible: validation.ok
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
const missing = [];
|
|
480
|
+
if (!config.rds.host) {
|
|
481
|
+
missing.push("storage.rds.host");
|
|
482
|
+
}
|
|
483
|
+
if (!config.rds.username) {
|
|
484
|
+
missing.push("storage.rds.username");
|
|
485
|
+
}
|
|
486
|
+
if (!readEnv(config.rds.password_env)) {
|
|
487
|
+
missing.push(config.rds.password_env);
|
|
488
|
+
}
|
|
489
|
+
const configured = missing.length === 0;
|
|
490
|
+
const redactedUrl = configured ? `postgres://${config.rds.username}:***@${config.rds.host}:${config.rds.port}/mementos${config.rds.ssl ? "?sslmode=require" : ""}` : null;
|
|
491
|
+
const issues = missing.length === 0 ? [] : [`Missing ${missing.join(", ")}.`];
|
|
492
|
+
return {
|
|
493
|
+
configured,
|
|
494
|
+
source: config.rds.host || config.rds.username ? "config-file" : "none",
|
|
495
|
+
env_name: null,
|
|
496
|
+
redacted_url: redactedUrl,
|
|
497
|
+
missing,
|
|
498
|
+
issues,
|
|
499
|
+
rds_compatible: configured
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
function runtimeKindFor(mode) {
|
|
503
|
+
return mode === "cloud" ? "cloud-postgres" : "local-sqlite";
|
|
504
|
+
}
|
|
505
|
+
function getSafeStorageConfigSummary(config = getStorageConfig()) {
|
|
506
|
+
return {
|
|
507
|
+
mode: config.mode,
|
|
508
|
+
auto_sync_interval_minutes: config.auto_sync_interval_minutes,
|
|
509
|
+
feedback_endpoint_configured: config.feedback_endpoint.trim() !== "",
|
|
510
|
+
sync: { ...config.sync },
|
|
511
|
+
rds: {
|
|
512
|
+
host_configured: config.rds.host.trim() !== "",
|
|
513
|
+
port: config.rds.port,
|
|
514
|
+
username_configured: config.rds.username.trim() !== "",
|
|
515
|
+
password_env: config.rds.password_env,
|
|
516
|
+
password_configured: readEnv(config.rds.password_env) !== null,
|
|
517
|
+
ssl: config.rds.ssl
|
|
518
|
+
}
|
|
519
|
+
};
|
|
520
|
+
}
|
|
405
521
|
function getStorageStatus() {
|
|
406
|
-
const
|
|
407
|
-
const
|
|
522
|
+
const config = getStorageConfig();
|
|
523
|
+
const mode = config.mode;
|
|
524
|
+
const remoteRequested = mode === "cloud";
|
|
525
|
+
const remote = remoteDatabaseConfigStatus(config);
|
|
408
526
|
const issues = [];
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
527
|
+
const warnings = [];
|
|
528
|
+
if (remoteRequested && !remote.configured) {
|
|
529
|
+
issues.push(`Cloud PostgreSQL/RDS storage is requested but not configured. ${remote.issues.join(" ")}`);
|
|
530
|
+
}
|
|
531
|
+
if (mode === "local" && remote.issues.length > 0 && remote.source !== "none") {
|
|
532
|
+
warnings.push(`Cloud PostgreSQL/RDS configuration is present but invalid; cloud runtime stays disabled until fixed. ${remote.issues.join(" ")}`);
|
|
533
|
+
}
|
|
534
|
+
if (mode === "local" && remote.configured) {
|
|
535
|
+
warnings.push("Cloud PostgreSQL/RDS configuration is present, but storage mode is local; cloud runtime stays disabled until mode is cloud.");
|
|
536
|
+
}
|
|
537
|
+
const failClosed = remoteRequested && !remote.configured;
|
|
538
|
+
const runtime = {
|
|
539
|
+
contract: "mementos-cloud-runtime-v1",
|
|
540
|
+
kind: runtimeKindFor(mode),
|
|
541
|
+
fail_closed: failClosed,
|
|
542
|
+
local: {
|
|
543
|
+
adapter: "sqlite",
|
|
544
|
+
primary_runtime: mode === "local",
|
|
545
|
+
data_dir: LOCAL_DATA_DIR,
|
|
546
|
+
config_path: STORAGE_CONFIG_PATH,
|
|
547
|
+
local_file_sync: {
|
|
548
|
+
supported: false,
|
|
549
|
+
reason: "Mementos stores local state in SQLite; it does not sync raw local data files."
|
|
550
|
+
}
|
|
551
|
+
},
|
|
552
|
+
remote: {
|
|
553
|
+
adapter: "postgres",
|
|
554
|
+
purpose: "primary-runtime",
|
|
555
|
+
requested: remoteRequested,
|
|
556
|
+
configured: remote.configured,
|
|
557
|
+
source: remote.source,
|
|
558
|
+
env_name: remote.env_name,
|
|
559
|
+
redacted_url: remote.redacted_url,
|
|
560
|
+
rds_compatible: remote.rds_compatible,
|
|
561
|
+
fail_closed: failClosed,
|
|
562
|
+
missing: remote.missing
|
|
563
|
+
},
|
|
564
|
+
object_storage: {
|
|
565
|
+
s3: {
|
|
566
|
+
supported: false,
|
|
567
|
+
mutation_allowed: false,
|
|
568
|
+
reason: "No S3 object-storage adapter is part of this runtime."
|
|
569
|
+
},
|
|
570
|
+
aws: {
|
|
571
|
+
mutation_allowed: false,
|
|
572
|
+
reason: "Diagnostics do not store sensitive values, change AWS resources, deploy, or mutate production data."
|
|
573
|
+
}
|
|
574
|
+
},
|
|
575
|
+
migrations: {
|
|
576
|
+
target: "postgres-rds-compatible",
|
|
577
|
+
command: "mementos storage migrate",
|
|
578
|
+
dry_run_command: "mementos storage migrate --dry-run",
|
|
579
|
+
configured: remote.configured,
|
|
580
|
+
mutates_remote_on_apply: true,
|
|
581
|
+
requires_approval_for_live_run: true
|
|
582
|
+
}
|
|
583
|
+
};
|
|
412
584
|
return {
|
|
413
585
|
ok: issues.length === 0,
|
|
414
586
|
service: "mementos",
|
|
415
587
|
mode,
|
|
416
588
|
local_default: mode === "local",
|
|
417
|
-
remote_enabled:
|
|
589
|
+
remote_enabled: remoteRequested,
|
|
590
|
+
runtime,
|
|
418
591
|
database: {
|
|
419
|
-
configured:
|
|
420
|
-
redacted_url:
|
|
592
|
+
configured: remote.configured,
|
|
593
|
+
redacted_url: remote.redacted_url,
|
|
594
|
+
source: remote.source,
|
|
595
|
+
env_name: remote.env_name,
|
|
596
|
+
rds_compatible: remote.rds_compatible
|
|
421
597
|
},
|
|
422
598
|
tables: MEMENTOS_STORAGE_TABLES,
|
|
423
599
|
env: {
|
|
@@ -425,7 +601,7 @@ function getStorageStatus() {
|
|
|
425
601
|
mode: storageEnvStatus("mode")
|
|
426
602
|
},
|
|
427
603
|
issues,
|
|
428
|
-
warnings
|
|
604
|
+
warnings,
|
|
429
605
|
no_network: true
|
|
430
606
|
};
|
|
431
607
|
}
|
|
@@ -443,12 +619,23 @@ function getStorageConnectionString(dbName = "mementos") {
|
|
|
443
619
|
}
|
|
444
620
|
const envConnectionString = getConfiguredConnectionString();
|
|
445
621
|
if (envConnectionString) {
|
|
622
|
+
const validation = validatePostgresConnectionString(envConnectionString);
|
|
623
|
+
if (!validation.ok) {
|
|
624
|
+
throw new Error(`Remote storage database is not configured. ${validation.issues.join(" ")}`);
|
|
625
|
+
}
|
|
446
626
|
return envConnectionString;
|
|
447
627
|
}
|
|
448
628
|
const config = getStorageConfig();
|
|
449
629
|
const { host, port, username, password_env, ssl } = config.rds;
|
|
450
|
-
|
|
451
|
-
|
|
630
|
+
const missing = [];
|
|
631
|
+
if (!host) {
|
|
632
|
+
missing.push("storage.rds.host");
|
|
633
|
+
}
|
|
634
|
+
if (!username) {
|
|
635
|
+
missing.push("storage.rds.username");
|
|
636
|
+
}
|
|
637
|
+
if (missing.length > 0) {
|
|
638
|
+
throw new Error(`Remote storage database is not configured. Missing ${missing.join(", ")}. Set HASNA_MEMENTOS_DATABASE_URL or configure ~/.hasna/mementos/storage/config.json.`);
|
|
452
639
|
}
|
|
453
640
|
const password = process.env[password_env];
|
|
454
641
|
if (!password) {
|
|
@@ -599,7 +786,7 @@ function resetAllSyncMeta(db) {
|
|
|
599
786
|
ensureSyncMetaTable(db);
|
|
600
787
|
db.run("DELETE FROM _sync_meta");
|
|
601
788
|
}
|
|
602
|
-
var _serverContext = false, PgSyncPool, MEMENTOS_STORAGE_TABLES, STORAGE_TABLES, MEMENTOS_STORAGE_ENV, MEMENTOS_STORAGE_FALLBACK_ENV, DEFAULT_STORAGE_CONFIG, STORAGE_CONFIG_DIR, STORAGE_CONFIG_PATH, DATABASE_ENV_NAMES, MODE_ENV_NAMES, warnedDeprecatedModes, getMementosStorageStatus, SYNC_EXCLUDED_TABLE_PATTERNS, SYNC_META_TABLE_SQL = `
|
|
789
|
+
var _serverContext = false, PgSyncPool, MEMENTOS_STORAGE_TABLES, STORAGE_TABLES, MEMENTOS_STORAGE_ENV, MEMENTOS_STORAGE_FALLBACK_ENV, LOCAL_DATA_DIR, DEFAULT_STORAGE_CONFIG, STORAGE_CONFIG_DIR, STORAGE_CONFIG_PATH, DATABASE_ENV_NAMES, MODE_ENV_NAMES, warnedDeprecatedModes, SECRET_QUERY_PARAMS, getMementosStorageStatus, SYNC_EXCLUDED_TABLE_PATTERNS, SYNC_META_TABLE_SQL = `
|
|
603
790
|
CREATE TABLE IF NOT EXISTS _sync_meta (
|
|
604
791
|
table_name TEXT PRIMARY KEY,
|
|
605
792
|
last_synced_at TEXT,
|
|
@@ -700,6 +887,7 @@ var init_storage = __esm(() => {
|
|
|
700
887
|
databaseUrl: "MEMENTOS_DATABASE_URL",
|
|
701
888
|
mode: "MEMENTOS_STORAGE_MODE"
|
|
702
889
|
};
|
|
890
|
+
LOCAL_DATA_DIR = join(homedir(), ".hasna", "mementos");
|
|
703
891
|
DEFAULT_STORAGE_CONFIG = {
|
|
704
892
|
rds: {
|
|
705
893
|
host: "",
|
|
@@ -715,7 +903,7 @@ var init_storage = __esm(() => {
|
|
|
715
903
|
schedule_minutes: 0
|
|
716
904
|
}
|
|
717
905
|
};
|
|
718
|
-
STORAGE_CONFIG_DIR = join(
|
|
906
|
+
STORAGE_CONFIG_DIR = join(LOCAL_DATA_DIR, "storage");
|
|
719
907
|
STORAGE_CONFIG_PATH = join(STORAGE_CONFIG_DIR, "config.json");
|
|
720
908
|
DATABASE_ENV_NAMES = [
|
|
721
909
|
{ name: MEMENTOS_STORAGE_ENV.databaseUrl, deprecated: false },
|
|
@@ -726,6 +914,15 @@ var init_storage = __esm(() => {
|
|
|
726
914
|
{ name: MEMENTOS_STORAGE_FALLBACK_ENV.mode, deprecated: false }
|
|
727
915
|
];
|
|
728
916
|
warnedDeprecatedModes = new Set;
|
|
917
|
+
SECRET_QUERY_PARAMS = new Set([
|
|
918
|
+
"password",
|
|
919
|
+
"pass",
|
|
920
|
+
"pwd",
|
|
921
|
+
"token",
|
|
922
|
+
"secret",
|
|
923
|
+
"api_key",
|
|
924
|
+
"apikey"
|
|
925
|
+
]);
|
|
729
926
|
getMementosStorageStatus = getStorageStatus;
|
|
730
927
|
SYNC_EXCLUDED_TABLE_PATTERNS = [
|
|
731
928
|
/^sqlite_/,
|
|
@@ -738,11 +935,13 @@ var init_storage = __esm(() => {
|
|
|
738
935
|
init_storage();
|
|
739
936
|
|
|
740
937
|
export {
|
|
938
|
+
validatePostgresConnectionString,
|
|
741
939
|
translateSql,
|
|
742
940
|
shouldUsePgSsl,
|
|
743
941
|
saveStorageConfig,
|
|
744
942
|
resetSyncMeta,
|
|
745
943
|
resetAllSyncMeta,
|
|
944
|
+
redactDatabaseUrl,
|
|
746
945
|
markServerContext,
|
|
747
946
|
makePool,
|
|
748
947
|
listSqliteTables,
|
|
@@ -759,6 +958,7 @@ export {
|
|
|
759
958
|
getStorageDatabaseEnv,
|
|
760
959
|
getStorageConnectionString,
|
|
761
960
|
getStorageConfig,
|
|
961
|
+
getSafeStorageConfigSummary,
|
|
762
962
|
getMementosStorageStatus,
|
|
763
963
|
getConfigPath,
|
|
764
964
|
getConfigDir,
|