TeraBackupRuntimeStartup.swift (1864B)
1 import Foundation 2 import RadrootsKit 3 import TeraKitBindings 4 5 extension TeraGeneratedRuntimeBackend { 6 /// Call instead of ordinary startup, after the session has closed its prior 7 /// runtime. The existing single database owner and file paths remain intact. 8 static func startWithLocalBackups(configuration: TeraRuntimeLaunchConfiguration) async throws -> TeraRuntimeBackendStart { 9 guard configuration.protectedData == .available else { throw TeraLocalBackupHost.failure("backup_unavailable") } 10 let use = try TeraMediaProcessUse.admit(applicationSupportDirectory: configuration.applicationSupportDirectory) 11 defer { withExtendedLifetime(use) {} } 12 let root = URL(fileURLWithPath: configuration.applicationSupportDirectory, isDirectory: true) 13 let roots = try RadrootsAppleFileRoots(appIdentifier: configuration.app.bundleIdentifier, 14 dataRoot: root, cacheRoot: root, temporaryRoot: root) 15 let host = try TeraLocalBackupHost(roots: roots, publicKey: configuration.publicKeyHex, 16 generation: configuration.sourceGenerationHex) 17 // Structural binding validation for directory preparation; this creates no 18 // backup candidate and no publication or retained request identity. 19 try await host.prepare(request: FfiBackupRequest(schemaVersion: applicationBackupLimits().schemaVersion, 20 backupId: String(repeating: "01", count: 16), publicKey: configuration.publicKeyHex, 21 sourceGeneration: configuration.sourceGenerationHex, requestedAtUnixMs: configuration.sourceGenerationCreatedAtUnixMilliseconds, 22 maximumBytes: 1)) 23 return try await start(configuration: configuration, localBackups: true) 24 } 25 }