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;
}