Jofthomas's picture
Jofthomas HF staff
Upload 4781 files
5c2ed06 verified
"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var database_exports = {};
__export(database_exports, {
onDatabaseStart: () => onDatabaseStart,
statements: () => statements,
transactions: () => transactions
});
module.exports = __toCommonJS(database_exports);
var import_lib = require("../../lib");
var import__ = require(".");
const statements = {
send: "INSERT INTO offline_pms (sender, receiver, message, time) VALUES (?, ?, ?, ?)",
clear: "DELETE FROM offline_pms WHERE receiver = ?",
fetch: "SELECT * FROM offline_pms WHERE receiver = ?",
fetchNew: "SELECT * FROM offline_pms WHERE receiver = ? AND seen IS NULL",
clearDated: "DELETE FROM offline_pms WHERE ? - time >= ?",
checkSentCount: "SELECT count(*) as count FROM offline_pms WHERE sender = ? AND receiver = ?",
setSeen: "UPDATE offline_pms SET seen = ? WHERE receiver = ? AND seen IS NULL",
clearSeen: "DELETE FROM offline_pms WHERE ? - seen >= ?",
getSettings: "SELECT * FROM pm_settings WHERE userid = ?",
setBlock: "REPLACE INTO pm_settings (userid, view_only) VALUES (?, ?)",
deleteSettings: "DELETE FROM pm_settings WHERE userid = ?"
};
class StatementMap {
constructor(env) {
this.env = env;
}
run(name, args) {
return this.getStatement(name).run(args);
}
all(name, args) {
return this.getStatement(name).all(args);
}
get(name, args) {
return this.getStatement(name).get(args);
}
getStatement(name) {
const source = statements[name];
return this.env.statements.get(source);
}
}
const transactions = {
send: (args, env) => {
const statementList = new StatementMap(env);
const [sender, receiver, message] = args;
const count = statementList.get("checkSentCount", [sender, receiver])?.count;
if (count && count > import__.MAX_PENDING) {
return { error: `You have already sent the maximum ${import__.MAX_PENDING} offline PMs to that user.` };
}
return statementList.run("send", [sender, receiver, message, Date.now()]);
},
listNew: (args, env) => {
const list = new StatementMap(env);
const [receiver] = args;
const pms = list.all("fetchNew", [receiver]);
list.run("setSeen", [Date.now(), receiver]);
return pms;
}
};
function onDatabaseStart(database) {
let version;
try {
version = database.prepare("SELECT * FROM db_info").get().version;
} catch {
const schemaContent = (0, import_lib.FS)("databases/schemas/pms.sql").readSync();
database.exec(schemaContent);
}
const migrations = (0, import_lib.FS)("databases/migrations/pms").readdirIfExistsSync();
if (version !== migrations.length) {
for (const migration of migrations) {
const num = /(\d+)\.sql$/.exec(migration)?.[1];
if (!num || version >= num)
continue;
database.exec("BEGIN TRANSACTION");
try {
database.exec((0, import_lib.FS)(`databases/migrations/pms/${migration}`).readSync());
} catch (e) {
console.log(`Error in PM migration ${migration} - ${e.message}`);
console.log(e.stack);
database.exec("ROLLBACK");
continue;
}
database.exec("COMMIT");
}
}
}
//# sourceMappingURL=database.js.map