@lacrous/omnicloud 0.2.8 → 0.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +8 -1
- package/dist/index.cjs +44 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +24 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/server/index.js +76 -1
package/dist/cli.js
CHANGED
|
@@ -98,8 +98,14 @@ async function generate(env) {
|
|
|
98
98
|
const code = await run(process.execPath, [prismaCli(), "generate", "--schema", schemaPath], env);
|
|
99
99
|
if (code !== 0) throw new Error(`Prisma client generation failed (exit ${code}).`);
|
|
100
100
|
}
|
|
101
|
+
function openerFor(platform, url) {
|
|
102
|
+
if (platform === "darwin") return { command: "open", args: [url] };
|
|
103
|
+
if (platform === "win32")
|
|
104
|
+
return { command: "rundll32", args: ["url.dll,FileProtocolHandler", url] };
|
|
105
|
+
return { command: "xdg-open", args: [url] };
|
|
106
|
+
}
|
|
101
107
|
function openUrl(url) {
|
|
102
|
-
const opener = process.platform
|
|
108
|
+
const opener = openerFor(process.platform, url);
|
|
103
109
|
const child = spawn(opener.command, opener.args, { stdio: "ignore", detached: true });
|
|
104
110
|
child.on("error", () => {
|
|
105
111
|
process.stdout.write(`Open ${url} in your browser.
|
|
@@ -298,6 +304,7 @@ export {
|
|
|
298
304
|
buildEnvFile,
|
|
299
305
|
loadEnvFile,
|
|
300
306
|
main,
|
|
307
|
+
openerFor,
|
|
301
308
|
parseArgs,
|
|
302
309
|
parseEnvFile,
|
|
303
310
|
validateSetup
|
package/dist/index.cjs
CHANGED
|
@@ -1357,6 +1357,23 @@ async function resolveItemQuery(folders, userId, input) {
|
|
|
1357
1357
|
// ../core/src/services/auth-session-service.ts
|
|
1358
1358
|
var import_node_crypto3 = require("crypto");
|
|
1359
1359
|
|
|
1360
|
+
// ../core/src/services/version-retention.ts
|
|
1361
|
+
function versionsToPrune(versions, currentVersionId, policy, now) {
|
|
1362
|
+
const historical = versions.filter((version) => version.id !== currentVersionId).sort((a, b) => b.versionNumber - a.versionNumber);
|
|
1363
|
+
switch (policy.kind) {
|
|
1364
|
+
case "KEEP_ALL":
|
|
1365
|
+
return [];
|
|
1366
|
+
case "KEEP_LATEST_N": {
|
|
1367
|
+
const keep = Math.max(0, policy.count);
|
|
1368
|
+
return historical.slice(keep);
|
|
1369
|
+
}
|
|
1370
|
+
case "KEEP_FOR_DAYS": {
|
|
1371
|
+
const cutoff = now.getTime() - policy.days * 24 * 60 * 60 * 1e3;
|
|
1372
|
+
return historical.filter((version) => version.createdAt.getTime() < cutoff);
|
|
1373
|
+
}
|
|
1374
|
+
}
|
|
1375
|
+
}
|
|
1376
|
+
|
|
1360
1377
|
// ../core/src/services/upload-operation.ts
|
|
1361
1378
|
function isValidOperationId(id) {
|
|
1362
1379
|
return /^[A-Za-z0-9_-]{8,64}$/.test(id);
|
|
@@ -1945,6 +1962,33 @@ var FileService = class {
|
|
|
1945
1962
|
};
|
|
1946
1963
|
}
|
|
1947
1964
|
// ── internals ────────────────────────────────────────────────────────────
|
|
1965
|
+
/**
|
|
1966
|
+
* Removes historical versions the policy no longer keeps. For each version the
|
|
1967
|
+
* Telegram message is deleted first, and its row only after that succeeds, the
|
|
1968
|
+
* same order as a permanent delete. A failed remote delete leaves that version
|
|
1969
|
+
* in place. The current version is never removed. Returns how many were removed.
|
|
1970
|
+
*/
|
|
1971
|
+
async pruneVersions(userId, fileId, policy, now = /* @__PURE__ */ new Date()) {
|
|
1972
|
+
const record = await this.get(userId, fileId);
|
|
1973
|
+
const versions = await this.files.listVersions(fileId);
|
|
1974
|
+
const doomed = versionsToPrune(versions, record.currentVersionId ?? null, policy, now);
|
|
1975
|
+
if (doomed.length === 0) return 0;
|
|
1976
|
+
const engine = await this.engineFor(userId);
|
|
1977
|
+
let removed = 0;
|
|
1978
|
+
for (const version of doomed) {
|
|
1979
|
+
await engine.remove({ messageId: String(version.telegramMessageId) });
|
|
1980
|
+
await this.files.deleteVersion(version.id);
|
|
1981
|
+
removed += 1;
|
|
1982
|
+
}
|
|
1983
|
+
await this.activity.record({
|
|
1984
|
+
userId,
|
|
1985
|
+
action: "delete",
|
|
1986
|
+
resourceType: "file",
|
|
1987
|
+
resourceId: fileId,
|
|
1988
|
+
resourceName: `${record.name} (${removed} old version${removed === 1 ? "" : "s"})`
|
|
1989
|
+
});
|
|
1990
|
+
return removed;
|
|
1991
|
+
}
|
|
1948
1992
|
async assertFolder(userId, folderId) {
|
|
1949
1993
|
const folder = await this.folders.findById(folderId);
|
|
1950
1994
|
if (!folder || folder.userId !== userId) {
|