@sekiban/postgres
Version:
PostgreSQL storage provider for Sekiban Event Sourcing framework
42 lines (41 loc) • 2.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createPostgresEventStore = createPostgresEventStore;
const pg_1 = require("pg");
const neverthrow_1 = require("neverthrow");
const core_1 = require("@sekiban/core");
const postgres_event_store_1 = require("./postgres-event-store");
/**
* Creates a PostgreSQL event store
*/
function createPostgresEventStore(config) {
if (!config.connectionString) {
return (0, neverthrow_1.errAsync)(new core_1.StorageError('Connection string is required for PostgreSQL provider', 'INVALID_CONFIG'));
}
return neverthrow_1.ResultAsync.fromPromise((async () => {
try {
// Create PostgreSQL pool
const pool = new pg_1.Pool({
connectionString: config.connectionString,
max: 10, // Maximum number of clients in the pool
idleTimeoutMillis: 30000, // How long a client is allowed to remain idle
connectionTimeoutMillis: config.timeoutMs || 2000
});
// Test the connection
const client = await pool.connect();
client.release();
// Create event store
const eventStore = new postgres_event_store_1.PostgresEventStore(pool);
// Initialize the event store
await eventStore.initialize();
return eventStore;
}
catch (error) {
throw new core_1.ConnectionError(`Failed to create PostgreSQL event store: ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
}
})(), (error) => error instanceof core_1.StorageError ? error : new core_1.ConnectionError(`Failed to create PostgreSQL event store: ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined));
}
// Register the PostgreSQL provider with the factory
if (typeof core_1.EventStoreFactory !== 'undefined') {
core_1.EventStoreFactory.register('PostgreSQL', createPostgresEventStore);
}