diff --git a/app/server.ts b/app/server.ts index 95d3d9dc..34364053 100644 --- a/app/server.ts +++ b/app/server.ts @@ -1,4 +1,4 @@ -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { shutdown } from "./server/modules/lifecycle/shutdown"; import { runCLI } from "./server/cli"; import { createStartHandler, defaultStreamHandler, defineHandlerCallback } from "@tanstack/react-start/server"; diff --git a/app/server/app.ts b/app/server/app.ts index c294c236..4431e9fe 100644 --- a/app/server/app.ts +++ b/app/server/app.ts @@ -16,7 +16,7 @@ import { backupScheduleController } from "./modules/backups/backups.controller"; import { eventsController } from "./modules/events/events.controller"; import { notificationsController } from "./modules/notifications/notifications.controller"; import { handleServiceError } from "./utils/errors"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { config } from "./core/config"; import { auth } from "~/server/lib/auth"; import { db } from "./db/db"; diff --git a/app/server/core/__tests__/scheduler.test.ts b/app/server/core/__tests__/scheduler.test.ts index 025216f4..f503a022 100644 --- a/app/server/core/__tests__/scheduler.test.ts +++ b/app/server/core/__tests__/scheduler.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, mock, spyOn, test, vi } from "bun:test"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { Job, Scheduler } from "../scheduler"; const flushMicrotasks = async () => { diff --git a/app/server/core/capabilities.ts b/app/server/core/capabilities.ts index c567f1ca..ec1afc94 100644 --- a/app/server/core/capabilities.ts +++ b/app/server/core/capabilities.ts @@ -1,6 +1,6 @@ import * as fs from "node:fs/promises"; import { RCLONE_CONFIG_DIR } from "./constants"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; export type SystemCapabilities = { rclone: boolean; diff --git a/app/server/core/repository-mutex.ts b/app/server/core/repository-mutex.ts index a406364b..2dee5779 100644 --- a/app/server/core/repository-mutex.ts +++ b/app/server/core/repository-mutex.ts @@ -1,4 +1,4 @@ -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; export type LockType = "shared" | "exclusive"; diff --git a/app/server/core/restic.ts b/app/server/core/restic.ts index f1a66e24..79f621d6 100644 --- a/app/server/core/restic.ts +++ b/app/server/core/restic.ts @@ -1,5 +1,7 @@ -import { createRestic, type ResticDeps } from "@zerobyte/core/restic"; +import { createRestic } from "@zerobyte/core/restic/server"; +import type { ResticDeps } from "@zerobyte/core/restic"; import { DEFAULT_EXCLUDES, RESTIC_CACHE_DIR, RESTIC_PASS_FILE } from "./constants"; +import { config } from "./config"; import { cryptoUtils } from "../utils/crypto"; import { db } from "../db/db"; @@ -24,6 +26,7 @@ export const resticDeps: ResticDeps = { resticCacheDir: RESTIC_CACHE_DIR, resticPassFile: RESTIC_PASS_FILE, defaultExcludes: DEFAULT_EXCLUDES, + hostname: config.resticHostname, }; export const restic = createRestic(resticDeps); diff --git a/app/server/core/scheduler.ts b/app/server/core/scheduler.ts index 951dc3b2..756785a0 100644 --- a/app/server/core/scheduler.ts +++ b/app/server/core/scheduler.ts @@ -1,5 +1,5 @@ import CronExpressionParser from "cron-parser"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; export abstract class Job { abstract run(): Promise; diff --git a/app/server/jobs/auto-remount.ts b/app/server/jobs/auto-remount.ts index 02dcc1a4..758d0c70 100644 --- a/app/server/jobs/auto-remount.ts +++ b/app/server/jobs/auto-remount.ts @@ -1,6 +1,6 @@ import { Job } from "../core/scheduler"; import { volumeService } from "../modules/volumes/volume.service"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { db } from "../db/db"; import { withContext } from "../core/request-context"; diff --git a/app/server/jobs/backup-execution.ts b/app/server/jobs/backup-execution.ts index 66811c28..ff72bd08 100644 --- a/app/server/jobs/backup-execution.ts +++ b/app/server/jobs/backup-execution.ts @@ -1,6 +1,6 @@ import { Job } from "../core/scheduler"; import { backupsExecutionService } from "../modules/backups/backups.execution"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { db } from "../db/db"; import { withContext } from "../core/request-context"; diff --git a/app/server/jobs/cleanup-dangling.ts b/app/server/jobs/cleanup-dangling.ts index dda1e644..b89ba0bd 100644 --- a/app/server/jobs/cleanup-dangling.ts +++ b/app/server/jobs/cleanup-dangling.ts @@ -4,7 +4,7 @@ import fs from "node:fs/promises"; import { volumeService } from "../modules/volumes/volume.service"; import { readMountInfo } from "../utils/mountinfo"; import { getVolumePath } from "../modules/volumes/helpers"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { executeUnmount } from "../modules/backends/utils/backend-utils"; import { toMessage } from "../utils/errors"; import { VOLUME_MOUNT_BASE } from "../core/constants"; diff --git a/app/server/jobs/healthchecks.ts b/app/server/jobs/healthchecks.ts index 6b3c3b32..f119d520 100644 --- a/app/server/jobs/healthchecks.ts +++ b/app/server/jobs/healthchecks.ts @@ -1,6 +1,6 @@ import { Job } from "../core/scheduler"; import { volumeService } from "../modules/volumes/volume.service"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { db } from "../db/db"; import { withContext } from "../core/request-context"; diff --git a/app/server/jobs/repository-healthchecks.ts b/app/server/jobs/repository-healthchecks.ts index 949737fd..7cf1d88d 100644 --- a/app/server/jobs/repository-healthchecks.ts +++ b/app/server/jobs/repository-healthchecks.ts @@ -1,6 +1,6 @@ import { Job } from "../core/scheduler"; import { repositoriesService } from "../modules/repositories/repositories.service"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { db } from "../db/db"; import { withContext } from "../core/request-context"; diff --git a/app/server/lib/auth.ts b/app/server/lib/auth.ts index dcdbc7dd..0e8549d4 100644 --- a/app/server/lib/auth.ts +++ b/app/server/lib/auth.ts @@ -12,7 +12,7 @@ import { createAuthMiddleware } from "better-auth/api"; import { config } from "../core/config"; import { db } from "../db/db"; import { cryptoUtils } from "../utils/crypto"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { authService } from "../modules/auth/auth.service"; import { tanstackStartCookies } from "better-auth/tanstack-start"; import { isValidUsername, normalizeUsername } from "~/lib/username"; diff --git a/app/server/lib/auth/helpers/create-default-org.ts b/app/server/lib/auth/helpers/create-default-org.ts index cd4e5dad..3ca4ebf7 100644 --- a/app/server/lib/auth/helpers/create-default-org.ts +++ b/app/server/lib/auth/helpers/create-default-org.ts @@ -2,7 +2,7 @@ import { UnauthorizedError } from "http-errors-enhanced"; import { db } from "~/server/db/db"; import { member, organization, type User } from "~/server/db/schema"; import { cryptoUtils } from "~/server/utils/crypto"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; export async function findMembershipWithOrganization(userId: string, organizationId?: string) { const membership = await db.query.member.findFirst({ diff --git a/app/server/lib/auth/middlewares/only-one-user.ts b/app/server/lib/auth/middlewares/only-one-user.ts index b6ec7adb..92b31d29 100644 --- a/app/server/lib/auth/middlewares/only-one-user.ts +++ b/app/server/lib/auth/middlewares/only-one-user.ts @@ -1,6 +1,6 @@ import { db } from "~/server/db/db"; import type { AuthMiddlewareContext } from "~/server/lib/auth"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { ForbiddenError } from "http-errors-enhanced"; import { REGISTRATION_ENABLED_KEY } from "~/server/core/constants"; diff --git a/app/server/modules/backends/directory/directory-backend.ts b/app/server/modules/backends/directory/directory-backend.ts index 5314ca4d..8fa02ccf 100644 --- a/app/server/modules/backends/directory/directory-backend.ts +++ b/app/server/modules/backends/directory/directory-backend.ts @@ -1,6 +1,6 @@ import * as fs from "node:fs/promises"; import { toMessage } from "../../../utils/errors"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import type { VolumeBackend } from "../backend"; import { BACKEND_STATUS, type BackendConfig } from "~/schemas/volumes"; diff --git a/app/server/modules/backends/nfs/nfs-backend.ts b/app/server/modules/backends/nfs/nfs-backend.ts index e5fa6b4e..98ba3956 100644 --- a/app/server/modules/backends/nfs/nfs-backend.ts +++ b/app/server/modules/backends/nfs/nfs-backend.ts @@ -3,7 +3,7 @@ import * as os from "node:os"; import { BACKEND_STATUS, type BackendConfig } from "~/schemas/volumes"; import { OPERATION_TIMEOUT } from "../../../core/constants"; import { toMessage } from "../../../utils/errors"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { getMountForPath } from "../../../utils/mountinfo"; import { withTimeout } from "../../../utils/timeout"; import type { VolumeBackend } from "../backend"; diff --git a/app/server/modules/backends/rclone/rclone-backend.ts b/app/server/modules/backends/rclone/rclone-backend.ts index a1d28e8a..73735d51 100644 --- a/app/server/modules/backends/rclone/rclone-backend.ts +++ b/app/server/modules/backends/rclone/rclone-backend.ts @@ -2,13 +2,13 @@ import * as fs from "node:fs/promises"; import * as os from "node:os"; import { OPERATION_TIMEOUT } from "../../../core/constants"; import { toMessage } from "../../../utils/errors"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { getMountForPath } from "../../../utils/mountinfo"; import { withTimeout } from "../../../utils/timeout"; import type { VolumeBackend } from "../backend"; import { executeUnmount } from "../utils/backend-utils"; import { BACKEND_STATUS, type BackendConfig } from "~/schemas/volumes"; -import { safeExec } from "@zerobyte/core/utils"; +import { safeExec } from "@zerobyte/core/node"; import { config as zbConfig } from "~/server/core/config"; const mount = async (config: BackendConfig, path: string) => { diff --git a/app/server/modules/backends/sftp/sftp-backend.ts b/app/server/modules/backends/sftp/sftp-backend.ts index 479d5ab4..25ebf7b5 100644 --- a/app/server/modules/backends/sftp/sftp-backend.ts +++ b/app/server/modules/backends/sftp/sftp-backend.ts @@ -5,7 +5,7 @@ import { spawn } from "node:child_process"; import { OPERATION_TIMEOUT } from "../../../core/constants"; import { cryptoUtils } from "../../../utils/crypto"; import { toMessage } from "../../../utils/errors"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { getMountForPath } from "../../../utils/mountinfo"; import { withTimeout } from "../../../utils/timeout"; import type { VolumeBackend } from "../backend"; diff --git a/app/server/modules/backends/smb/smb-backend.ts b/app/server/modules/backends/smb/smb-backend.ts index 23a839c8..05e5ae60 100644 --- a/app/server/modules/backends/smb/smb-backend.ts +++ b/app/server/modules/backends/smb/smb-backend.ts @@ -3,7 +3,7 @@ import * as os from "node:os"; import { OPERATION_TIMEOUT } from "../../../core/constants"; import { cryptoUtils } from "../../../utils/crypto"; import { toMessage } from "../../../utils/errors"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { getMountForPath } from "../../../utils/mountinfo"; import { withTimeout } from "../../../utils/timeout"; import type { VolumeBackend } from "../backend"; diff --git a/app/server/modules/backends/utils/backend-utils.ts b/app/server/modules/backends/utils/backend-utils.ts index c7b624d3..d0f85cc1 100644 --- a/app/server/modules/backends/utils/backend-utils.ts +++ b/app/server/modules/backends/utils/backend-utils.ts @@ -1,8 +1,8 @@ import * as fs from "node:fs/promises"; import * as npath from "node:path"; import { toMessage } from "../../../utils/errors"; -import { logger } from "@zerobyte/core/utils"; -import { safeExec } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; +import { safeExec } from "@zerobyte/core/node"; export const executeMount = async (args: string[]): Promise => { const shouldBeVerbose = process.env.LOG_LEVEL === "debug" || process.env.NODE_ENV !== "production"; diff --git a/app/server/modules/backends/webdav/webdav-backend.ts b/app/server/modules/backends/webdav/webdav-backend.ts index 8b2da4f3..15f8c4c9 100644 --- a/app/server/modules/backends/webdav/webdav-backend.ts +++ b/app/server/modules/backends/webdav/webdav-backend.ts @@ -3,7 +3,7 @@ import * as os from "node:os"; import { OPERATION_TIMEOUT } from "../../../core/constants"; import { cryptoUtils } from "../../../utils/crypto"; import { toMessage } from "../../../utils/errors"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { getMountForPath } from "../../../utils/mountinfo"; import { withTimeout } from "../../../utils/timeout"; import type { VolumeBackend } from "../backend"; diff --git a/app/server/modules/backups/__tests__/backups.execution.test.ts b/app/server/modules/backups/__tests__/backups.execution.test.ts index 8da3625f..fb563469 100644 --- a/app/server/modules/backups/__tests__/backups.execution.test.ts +++ b/app/server/modules/backups/__tests__/backups.execution.test.ts @@ -9,7 +9,7 @@ import { createTestBackupScheduleMirror } from "~/test/helpers/backup-mirror"; import { generateBackupOutput } from "~/test/helpers/restic"; import { TEST_ORG_ID } from "~/test/helpers/organization"; import * as context from "~/server/core/request-context"; -import * as spawnModule from "@zerobyte/core/utils"; +import * as spawnModule from "@zerobyte/core/node"; import { restic } from "~/server/core/restic"; import { NotFoundError, BadRequestError } from "http-errors-enhanced"; import { scheduleQueries } from "../backups.queries"; diff --git a/app/server/modules/backups/__tests__/backups.service.test.ts b/app/server/modules/backups/__tests__/backups.service.test.ts index e72ff694..41c5a3af 100644 --- a/app/server/modules/backups/__tests__/backups.service.test.ts +++ b/app/server/modules/backups/__tests__/backups.service.test.ts @@ -7,7 +7,7 @@ import { createTestBackupSchedule } from "~/test/helpers/backup"; import { createTestRepository } from "~/test/helpers/repository"; import { generateBackupOutput } from "~/test/helpers/restic"; import { faker } from "@faker-js/faker"; -import * as spawnModule from "@zerobyte/core/utils"; +import * as spawnModule from "@zerobyte/core/node"; import { db } from "~/server/db/db"; import { backupScheduleMirrorsTable, repositoriesTable, volumesTable } from "~/server/db/schema"; import { TEST_ORG_ID } from "~/test/helpers/organization"; diff --git a/app/server/modules/backups/backup.helpers.ts b/app/server/modules/backups/backup.helpers.ts index 9b8e4126..edf99ac3 100644 --- a/app/server/modules/backups/backup.helpers.ts +++ b/app/server/modules/backups/backup.helpers.ts @@ -2,7 +2,7 @@ import CronExpressionParser from "cron-parser"; import path from "node:path"; import type { BackupSchedule } from "~/server/db/schema"; import { toMessage } from "~/server/utils/errors"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; export const calculateNextRun = (cronExpression: string) => { try { diff --git a/app/server/modules/backups/backups.controller.ts b/app/server/modules/backups/backups.controller.ts index ef48582a..2b349ba0 100644 --- a/app/server/modules/backups/backups.controller.ts +++ b/app/server/modules/backups/backups.controller.ts @@ -45,7 +45,7 @@ import { import { notificationsService } from "../notifications/notifications.service"; import { requireAuth } from "../auth/auth.middleware"; import { backupsExecutionService } from "./backups.execution"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { asShortId } from "~/server/utils/branded"; export const backupScheduleController = new Hono() diff --git a/app/server/modules/backups/backups.execution.ts b/app/server/modules/backups/backups.execution.ts index d4591d75..e9389334 100644 --- a/app/server/modules/backups/backups.execution.ts +++ b/app/server/modules/backups/backups.execution.ts @@ -1,7 +1,7 @@ import { NotFoundError, BadRequestError, ConflictError } from "http-errors-enhanced"; import type { BackupSchedule, Volume, Repository } from "../../db/schema"; import { restic } from "../../core/restic"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { cache, cacheKeys } from "../../utils/cache"; import { getVolumePath } from "../volumes/helpers"; import { toMessage } from "../../utils/errors"; diff --git a/app/server/modules/backups/backups.service.ts b/app/server/modules/backups/backups.service.ts index 7eac3052..45beec01 100644 --- a/app/server/modules/backups/backups.service.ts +++ b/app/server/modules/backups/backups.service.ts @@ -19,7 +19,7 @@ import { generateShortId } from "~/server/utils/id"; import { getOrganizationId } from "~/server/core/request-context"; import { calculateNextRun } from "./backup.helpers"; import { asShortId, type ShortId } from "~/server/utils/branded"; -import { validateCustomResticParams } from "@zerobyte/core/restic"; +import { validateCustomResticParams } from "@zerobyte/core/restic/server"; const listSchedules = async () => { const organizationId = getOrganizationId(); diff --git a/app/server/modules/events/events.controller.ts b/app/server/modules/events/events.controller.ts index 14e3f368..9bf395be 100644 --- a/app/server/modules/events/events.controller.ts +++ b/app/server/modules/events/events.controller.ts @@ -1,7 +1,7 @@ import { Hono } from "hono"; import { streamSSE } from "hono/streaming"; import { serverEvents } from "../../core/events"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { requireAuth } from "../auth/auth.middleware"; import type { ServerEventPayloadMap } from "~/schemas/server-events"; diff --git a/app/server/modules/lifecycle/migrations.ts b/app/server/modules/lifecycle/migrations.ts index 9cfb5283..9064b8ab 100644 --- a/app/server/modules/lifecycle/migrations.ts +++ b/app/server/modules/lifecycle/migrations.ts @@ -1,4 +1,4 @@ -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { v00001 } from "./migrations/00001-retag-snapshots"; import { v00002 } from "./migrations/00002-isolate-restic-passwords"; import { v00003 } from "./migrations/00003-assign-organization"; diff --git a/app/server/modules/lifecycle/migrations/00001-retag-snapshots.ts b/app/server/modules/lifecycle/migrations/00001-retag-snapshots.ts index 2407f32a..46afc38f 100644 --- a/app/server/modules/lifecycle/migrations/00001-retag-snapshots.ts +++ b/app/server/modules/lifecycle/migrations/00001-retag-snapshots.ts @@ -1,10 +1,10 @@ import { eq } from "drizzle-orm"; import { db } from "../../../db/db"; import { backupScheduleMirrorsTable, type Repository } from "../../../db/schema"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { toMessage } from "~/server/utils/errors"; -import { safeExec } from "@zerobyte/core/utils"; -import { addCommonArgs, buildEnv, buildRepoUrl, cleanupTemporaryKeys } from "@zerobyte/core/restic"; +import { safeExec } from "@zerobyte/core/node"; +import { addCommonArgs, buildEnv, buildRepoUrl, cleanupTemporaryKeys } from "@zerobyte/core/restic/server"; import { resticDeps } from "~/server/core/restic"; const migrateTag = async ( diff --git a/app/server/modules/lifecycle/migrations/00002-isolate-restic-passwords.ts b/app/server/modules/lifecycle/migrations/00002-isolate-restic-passwords.ts index 94b8568e..742c34e2 100644 --- a/app/server/modules/lifecycle/migrations/00002-isolate-restic-passwords.ts +++ b/app/server/modules/lifecycle/migrations/00002-isolate-restic-passwords.ts @@ -9,7 +9,7 @@ import { notificationDestinationsTable, twoFactor, } from "../../../db/schema"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { toMessage } from "~/server/utils/errors"; import { cryptoUtils } from "~/server/utils/crypto"; import type { RepositoryConfig } from "@zerobyte/core/restic"; diff --git a/app/server/modules/lifecycle/migrations/00003-assign-organization.ts b/app/server/modules/lifecycle/migrations/00003-assign-organization.ts index f89b19ed..70cd470f 100644 --- a/app/server/modules/lifecycle/migrations/00003-assign-organization.ts +++ b/app/server/modules/lifecycle/migrations/00003-assign-organization.ts @@ -1,6 +1,6 @@ import { db } from "../../../db/db"; import { member } from "../../../db/schema"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { toMessage } from "~/server/utils/errors"; const execute = async () => { diff --git a/app/server/modules/lifecycle/migrations/00004-concat-path-name.ts b/app/server/modules/lifecycle/migrations/00004-concat-path-name.ts index 7dd01827..1c17bcc3 100644 --- a/app/server/modules/lifecycle/migrations/00004-concat-path-name.ts +++ b/app/server/modules/lifecycle/migrations/00004-concat-path-name.ts @@ -1,7 +1,7 @@ import { and, eq } from "drizzle-orm"; import { db } from "../../../db/db"; import { repositoriesTable } from "../../../db/schema"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { toMessage } from "~/server/utils/errors"; import { REPOSITORY_BASE } from "~/server/core/constants"; import { repositoryConfigSchema } from "@zerobyte/core/restic"; diff --git a/app/server/modules/lifecycle/shutdown.ts b/app/server/modules/lifecycle/shutdown.ts index 0bfb19d2..3bb76073 100644 --- a/app/server/modules/lifecycle/shutdown.ts +++ b/app/server/modules/lifecycle/shutdown.ts @@ -1,6 +1,6 @@ import { Scheduler } from "../../core/scheduler"; import { db } from "../../db/db"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { createVolumeBackend } from "../backends/backend"; export const shutdown = async () => { diff --git a/app/server/modules/lifecycle/startup.ts b/app/server/modules/lifecycle/startup.ts index 641d6993..507a0db0 100644 --- a/app/server/modules/lifecycle/startup.ts +++ b/app/server/modules/lifecycle/startup.ts @@ -2,7 +2,7 @@ import { Scheduler } from "../../core/scheduler"; import { eq } from "drizzle-orm"; import { db } from "../../db/db"; import { backupSchedulesTable } from "../../db/schema"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { volumeService } from "../volumes/volume.service"; import { CleanupDanglingMountsJob } from "../../jobs/cleanup-dangling"; import { VolumeHealthCheckJob } from "../../jobs/healthchecks"; diff --git a/app/server/modules/notifications/notifications.service.ts b/app/server/modules/notifications/notifications.service.ts index d85d3c3e..b085472e 100644 --- a/app/server/modules/notifications/notifications.service.ts +++ b/app/server/modules/notifications/notifications.service.ts @@ -7,7 +7,7 @@ import { type NotificationDestination, } from "../../db/schema"; import { cryptoUtils } from "../../utils/crypto"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { sendNotification } from "../../utils/shoutrrr"; import { formatDuration } from "~/utils/utils"; import { buildShoutrrrUrl } from "./builders"; diff --git a/app/server/modules/repositories/__tests__/repositories.service.test.ts b/app/server/modules/repositories/__tests__/repositories.service.test.ts index 08e8218d..cf0d67ff 100644 --- a/app/server/modules/repositories/__tests__/repositories.service.test.ts +++ b/app/server/modules/repositories/__tests__/repositories.service.test.ts @@ -12,7 +12,7 @@ import { restic } from "~/server/core/restic"; import { createTestSession } from "~/test/helpers/auth"; import { createTestBackupSchedule } from "~/test/helpers/backup"; import { cache, cacheKeys } from "~/server/utils/cache"; -import { ResticError } from "@zerobyte/core/restic"; +import { ResticError } from "@zerobyte/core/restic/server"; import { repositoriesService } from "../repositories.service"; const createTestRepository = async (organizationId: string) => { diff --git a/app/server/modules/repositories/helpers/doctor.ts b/app/server/modules/repositories/helpers/doctor.ts index 8da9b8cf..c3659dac 100644 --- a/app/server/modules/repositories/helpers/doctor.ts +++ b/app/server/modules/repositories/helpers/doctor.ts @@ -5,7 +5,7 @@ import { getOrganizationId } from "~/server/core/request-context"; import { restic } from "~/server/core/restic"; import { toMessage } from "~/server/utils/errors"; import { safeJsonParse } from "@zerobyte/core/utils"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { db } from "~/server/db/db"; import { repositoriesTable } from "~/server/db/schema"; import { repoMutex } from "~/server/core/repository-mutex"; diff --git a/app/server/modules/repositories/repositories.service.ts b/app/server/modules/repositories/repositories.service.ts index 2e741bc3..5e701f8f 100644 --- a/app/server/modules/repositories/repositories.service.ts +++ b/app/server/modules/repositories/repositories.service.ts @@ -12,7 +12,7 @@ import { import { config as appConfig } from "~/server/core/config"; import { serverEvents } from "~/server/core/events"; import { getOrganizationId } from "~/server/core/request-context"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { parseRetentionCategories, type RetentionCategory } from "~/server/utils/retention-categories"; import { repoMutex } from "../../core/repository-mutex"; import { db } from "../../db/db"; @@ -21,9 +21,9 @@ import { cache, cacheKeys } from "../../utils/cache"; import { cryptoUtils } from "../../utils/crypto"; import { toMessage } from "../../utils/errors"; import { generateShortId } from "../../utils/id"; -import { addCommonArgs, buildEnv, buildRepoUrl, cleanupTemporaryKeys } from "@zerobyte/core/restic"; +import { addCommonArgs, buildEnv, buildRepoUrl, cleanupTemporaryKeys } from "@zerobyte/core/restic/server"; import { restic, resticDeps } from "../../core/restic"; -import { safeSpawn } from "@zerobyte/core/utils"; +import { safeSpawn } from "@zerobyte/core/node"; import { backupsService } from "../backups/backups.service"; import type { DumpPathKind, UpdateRepositoryBody } from "./repositories.dto"; import { findCommonAncestor } from "@zerobyte/core/utils"; diff --git a/app/server/modules/sso/middlewares/require-invitation.ts b/app/server/modules/sso/middlewares/require-invitation.ts index b1437b81..853daeee 100644 --- a/app/server/modules/sso/middlewares/require-invitation.ts +++ b/app/server/modules/sso/middlewares/require-invitation.ts @@ -1,6 +1,6 @@ import { APIError } from "better-auth/api"; import type { GenericEndpointContext } from "better-auth"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { extractProviderIdFromContext } from "~/server/modules/sso/utils/sso-context"; import { ssoService } from "~/server/modules/sso/sso.service"; diff --git a/app/server/modules/sso/sso.integration.ts b/app/server/modules/sso/sso.integration.ts index c5732f61..b871e575 100644 --- a/app/server/modules/sso/sso.integration.ts +++ b/app/server/modules/sso/sso.integration.ts @@ -13,7 +13,7 @@ import { requireSsoInvitation } from "./middlewares/require-invitation"; import { resolveTrustedProvidersForRequest } from "./middlewares/trust-provider-for-linking"; import { isSsoCallbackRequest, extractProviderIdFromContext, normalizeEmail } from "./utils/sso-context"; import { findMembershipWithOrganization } from "~/server/lib/auth/helpers/create-default-org"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; async function resolveOrgMembership(userId: string, ctx: GenericEndpointContext | null) { const user = await db.query.usersTable.findFirst({ where: { id: userId } }); diff --git a/app/server/modules/system/system.service.ts b/app/server/modules/system/system.service.ts index db06c771..d591f303 100644 --- a/app/server/modules/system/system.service.ts +++ b/app/server/modules/system/system.service.ts @@ -3,7 +3,7 @@ import { config } from "../../core/config"; import type { UpdateInfoDto } from "./system.dto"; import semver from "semver"; import { cache, cacheKeys } from "../../utils/cache"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { db } from "../../db/db"; import { appMetadataTable } from "../../db/schema"; import { REGISTRATION_ENABLED_KEY } from "~/server/core/constants"; diff --git a/app/server/modules/volumes/volume.service.ts b/app/server/modules/volumes/volume.service.ts index 41ce7631..dfd64777 100644 --- a/app/server/modules/volumes/volume.service.ts +++ b/app/server/modules/volumes/volume.service.ts @@ -13,7 +13,7 @@ import { withTimeout } from "../../utils/timeout"; import { createVolumeBackend } from "../backends/backend"; import type { UpdateVolumeBody } from "./volume.dto"; import { getVolumePath } from "./helpers"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { serverEvents } from "../../core/events"; import { volumeConfigSchema, type BackendConfig } from "~/schemas/volumes"; import { getOrganizationId } from "~/server/core/request-context"; diff --git a/app/server/plugins/bootstrap.ts b/app/server/plugins/bootstrap.ts index 4c1c0822..4dbc7c9e 100644 --- a/app/server/plugins/bootstrap.ts +++ b/app/server/plugins/bootstrap.ts @@ -1,6 +1,6 @@ import { definePlugin } from "nitro"; import { bootstrapApplication } from "../modules/lifecycle/bootstrap"; -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { toMessage } from "../utils/errors"; export default definePlugin(async () => { diff --git a/app/server/utils/__tests__/spawn.test.ts b/app/server/utils/__tests__/spawn.test.ts index 12bb374d..7758eea8 100644 --- a/app/server/utils/__tests__/spawn.test.ts +++ b/app/server/utils/__tests__/spawn.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test"; -import { safeExec, safeSpawn } from "@zerobyte/core/utils"; +import { safeExec, safeSpawn } from "@zerobyte/core/node"; describe("safeExec", () => { describe("successful commands", () => { diff --git a/app/server/utils/errors.ts b/app/server/utils/errors.ts index f846122b..b592505e 100644 --- a/app/server/utils/errors.ts +++ b/app/server/utils/errors.ts @@ -1,5 +1,5 @@ import { HttpError } from "http-errors-enhanced"; -import { sanitizeSensitiveData } from "@zerobyte/core/utils"; +import { sanitizeSensitiveData } from "@zerobyte/core/node"; export const handleServiceError = (error: unknown) => { if (error instanceof HttpError) { diff --git a/app/server/utils/rclone.ts b/app/server/utils/rclone.ts index d25bca8c..083b0740 100644 --- a/app/server/utils/rclone.ts +++ b/app/server/utils/rclone.ts @@ -1,6 +1,6 @@ -import { logger } from "@zerobyte/core/utils"; +import { logger } from "@zerobyte/core/node"; import { toMessage } from "./errors"; -import { safeExec } from "@zerobyte/core/utils"; +import { safeExec } from "@zerobyte/core/node"; /** * List all configured rclone remotes diff --git a/app/server/utils/shoutrrr.ts b/app/server/utils/shoutrrr.ts index 4f445f8b..9a774fe2 100644 --- a/app/server/utils/shoutrrr.ts +++ b/app/server/utils/shoutrrr.ts @@ -1,5 +1,5 @@ -import { safeExec } from "@zerobyte/core/utils"; -import { logger } from "@zerobyte/core/utils"; +import { safeExec } from "@zerobyte/core/node"; +import { logger } from "@zerobyte/core/node"; import { toMessage } from "./errors"; export interface SendNotificationParams { diff --git a/app/test/setup.ts b/app/test/setup.ts index bdf10fd6..0ae49a38 100644 --- a/app/test/setup.ts +++ b/app/test/setup.ts @@ -4,9 +4,9 @@ import path from "node:path"; import { cwd } from "node:process"; import { db } from "~/server/db/db"; -import * as utils from "@zerobyte/core/utils"; +import * as utils from "@zerobyte/core/node"; -void mock.module("@zerobyte/core/utils", () => { +void mock.module("@zerobyte/core/node", () => { return { ...utils, logger: { diff --git a/packages/core/package.json b/packages/core/package.json index f92fbbc0..61319536 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -8,10 +8,20 @@ "import": "./src/restic/index.ts", "default": "./src/restic/index.ts" }, + "./restic/server": { + "types": "./src/restic/server.ts", + "import": "./src/restic/server.ts", + "default": "./src/restic/server.ts" + }, "./utils": { "types": "./src/utils/index.ts", "import": "./src/utils/index.ts", "default": "./src/utils/index.ts" + }, + "./node": { + "types": "./src/node/index.ts", + "import": "./src/node/index.ts", + "default": "./src/node/index.ts" } }, "scripts": { diff --git a/packages/core/src/node/index.ts b/packages/core/src/node/index.ts new file mode 100644 index 00000000..baf2b89c --- /dev/null +++ b/packages/core/src/node/index.ts @@ -0,0 +1,4 @@ +export { safeSpawn, safeExec } from "../utils/spawn.js"; +export type { SafeSpawnParams, SafeSpawnParamsLines, SafeSpawnParamsRaw, SpawnResult } from "../utils/spawn.js"; +export { logger } from "../utils/logger.js"; +export { sanitizeSensitiveData } from "../utils/sanitize.js"; diff --git a/packages/core/src/restic/commands/backup.ts b/packages/core/src/restic/commands/backup.ts index 11588a0a..4465938b 100644 --- a/packages/core/src/restic/commands/backup.ts +++ b/packages/core/src/restic/commands/backup.ts @@ -10,7 +10,7 @@ import { buildRepoUrl } from "../helpers/build-repo-url"; import { cleanupTemporaryKeys } from "../helpers/cleanup-temporary-keys"; import { validateCustomResticParams } from "../helpers/validate-custom-params"; import { ResticError } from "../error"; -import { logger, safeSpawn } from "../../utils"; +import { logger, safeSpawn } from "../../node"; import type { ResticDeps } from "../types"; export const backup = async ( diff --git a/packages/core/src/restic/commands/check.ts b/packages/core/src/restic/commands/check.ts index 76b0ca09..36280a1c 100644 --- a/packages/core/src/restic/commands/check.ts +++ b/packages/core/src/restic/commands/check.ts @@ -1,4 +1,4 @@ -import { logger, safeExec } from "../../utils"; +import { logger, safeExec } from "../../node"; import { addCommonArgs } from "../helpers/add-common-args"; import { buildEnv } from "../helpers/build-env"; import { buildRepoUrl } from "../helpers/build-repo-url"; diff --git a/packages/core/src/restic/commands/copy.ts b/packages/core/src/restic/commands/copy.ts index 99370e0e..1f793eec 100644 --- a/packages/core/src/restic/commands/copy.ts +++ b/packages/core/src/restic/commands/copy.ts @@ -5,7 +5,7 @@ import { buildRepoUrl } from "../helpers/build-repo-url"; import { cleanupTemporaryKeys } from "../helpers/cleanup-temporary-keys"; import type { RepositoryConfig } from "../schemas"; import { ResticError } from "../error"; -import { logger, safeExec } from "../../utils"; +import { logger, safeExec } from "../../node"; import type { ResticDeps } from "../types"; export const copy = async ( diff --git a/packages/core/src/restic/commands/delete-snapshots.ts b/packages/core/src/restic/commands/delete-snapshots.ts index 3c2c36bc..5368391b 100644 --- a/packages/core/src/restic/commands/delete-snapshots.ts +++ b/packages/core/src/restic/commands/delete-snapshots.ts @@ -1,4 +1,4 @@ -import { logger, safeExec } from "../../utils"; +import { logger, safeExec } from "../../node"; import { ResticError } from "../error"; import { addCommonArgs } from "../helpers/add-common-args"; import { buildEnv } from "../helpers/build-env"; diff --git a/packages/core/src/restic/commands/dump.ts b/packages/core/src/restic/commands/dump.ts index 28ae804b..f4ac9b6a 100644 --- a/packages/core/src/restic/commands/dump.ts +++ b/packages/core/src/restic/commands/dump.ts @@ -6,7 +6,7 @@ import { buildEnv } from "../helpers/build-env"; import { buildRepoUrl } from "../helpers/build-repo-url"; import { cleanupTemporaryKeys } from "../helpers/cleanup-temporary-keys"; import type { RepositoryConfig } from "../schemas"; -import { logger, safeSpawn } from "../../utils"; +import { logger, safeSpawn } from "../../node"; import { ResticError } from "../error"; const normalizeDumpPath = (pathToDump?: string): string => { diff --git a/packages/core/src/restic/commands/forget.ts b/packages/core/src/restic/commands/forget.ts index 98dc8604..c907c7f6 100644 --- a/packages/core/src/restic/commands/forget.ts +++ b/packages/core/src/restic/commands/forget.ts @@ -5,7 +5,7 @@ import { buildEnv } from "../helpers/build-env"; import { buildRepoUrl } from "../helpers/build-repo-url"; import { cleanupTemporaryKeys } from "../helpers/cleanup-temporary-keys"; import type { RepositoryConfig } from "../schemas"; -import { logger, safeExec } from "../../utils"; +import { logger, safeExec } from "../../node"; import { ResticError } from "../error"; export const forget = async ( diff --git a/packages/core/src/restic/commands/init.ts b/packages/core/src/restic/commands/init.ts index 8016fcb0..bfe82665 100644 --- a/packages/core/src/restic/commands/init.ts +++ b/packages/core/src/restic/commands/init.ts @@ -4,7 +4,7 @@ import { buildRepoUrl } from "../helpers/build-repo-url"; import { cleanupTemporaryKeys } from "../helpers/cleanup-temporary-keys"; import { keyAdd } from "./key-add"; import type { RepositoryConfig } from "../schemas"; -import { logger, safeExec } from "../../utils"; +import { logger, safeExec } from "../../node"; import type { ResticDeps } from "../types"; const addDefaultKey = async ( diff --git a/packages/core/src/restic/commands/key-add.ts b/packages/core/src/restic/commands/key-add.ts index 489c59e5..81be7016 100644 --- a/packages/core/src/restic/commands/key-add.ts +++ b/packages/core/src/restic/commands/key-add.ts @@ -1,4 +1,4 @@ -import { logger, safeExec } from "../../utils"; +import { logger, safeExec } from "../../node"; import { addCommonArgs } from "../helpers/add-common-args"; import { buildEnv } from "../helpers/build-env"; import { buildRepoUrl } from "../helpers/build-repo-url"; diff --git a/packages/core/src/restic/commands/ls.ts b/packages/core/src/restic/commands/ls.ts index 77cf7b16..b4656e56 100644 --- a/packages/core/src/restic/commands/ls.ts +++ b/packages/core/src/restic/commands/ls.ts @@ -4,7 +4,7 @@ import { buildEnv } from "../helpers/build-env"; import { buildRepoUrl } from "../helpers/build-repo-url"; import { cleanupTemporaryKeys } from "../helpers/cleanup-temporary-keys"; import type { RepositoryConfig } from "../schemas"; -import { logger, safeSpawn } from "../../utils"; +import { logger, safeSpawn } from "../../node"; import { ResticError } from "../error"; import type { ResticDeps } from "../types"; diff --git a/packages/core/src/restic/commands/repair-index.ts b/packages/core/src/restic/commands/repair-index.ts index 54c9b2fa..cdefea0e 100644 --- a/packages/core/src/restic/commands/repair-index.ts +++ b/packages/core/src/restic/commands/repair-index.ts @@ -1,4 +1,4 @@ -import { logger, safeExec } from "../../utils"; +import { logger, safeExec } from "../../node"; import { ResticError } from "../error"; import { addCommonArgs } from "../helpers/add-common-args"; import { buildEnv } from "../helpers/build-env"; diff --git a/packages/core/src/restic/commands/restore.ts b/packages/core/src/restic/commands/restore.ts index 10a66166..9539122a 100644 --- a/packages/core/src/restic/commands/restore.ts +++ b/packages/core/src/restic/commands/restore.ts @@ -7,7 +7,7 @@ import { buildEnv } from "../helpers/build-env"; import { buildRepoUrl } from "../helpers/build-repo-url"; import { cleanupTemporaryKeys } from "../helpers/cleanup-temporary-keys"; import { type RepositoryConfig, type OverwriteMode } from "../schemas"; -import { logger, safeSpawn } from "../../utils"; +import { logger, safeSpawn } from "../../node"; import { ResticError } from "../error"; import { resticRestoreOutputSchema, type ResticRestoreOutputDto } from "../restic-dto"; import type { ResticDeps } from "../types"; diff --git a/packages/core/src/restic/commands/snapshots.ts b/packages/core/src/restic/commands/snapshots.ts index 48945c2d..ec3d5e8f 100644 --- a/packages/core/src/restic/commands/snapshots.ts +++ b/packages/core/src/restic/commands/snapshots.ts @@ -5,7 +5,7 @@ import { buildRepoUrl } from "../helpers/build-repo-url"; import { cleanupTemporaryKeys } from "../helpers/cleanup-temporary-keys"; import { resticSnapshotSummarySchema } from "../restic-dto"; import type { RepositoryConfig } from "../schemas"; -import { logger, safeExec } from "../../utils"; +import { logger, safeExec } from "../../node"; import type { ResticDeps } from "../types"; const snapshotInfoSchema = z.object({ diff --git a/packages/core/src/restic/commands/stats.ts b/packages/core/src/restic/commands/stats.ts index 19f30343..f1f8750c 100644 --- a/packages/core/src/restic/commands/stats.ts +++ b/packages/core/src/restic/commands/stats.ts @@ -4,7 +4,7 @@ import { buildEnv } from "../helpers/build-env"; import { buildRepoUrl } from "../helpers/build-repo-url"; import { cleanupTemporaryKeys } from "../helpers/cleanup-temporary-keys"; import type { RepositoryConfig } from "../schemas"; -import { logger, safeExec } from "../../utils"; +import { logger, safeExec } from "../../node"; import { ResticError } from "../error"; import { resticStatsSchema } from "../restic-dto"; import type { ResticDeps } from "../types"; diff --git a/packages/core/src/restic/commands/tag-snapshots.ts b/packages/core/src/restic/commands/tag-snapshots.ts index c38591c1..997c8add 100644 --- a/packages/core/src/restic/commands/tag-snapshots.ts +++ b/packages/core/src/restic/commands/tag-snapshots.ts @@ -1,4 +1,4 @@ -import { logger, safeExec } from "../../utils"; +import { logger, safeExec } from "../../node"; import { ResticError } from "../error"; import { addCommonArgs } from "../helpers/add-common-args"; import { buildEnv } from "../helpers/build-env"; diff --git a/packages/core/src/restic/commands/unlock.ts b/packages/core/src/restic/commands/unlock.ts index 06f131c2..54d54b9f 100644 --- a/packages/core/src/restic/commands/unlock.ts +++ b/packages/core/src/restic/commands/unlock.ts @@ -1,4 +1,4 @@ -import { logger, safeExec } from "../../utils"; +import { logger, safeExec } from "../../node"; import { ResticError } from "../error"; import { addCommonArgs } from "../helpers/add-common-args"; import { buildEnv } from "../helpers/build-env"; diff --git a/packages/core/src/restic/helpers/build-env.ts b/packages/core/src/restic/helpers/build-env.ts index cdf4297f..4b9a2ffd 100644 --- a/packages/core/src/restic/helpers/build-env.ts +++ b/packages/core/src/restic/helpers/build-env.ts @@ -3,7 +3,7 @@ import fs from "node:fs/promises"; import path from "node:path"; import type { ResticDeps, ResticEnv } from "../types"; import type { RepositoryConfig } from "../schemas"; -import { logger } from "../../utils"; +import { logger } from "../../node"; export const buildEnv = async ( config: RepositoryConfig, diff --git a/packages/core/src/restic/index.ts b/packages/core/src/restic/index.ts index 4f7a712b..e7928da9 100644 --- a/packages/core/src/restic/index.ts +++ b/packages/core/src/restic/index.ts @@ -1,29 +1,6 @@ -import { backup } from "./commands/backup"; -import { check } from "./commands/check"; -import { copy } from "./commands/copy"; -import { deleteSnapshot, deleteSnapshots } from "./commands/delete-snapshots"; -import { dump } from "./commands/dump"; -import { forget } from "./commands/forget"; -import { init } from "./commands/init"; -import { keyAdd } from "./commands/key-add"; -import { ls } from "./commands/ls"; -import { repairIndex } from "./commands/repair-index"; -import { restore } from "./commands/restore"; -import { snapshots } from "./commands/snapshots"; -import { stats } from "./commands/stats"; -import { tagSnapshots } from "./commands/tag-snapshots"; -import { unlock } from "./commands/unlock"; -import type { ResticDeps } from "./types"; - -export { addCommonArgs } from "./helpers/add-common-args"; -export { buildEnv } from "./helpers/build-env"; -export { buildRepoUrl } from "./helpers/build-repo-url"; -export { cleanupTemporaryKeys } from "./helpers/cleanup-temporary-keys"; -export { validateCustomResticParams } from "./helpers/validate-custom-params"; -export { ResticError } from "./error"; - export * from "./schemas"; export * from "./restic-dto"; +export { ResticError } from "./error"; export type { RestoreProgress } from "./commands/restore"; export type { @@ -36,73 +13,3 @@ export type { ResticForgetResponse, Snapshot, } from "./types"; - -export const createRestic = (deps: ResticDeps) => ({ - init: ( - config: Parameters[0], - organizationId: Parameters[1], - options?: { timeoutMs?: number }, - ) => init(config, organizationId, options, deps), - keyAdd: ( - config: Parameters[0], - organizationId: Parameters[1], - options: Parameters[2], - ) => keyAdd(config, organizationId, options, deps), - backup: ( - config: Parameters[0], - source: Parameters[1], - options: Parameters[2], - ) => backup(config, source, options, deps), - restore: ( - config: Parameters[0], - snapshotId: Parameters[1], - target: Parameters[2], - options: Parameters[3], - ) => restore(config, snapshotId, target, options, deps), - dump: ( - config: Parameters[0], - snapshotRef: Parameters[1], - options: Parameters[2], - ) => dump(config, snapshotRef, options, deps), - snapshots: (config: Parameters[0], options: Parameters[1]) => - snapshots(config, options, deps), - stats: (config: Parameters[0], options: Parameters[1]) => stats(config, options, deps), - forget: ( - config: Parameters[0], - options: Parameters[1], - extra: Parameters[2], - ) => forget(config, options, extra, deps), - deleteSnapshot: ( - config: Parameters[0], - snapshotId: Parameters[1], - organizationId: Parameters[2], - ) => deleteSnapshot(config, snapshotId, organizationId, deps), - deleteSnapshots: ( - config: Parameters[0], - snapshotIds: Parameters[1], - organizationId: Parameters[2], - ) => deleteSnapshots(config, snapshotIds, organizationId, deps), - tagSnapshots: ( - config: Parameters[0], - snapshotIds: Parameters[1], - tags: Parameters[2], - organizationId: Parameters[3], - ) => tagSnapshots(config, snapshotIds, tags, organizationId, deps), - unlock: (config: Parameters[0], options: Parameters[1]) => - unlock(config, options, deps), - ls: ( - config: Parameters[0], - snapshotId: Parameters[1], - organizationId: Parameters[2], - path?: Parameters[3], - options?: Parameters[4], - ) => ls(config, snapshotId, organizationId, path, options, deps), - check: (config: Parameters[0], options: Parameters[1]) => check(config, options, deps), - repairIndex: (config: Parameters[0], options: Parameters[1]) => - repairIndex(config, options, deps), - copy: ( - sourceConfig: Parameters[0], - destConfig: Parameters[1], - options: Parameters[2], - ) => copy(sourceConfig, destConfig, options, deps), -}); diff --git a/packages/core/src/restic/server.ts b/packages/core/src/restic/server.ts new file mode 100644 index 00000000..3a188182 --- /dev/null +++ b/packages/core/src/restic/server.ts @@ -0,0 +1,54 @@ +import { backup } from "./commands/backup"; +import { check } from "./commands/check"; +import { copy } from "./commands/copy"; +import { deleteSnapshot, deleteSnapshots } from "./commands/delete-snapshots"; +import { dump } from "./commands/dump"; +import { forget } from "./commands/forget"; +import { init } from "./commands/init"; +import { keyAdd } from "./commands/key-add"; +import { ls } from "./commands/ls"; +import { repairIndex } from "./commands/repair-index"; +import { restore } from "./commands/restore"; +import { snapshots } from "./commands/snapshots"; +import { stats } from "./commands/stats"; +import { tagSnapshots } from "./commands/tag-snapshots"; +import { unlock } from "./commands/unlock"; +import type { ResticDeps } from "./types"; + +export { addCommonArgs } from "./helpers/add-common-args"; +export { buildEnv } from "./helpers/build-env"; +export { buildRepoUrl } from "./helpers/build-repo-url"; +export { cleanupTemporaryKeys } from "./helpers/cleanup-temporary-keys"; +export { validateCustomResticParams } from "./helpers/validate-custom-params"; +export { ResticError } from "./error"; + +function withDeps( + command: (...args: [...Args, ResticDeps]) => Result, + deps: ResticDeps, +): (...args: Args) => Result; +function withDeps( + command: (...args: [...Args, ResticDeps?]) => Result, + deps: ResticDeps, +): (...args: Args) => Result; +function withDeps(command: (...args: any[]) => any, deps: ResticDeps) { + return (...args: any[]) => command(...args, deps); +} + +export const createRestic = (deps: ResticDeps) => ({ + init: withDeps(init, deps), + keyAdd: withDeps(keyAdd, deps), + backup: withDeps(backup, deps), + restore: withDeps(restore, deps), + dump: withDeps(dump, deps), + snapshots: withDeps(snapshots, deps), + stats: withDeps(stats, deps), + forget: withDeps(forget, deps), + deleteSnapshot: withDeps(deleteSnapshot, deps), + deleteSnapshots: withDeps(deleteSnapshots, deps), + tagSnapshots: withDeps(tagSnapshots, deps), + unlock: withDeps(unlock, deps), + ls: withDeps(ls, deps), + check: withDeps(check, deps), + repairIndex: withDeps(repairIndex, deps), + copy: withDeps(copy, deps), +}); diff --git a/packages/core/src/utils/index.ts b/packages/core/src/utils/index.ts index ea10cef6..46aac9c1 100644 --- a/packages/core/src/utils/index.ts +++ b/packages/core/src/utils/index.ts @@ -1,6 +1,3 @@ -export { safeSpawn, safeExec } from "./spawn.js"; -export { logger } from "./logger.js"; -export { sanitizeSensitiveData } from "./sanitize.js"; export { safeJsonParse } from "./json.js"; export { normalizeAbsolutePath } from "./path.js"; export { findCommonAncestor } from "./common-ancestor.js";