UNPKG

@sekiban/postgres

Version:

PostgreSQL storage provider for Sekiban Event Sourcing framework

42 lines (41 loc) 2.06 kB
"use strict"; 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); }