import * as couchbase from "couchbase"; const COUCHBASE_USER = process.env.COUCHBASE_USER; const COUCHBASE_PASSWORD = process.env.COUCHBASE_PASSWORD; const COUCHBASE_ENDPOINT = process.env.COUCHBASE_ENDPOINT || "localhost"; const COUCHBASE_BUCKET = process.env.COUCHBASE_BUCKET || "travel-sample"; let IS_CLOUD_INSTANCE = process.env.IS_CLOUD_INSTANCE || "false"; if (!COUCHBASE_USER) { throw new Error( "Please define the COUCHBASE_USER environment variable inside .env.local", ); } if (!COUCHBASE_PASSWORD) { throw new Error( "Please define the COUCHBASE_PASSWORD environment variable inside .env.local", ); } /** * Global is used here to maintain a cached connection across hot reloads * in development. This prevents connections growing exponentially * during API Route usage. */ let cached = global.couchbase; if (!cached) { cached = global.couchbase = { conn: null }; } async function createCouchbaseCluster() { if (cached.conn) { return cached.conn; } cached.conn = await couchbase.connect( "couchbase://" + COUCHBASE_ENDPOINT + (IS_CLOUD_INSTANCE === "true" ? "?ssl=no_verify&console_log_level=5" : ""), { username: COUCHBASE_USER, password: COUCHBASE_PASSWORD, }, ); return cached.conn; } export async function connectToDatabase() { const cluster = await createCouchbaseCluster(); const bucket = cluster.bucket(COUCHBASE_BUCKET); const collection = bucket.defaultCollection(); let dbConnection = { cluster, bucket, collection, }; return dbConnection; }