{
  "version": 3,
  "sources": ["../../src/webdav-backend.ts", "../../src/webdav-client.ts"],
  "sourcesContent": ["import { createHash, randomUUID } from \"node:crypto\";\nimport { decodeSnapshot, encodeSnapshot } from \"./snapshot-codec.js\";\nimport {\n\ttype BackendDiagnostic,\n\ttype ExpectedRemoteHead,\n\ttype PublishSnapshotOptions,\n\ttype PublishSnapshotResult,\n\ttype RemoteHead,\n\ttype RemoteHistoryEntry,\n\ttype SyncBackend,\n\tSyncBackendConflictError,\n\tSyncBackendPublicationOutcomeUnknownError,\n} from \"./sync-backend.js\";\nimport { portableSnapshotSelection } from \"./sync-policy.js\";\nimport type { LatestPointer, RemoteObject, ResolvedWebDavBackend, Snapshot } from \"./types.js\";\nimport { WebDavClient, WebDavHttpError, WebDavPreconditionError } from \"./webdav-client.js\";\n\nconst VERSION = 1;\nconst POST_COMMIT_TIMEOUT_MS = 30_000;\n\nexport class WebDavSyncBackend implements SyncBackend {\n\treadonly identity: string;\n\treadonly destination: string;\n\tprivate conditionalVerified = false;\n\tprivate readonly checksums = new Map<string, string>();\n\tprivate capabilityCheck?: Promise<void>;\n\n\tconstructor(\n\t\tprivate readonly config: ResolvedWebDavBackend,\n\t\tprivate readonly postCommitTimeoutMs = POST_COMMIT_TIMEOUT_MS,\n\t) {\n\t\tassertSafeDestination(config);\n\t\tthis.identity = webDavBackendIdentity(config);\n\t\tthis.destination = webDavStorageLocation(config);\n\t}\n\n\tget capability() {\n\t\treturn this.conditionalVerified\n\t\t\t? (\"atomic-conditional\" as const)\n\t\t\t: (\"conditional-required\" as const);\n\t}\n\n\tsameRevision(left: string, right: string) {\n\t\treturn left === right;\n\t}\n\n\tasync readHead(signal?: AbortSignal): Promise<RemoteHead | undefined> {\n\t\tconst object = await new WebDavClient(this.config, signal).getJson<LatestPointer>(\n\t\t\tlatestPath(this.config),\n\t\t);\n\t\tthrowIfAborted(signal);\n\t\tif (object.missing) return undefined;\n\t\tconst pointer = requirePointer(object.value, this.config.destination.namespace);\n\t\tthis.registerChecksum(pointer.snapshot, pointer.sha256);\n\t\treturn remoteHead(pointer, this.identity, object.etag);\n\t}\n\n\tasync readSnapshot(reference: string, signal?: AbortSignal): Promise<Snapshot> {\n\t\trequireSnapshotReference(reference);\n\t\tconst expectedChecksum =\n\t\t\tthis.checksums.get(reference) ?? (await this.resolveChecksum(reference, signal));\n\t\tconst object = await new WebDavClient(this.config, signal).getBuffer(\n\t\t\tsnapshotPath(this.config, reference),\n\t\t);\n\t\tthrowIfAborted(signal);\n\t\tif (!object.value) throw new Error(`Snapshot not found: ${reference}`);\n\t\tif (!expectedChecksum || sha256(object.value) !== expectedChecksum) {\n\t\t\tthrow new Error(\"Remote snapshot checksum mismatch.\");\n\t\t}\n\t\tconst snapshot = await decodeSnapshot(object.value, { signal });\n\t\tif (snapshot.id !== reference || snapshot.profile !== this.config.destination.namespace) {\n\t\t\tthrow new Error(\"Remote snapshot identity mismatch.\");\n\t\t}\n\t\tvalidateSnapshotBundle(snapshot);\n\t\treturn snapshot;\n\t}\n\n\tasync publishSnapshot(\n\t\tsnapshot: Snapshot,\n\t\texpected: ExpectedRemoteHead,\n\t\toptions: PublishSnapshotOptions = {},\n\t): Promise<PublishSnapshotResult> {\n\t\tthrowIfAborted(options.signal);\n\t\tassertSnapshotIdentity(snapshot, this.config.destination.namespace);\n\t\tawait this.ensureAtomicConditions(options.signal);\n\t\tthrowIfAborted(options.signal);\n\t\tconst client = new WebDavClient(this.config, options.signal);\n\t\tawait client.ensureCollection(snapshotsPath(this.config));\n\t\tconst encoded = await encodeSnapshot(snapshot);\n\t\tthrowIfAborted(options.signal);\n\t\tconst pointer = pointerFor(this.config, snapshot, sha256(encoded));\n\t\tconst stagedPath = snapshotPath(this.config, snapshot.id);\n\t\ttry {\n\t\t\tawait client.putBuffer(stagedPath, encoded, \"application/gzip\", { ifAbsent: true });\n\t\t} catch (error) {\n\t\t\tif (!(error instanceof WebDavPreconditionError)) throw error;\n\t\t\tconst existing = await client.getBuffer(stagedPath);\n\t\t\tif (!existing.value || sha256(existing.value) !== pointer.sha256) {\n\t\t\t\tthrow new SyncBackendConflictError(\n\t\t\t\t\t`Immutable snapshot id already exists with different content: ${snapshot.id}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tconst currentObject = await client.getJson<LatestPointer>(latestPath(this.config));\n\t\tthrowIfAborted(options.signal);\n\t\tconst current = currentObject.missing\n\t\t\t? undefined\n\t\t\t: remoteHead(\n\t\t\t\t\trequirePointer(currentObject.value, this.config.destination.namespace),\n\t\t\t\t\tthis.identity,\n\t\t\t\t\tcurrentObject.etag,\n\t\t\t\t);\n\t\tif (!matchesExpected(current, expected)) {\n\t\t\tthrow new SyncBackendConflictError(\n\t\t\t\t\"Remote changed while pushing. Run /sync pull first, then retry.\",\n\t\t\t\t{\n\t\t\t\t\tcurrentHead: current,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\tconst condition = publicationCondition(currentObject, expected, this.identity);\n\t\tthrowIfAborted(options.signal);\n\t\toptions.onCommit?.();\n\t\tconst commitClient = new WebDavClient(\n\t\t\tthis.config,\n\t\t\tAbortSignal.timeout(this.postCommitTimeoutMs),\n\t\t\tthis.postCommitTimeoutMs,\n\t\t);\n\t\ttry {\n\t\t\tawait commitClient.putJson(latestPath(this.config), pointer, condition);\n\t\t} catch (error) {\n\t\t\tif (error instanceof WebDavPreconditionError) {\n\t\t\t\tconst latest = await this.readHeadAfterCommit(commitClient).catch(() => undefined);\n\t\t\t\tthrow new SyncBackendConflictError(\"Remote changed while publishing the WebDAV pointer.\", {\n\t\t\t\t\tcurrentHead: latest,\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow new SyncBackendPublicationOutcomeUnknownError(\n\t\t\t\t`Remote publication outcome is unknown: ${errorMessage(error)}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\t\tlet verifiedObject: RemoteObject<LatestPointer>;\n\t\ttry {\n\t\t\tverifiedObject = await commitClient.getJson<LatestPointer>(latestPath(this.config));\n\t\t} catch (error) {\n\t\t\tthrow new SyncBackendPublicationOutcomeUnknownError(\n\t\t\t\t`Remote snapshot may be active, but publication could not be verified: ${errorMessage(error)}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\t\tlet verified: LatestPointer;\n\t\ttry {\n\t\t\tverified = requirePointer(verifiedObject.value, this.config.destination.namespace);\n\t\t} catch (error) {\n\t\t\tthrow new SyncBackendPublicationOutcomeUnknownError(\n\t\t\t\t`Remote snapshot may be active, but publication verification was malformed: ${errorMessage(error)}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\t\tif (!samePointer(pointer, verified)) {\n\t\t\tthrow new SyncBackendConflictError(\n\t\t\t\t\"Remote latest changed immediately after push. Run /sync status before continuing.\",\n\t\t\t\t{\n\t\t\t\t\tphase: \"after-commit\",\n\t\t\t\t\tcurrentHead: remoteHead(verified, this.identity, verifiedObject.etag),\n\t\t\t\t\tcandidateMayHaveBeenActive: true,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\tif (!strongEtag(verifiedObject.etag)) {\n\t\t\tthrow new SyncBackendPublicationOutcomeUnknownError(\n\t\t\t\t\"Remote snapshot is active, but the WebDAV server returned no strong ETag.\",\n\t\t\t);\n\t\t}\n\t\tthis.registerChecksum(verified.snapshot, verified.sha256);\n\t\tconst head = remoteHead(verified, this.identity, verifiedObject.etag);\n\t\tconst warning = await this.updateHistorySafely(commitClient, pointer);\n\t\treturn { head, warnings: warning ? [warning] : [] };\n\t}\n\n\tasync listHistory(signal?: AbortSignal): Promise<RemoteHistoryEntry[]> {\n\t\tconst object = await new WebDavClient(this.config, signal).getJson<{\n\t\t\tversion: number;\n\t\t\tsnapshots: LatestPointer[];\n\t\t}>(historyPath(this.config));\n\t\tthrowIfAborted(signal);\n\t\tif (object.missing) return [];\n\t\tconst pointers = requireHistory(object.value, this.config.destination.namespace);\n\t\tfor (const pointer of pointers) this.registerChecksum(pointer.snapshot, pointer.sha256);\n\t\treturn pointers.map(remoteHistoryEntry);\n\t}\n\n\tasync diagnose(signal?: AbortSignal): Promise<BackendDiagnostic[]> {\n\t\tconst diagnostics: BackendDiagnostic[] = [\n\t\t\t{\n\t\t\t\tkey: \"webdav-url\",\n\t\t\t\tlevel: \"info\",\n\t\t\t\tmessage: `webdav URL/TLS/auth: configured (${webDavStorageLocation(this.config)})`,\n\t\t\t},\n\t\t];\n\t\ttry {\n\t\t\tawait this.runCapabilityProbe(signal);\n\t\t\tdiagnostics.push(\n\t\t\t\t{ key: \"webdav-collection\", level: \"info\", message: \"webdav collection read/write: ok\" },\n\t\t\t\t{\n\t\t\t\t\tkey: \"webdav-conditional\",\n\t\t\t\t\tlevel: \"info\",\n\t\t\t\t\tmessage: \"webdav conditional publication: atomic-conditional (verified)\",\n\t\t\t\t},\n\t\t\t\t{ key: \"webdav-cleanup\", level: \"info\", message: \"webdav probe cleanup: ok\" },\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tthis.capabilityCheck = undefined;\n\t\t\tthis.conditionalVerified = false;\n\t\t\tif (error instanceof Error && error.name === \"AbortError\") throw error;\n\t\t\tdiagnostics.push({\n\t\t\t\tkey: \"webdav-probe\",\n\t\t\t\tlevel: \"error\",\n\t\t\t\tmessage: `webdav publication is read-only until diagnostics pass: ${errorMessage(error)}`,\n\t\t\t});\n\t\t\treturn diagnostics;\n\t\t}\n\t\ttry {\n\t\t\tdiagnostics.push({\n\t\t\t\tkey: \"webdav-history\",\n\t\t\t\tlevel: \"info\",\n\t\t\t\tmessage: await this.reconcileActiveHistory(signal),\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (error instanceof Error && error.name === \"AbortError\") throw error;\n\t\t\tdiagnostics.push({\n\t\t\t\tkey: \"webdav-history\",\n\t\t\t\tlevel: \"error\",\n\t\t\t\tmessage: `webdav history repair failed: ${errorMessage(error)}`,\n\t\t\t});\n\t\t}\n\t\treturn diagnostics;\n\t}\n\n\tprivate ensureAtomicConditions(signal?: AbortSignal) {\n\t\tif (this.capabilityCheck) return this.capabilityCheck;\n\t\tthis.conditionalVerified = false;\n\t\tconst check = this.runCapabilityProbe(signal).finally(() => {\n\t\t\tif (this.capabilityCheck === check) this.capabilityCheck = undefined;\n\t\t});\n\t\tthis.capabilityCheck = check;\n\t\treturn check;\n\t}\n\n\tprivate async runCapabilityProbe(signal?: AbortSignal) {\n\t\tthrowIfAborted(signal);\n\t\tconst probeCollection = `${rootPath(this.config)}/.pi-sync-probes/${randomUUID()}`;\n\t\tconst probe = `${probeCollection}/conditional.txt`;\n\t\tconst client = new WebDavClient(this.config, signal);\n\t\tlet created = false;\n\t\tlet operationError: unknown;\n\t\ttry {\n\t\t\tcreated = true;\n\t\t\tawait client.ensureCollection(probeCollection);\n\t\t\tawait client.listCollection(probeCollection);\n\t\t\tawait client.putBuffer(probe, Buffer.from(\"first\"), \"text/plain\", { ifAbsent: true });\n\t\t\tconst read = await client.getBuffer(probe);\n\t\t\tconst etag = strongEtag(read.etag);\n\t\t\tif (!read.value || !etag) {\n\t\t\t\tthrow new Error(\"WebDAV server did not return a strong ETag for the capability probe.\");\n\t\t\t}\n\t\t\tawait expectPrecondition(\n\t\t\t\tclient.putBuffer(probe, Buffer.from(\"replace\"), \"text/plain\", { ifAbsent: true }),\n\t\t\t\t\"If-None-Match\",\n\t\t\t);\n\t\t\tawait expectPrecondition(\n\t\t\t\tclient.putBuffer(probe, Buffer.from(\"replace\"), \"text/plain\", {\n\t\t\t\t\tifMatch: '\"pi-sync-deliberately-stale\"',\n\t\t\t\t}),\n\t\t\t\t\"If-Match\",\n\t\t\t);\n\t\t\tconst unchanged = await client.getBuffer(probe);\n\t\t\tif (!unchanged.value?.equals(Buffer.from(\"first\"))) {\n\t\t\t\tthrow new Error(\"WebDAV server changed a probe despite a failed precondition.\");\n\t\t\t}\n\t\t\tawait client.putBuffer(probe, Buffer.from(\"second\"), \"text/plain\", { ifMatch: etag });\n\t\t\tconst changed = await client.getBuffer(probe);\n\t\t\tconst changedEtag = strongEtag(changed.etag);\n\t\t\tif (!changed.value?.equals(Buffer.from(\"second\")) || !changedEtag || changedEtag === etag) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"WebDAV server did not rotate its strong ETag after changing the capability probe.\",\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\toperationError = error;\n\t\t}\n\t\tif (created) {\n\t\t\ttry {\n\t\t\t\tawait new WebDavClient(this.config, undefined).delete(probeCollection);\n\t\t\t} catch (cleanupError) {\n\t\t\t\tconst operationDetail = operationError\n\t\t\t\t\t? `WebDAV probe failed: ${errorMessage(operationError)}; `\n\t\t\t\t\t: \"\";\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`${operationDetail}probe cleanup also failed; remove ${probeCollection}: ${errorMessage(cleanupError)}`,\n\t\t\t\t\t{ cause: operationError ?? cleanupError },\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (operationError) throw operationError;\n\t\tthis.conditionalVerified = true;\n\t}\n\n\tprivate async resolveChecksum(reference: string, signal?: AbortSignal) {\n\t\tawait this.readHead(signal);\n\t\tif (this.checksums.has(reference)) return this.checksums.get(reference);\n\t\tawait this.listHistory(signal);\n\t\treturn this.checksums.get(reference);\n\t}\n\n\tprivate registerChecksum(reference: string, checksum: string) {\n\t\tconst known = this.checksums.get(reference);\n\t\tif (known && known !== checksum) {\n\t\t\tthrow new Error(\"Remote snapshot reference was rebound to a different checksum.\");\n\t\t}\n\t\tthis.checksums.set(reference, checksum);\n\t}\n\n\tprivate async readHeadAfterCommit(client: WebDavClient) {\n\t\tconst object = await client.getJson<LatestPointer>(latestPath(this.config));\n\t\tif (object.missing) return undefined;\n\t\treturn remoteHead(\n\t\t\trequirePointer(object.value, this.config.destination.namespace),\n\t\t\tthis.identity,\n\t\t\tobject.etag,\n\t\t);\n\t}\n\n\tprivate async reconcileActiveHistory(signal?: AbortSignal) {\n\t\tconst client = new WebDavClient(this.config, signal);\n\t\tconst object = await client.getJson<LatestPointer>(latestPath(this.config));\n\t\tthrowIfAborted(signal);\n\t\tif (object.missing) return \"webdav history: no active snapshot\";\n\t\tconst pointer = requirePointer(object.value, this.config.destination.namespace);\n\t\tthis.registerChecksum(pointer.snapshot, pointer.sha256);\n\t\tconst repaired = await this.ensureHistoryPointer(client, pointer);\n\t\treturn repaired\n\t\t\t? \"webdav history: repaired active snapshot entry\"\n\t\t\t: \"webdav history: active snapshot entry present\";\n\t}\n\n\tprivate async ensureHistoryPointer(client: WebDavClient, pointer: LatestPointer) {\n\t\tconst object = await client.getJson<{ version: number; snapshots: LatestPointer[] }>(\n\t\t\thistoryPath(this.config),\n\t\t);\n\t\tconst snapshots = object.missing\n\t\t\t? []\n\t\t\t: requireHistory(object.value, this.config.destination.namespace);\n\t\tconst existing = snapshots.find((entry) => entry.snapshot === pointer.snapshot);\n\t\tif (existing) {\n\t\t\tif (!samePointer(existing, pointer)) {\n\t\t\t\tthrow new Error(\"Remote history rebound an immutable snapshot reference.\");\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\tconst next = [...snapshots, pointer].slice(-100);\n\t\tconst condition = object.missing\n\t\t\t? { ifAbsent: true }\n\t\t\t: { ifMatch: requireStrongEtag(object.etag, \"history\") };\n\t\tawait client.putJson(\n\t\t\thistoryPath(this.config),\n\t\t\t{ version: VERSION, snapshots: next },\n\t\t\tcondition,\n\t\t);\n\t\treturn true;\n\t}\n\n\tprivate async updateHistorySafely(client: WebDavClient, pointer: LatestPointer) {\n\t\ttry {\n\t\t\tawait this.ensureHistoryPointer(client, pointer);\n\t\t\treturn undefined;\n\t\t} catch (error) {\n\t\t\treturn `Remote snapshot is active, but history could not be updated: ${errorMessage(error)}. Run /sync doctor before relying on history.`;\n\t\t}\n\t}\n}\n\nexport function rootPath(config: ResolvedWebDavBackend) {\n\treturn config.destination.path;\n}\n\nexport function latestPath(config: ResolvedWebDavBackend) {\n\treturn joinRemote(rootPath(config), \"latest.json\");\n}\n\nexport function historyPath(config: ResolvedWebDavBackend) {\n\treturn joinRemote(rootPath(config), \"history.json\");\n}\n\nexport function snapshotsPath(config: ResolvedWebDavBackend) {\n\treturn joinRemote(rootPath(config), \"snapshots\");\n}\n\nexport function snapshotPath(config: ResolvedWebDavBackend, reference: string) {\n\trequireSnapshotReference(reference);\n\treturn joinRemote(snapshotsPath(config), `${reference}.json.gz`);\n}\n\nexport function webDavBackendIdentity(config: ResolvedWebDavBackend) {\n\treturn `webdav:${sha256(\n\t\tBuffer.from(JSON.stringify([secretFreeUrl(config.profile.url), config.destination.path])),\n\t)}`;\n}\n\nfunction webDavStorageLocation(config: ResolvedWebDavBackend) {\n\tconst url = new URL(secretFreeUrl(config.profile.url));\n\treturn `${url.host} \u00B7 ${rootPath(config)}`;\n}\n\nfunction pointerFor(\n\tconfig: ResolvedWebDavBackend,\n\tsnapshot: Snapshot,\n\tchecksum: string,\n): LatestPointer {\n\treturn {\n\t\tversion: VERSION,\n\t\tprofile: config.destination.namespace,\n\t\tsnapshot: snapshot.id,\n\t\tsha256: checksum,\n\t\tcreatedAt: snapshot.createdAt,\n\t\tmachine: snapshot.machine,\n\t\tsyncSessions:\n\t\t\tsnapshot.syncSessions === true ||\n\t\t\tsnapshot.files.some((file) => file.path.startsWith(\"sessions/\")),\n\t\t...(snapshot.selection === undefined ? {} : { selection: snapshot.selection }),\n\t};\n}\n\nfunction remoteHead(pointer: LatestPointer, identity: string, etag?: string): RemoteHead {\n\treturn {\n\t\tsnapshotRef: pointer.snapshot,\n\t\tsnapshotId: pointer.snapshot,\n\t\trevision: encodeRevision(identity, etag, pointer),\n\t\tcreatedAt: pointer.createdAt,\n\t\tmachine: pointer.machine,\n\t\tsyncSessions: pointer.syncSessions === true,\n\t\t...(pointer.selection === undefined ? {} : { selection: pointer.selection }),\n\t};\n}\n\nfunction encodeRevision(identity: string, etag: string | undefined, pointer: LatestPointer) {\n\treturn `webdav-v1:${Buffer.from(JSON.stringify({ identity, etag: etag ?? null, pointer: sha256(Buffer.from(canonicalJson(pointer))) })).toString(\"base64url\")}`;\n}\n\nfunction decodeRevision(value: string, identity: string) {\n\ttry {\n\t\tif (!value.startsWith(\"webdav-v1:\")) return undefined;\n\t\tconst parsed = JSON.parse(Buffer.from(value.slice(10), \"base64url\").toString(\"utf8\")) as {\n\t\t\tidentity?: unknown;\n\t\t\tetag?: unknown;\n\t\t};\n\t\tif (parsed.identity !== identity || typeof parsed.etag !== \"string\") return undefined;\n\t\treturn strongEtag(parsed.etag);\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction publicationCondition(\n\tcurrent: RemoteObject<LatestPointer>,\n\texpected: ExpectedRemoteHead,\n\tidentity: string,\n) {\n\tif (expected.kind === \"missing\") return { ifAbsent: true };\n\tconst etag = decodeRevision(expected.revision, identity) ?? strongEtag(current.etag);\n\tif (!etag) throw new SyncBackendConflictError(\"WebDAV head has no usable strong ETag.\");\n\treturn { ifMatch: etag };\n}\n\nasync function expectPrecondition(operation: Promise<unknown>, header: string) {\n\ttry {\n\t\tawait operation;\n\t} catch (error) {\n\t\tif (error instanceof WebDavPreconditionError) return;\n\t\tthrow error;\n\t}\n\tthrow new Error(`WebDAV server ignored ${header}; publication is read-only for safety.`);\n}\n\nfunction requireStrongEtag(value: string | undefined, resource: string) {\n\tconst etag = strongEtag(value);\n\tif (!etag) throw new Error(`WebDAV ${resource} has no strong ETag.`);\n\treturn etag;\n}\n\nfunction strongEtag(value: string | undefined) {\n\treturn value && !value.startsWith(\"W/\") && /^\"[^\"\\r\\n]+\"$/u.test(value) ? value : undefined;\n}\n\nfunction requirePointer(value: LatestPointer | undefined, expectedProfile: string) {\n\tif (\n\t\t!value ||\n\t\tvalue.version !== VERSION ||\n\t\tvalue.profile !== expectedProfile ||\n\t\t!isSafeReference(value.snapshot) ||\n\t\t!/^[0-9a-f]{64}$/u.test(value.sha256) ||\n\t\t!isSafeMetadata(value.createdAt, 64) ||\n\t\t!isSafeMetadata(value.machine, 256) ||\n\t\t(value.syncSessions !== undefined && typeof value.syncSessions !== \"boolean\")\n\t) {\n\t\tthrow new Error(\"Remote latest pointer is malformed.\");\n\t}\n\tif (value.selection !== undefined) portableSnapshotSelection(value.selection);\n\treturn value;\n}\n\nfunction requireHistory(\n\tvalue: { version: number; snapshots: LatestPointer[] } | undefined,\n\texpectedProfile: string,\n) {\n\tif (!value || value.version !== VERSION || !Array.isArray(value.snapshots)) {\n\t\tthrow new Error(\"Remote history is malformed.\");\n\t}\n\tconst pointers = value.snapshots.map((item) => requirePointer(item, expectedProfile));\n\tif (new Set(pointers.map((item) => item.snapshot)).size !== pointers.length) {\n\t\tthrow new Error(\"Remote history contains duplicate snapshot references.\");\n\t}\n\treturn pointers;\n}\n\nfunction remoteHistoryEntry(pointer: LatestPointer): RemoteHistoryEntry {\n\treturn {\n\t\tsnapshotRef: pointer.snapshot,\n\t\tsnapshotId: pointer.snapshot,\n\t\tcreatedAt: pointer.createdAt,\n\t\tmachine: pointer.machine,\n\t\tsyncSessions: pointer.syncSessions === true,\n\t};\n}\n\nfunction assertSnapshotIdentity(snapshot: Snapshot, namespace: string) {\n\tif (\n\t\tsnapshot.version !== VERSION ||\n\t\tsnapshot.profile !== namespace ||\n\t\t!isSafeReference(snapshot.id) ||\n\t\t!isSafeMetadata(snapshot.createdAt, 64) ||\n\t\t!isSafeMetadata(snapshot.machine, 256) ||\n\t\t!Array.isArray(snapshot.files)\n\t) {\n\t\tthrow new Error(\"Invalid snapshot identity for WebDAV publication.\");\n\t}\n}\n\nfunction validateSnapshotBundle(snapshot: Snapshot) {\n\tconst paths = new Set<string>();\n\tfor (const file of snapshot.files) {\n\t\tif (\n\t\t\t!file ||\n\t\t\t!isSafeSnapshotPath(file.path) ||\n\t\t\tpaths.has(file.path) ||\n\t\t\ttypeof file.contentBase64 !== \"string\" ||\n\t\t\ttypeof file.sha256 !== \"string\"\n\t\t) {\n\t\t\tthrow new Error(\"Remote snapshot bundle is malformed.\");\n\t\t}\n\t\tconst content = Buffer.from(file.contentBase64, \"base64\");\n\t\tif (content.toString(\"base64\") !== file.contentBase64 || sha256(content) !== file.sha256) {\n\t\t\tthrow new Error(\"Remote snapshot bundle is malformed.\");\n\t\t}\n\t\tpaths.add(file.path);\n\t}\n}\n\nfunction isSafeSnapshotPath(value: unknown): value is string {\n\tif (typeof value !== \"string\" || !value || value.length > 4096 || value.includes(\"\\\\\")) {\n\t\treturn false;\n\t}\n\tif (\n\t\t[...value].some((character) => {\n\t\t\tconst code = character.codePointAt(0) ?? 0;\n\t\t\treturn code < 0x20 || (code >= 0x7f && code <= 0x9f);\n\t\t})\n\t) {\n\t\treturn false;\n\t}\n\treturn value.split(\"/\").every((segment) => segment && segment !== \".\" && segment !== \"..\");\n}\n\nfunction assertSafeDestination(config: ResolvedWebDavBackend) {\n\tconst url = new URL(config.profile.url);\n\tif (url.username || url.password || url.search || url.hash)\n\t\tthrow new Error(\"Invalid WebDAV URL.\");\n\tfor (const value of [config.destination.path, config.destination.namespace]) {\n\t\tif (\n\t\t\t!value ||\n\t\t\tvalue.includes(\"\\\\\") ||\n\t\t\t[...value].some((character) => {\n\t\t\t\tconst code = character.codePointAt(0) ?? 0;\n\t\t\t\treturn code < 0x20 || (code >= 0x7f && code <= 0x9f);\n\t\t\t}) ||\n\t\t\tvalue.split(\"/\").some((part) => part === \".\" || part === \"..\")\n\t\t) {\n\t\t\tthrow new Error(\"Invalid WebDAV storage location.\");\n\t\t}\n\t}\n}\n\nfunction isSafeMetadata(value: unknown, maxLength: number): value is string {\n\treturn (\n\t\ttypeof value === \"string\" &&\n\t\tvalue.length > 0 &&\n\t\tvalue.length <= maxLength &&\n\t\t![...value].some((character) => {\n\t\t\tconst code = character.codePointAt(0) ?? 0;\n\t\t\treturn code < 0x20 || (code >= 0x7f && code <= 0x9f);\n\t\t})\n\t);\n}\n\nfunction requireSnapshotReference(reference: string) {\n\tif (!isSafeReference(reference)) throw new Error(\"Invalid WebDAV snapshot reference.\");\n}\n\nfunction isSafeReference(value: string) {\n\treturn (\n\t\t!!value &&\n\t\tvalue.length <= 512 &&\n\t\t// biome-ignore lint/suspicious/noControlCharactersInRegex: Remote references cannot contain terminal controls.\n\t\t!/[\\\\/\\u0000-\\u001f\\u007f-\\u009f]/u.test(value) &&\n\t\tvalue !== \".\" &&\n\t\tvalue !== \"..\"\n\t);\n}\n\nfunction matchesExpected(head: RemoteHead | undefined, expected: ExpectedRemoteHead) {\n\treturn expected.kind === \"missing\" ? head === undefined : head?.revision === expected.revision;\n}\n\nfunction samePointer(left: LatestPointer, right: LatestPointer) {\n\treturn canonicalJson(left) === canonicalJson(right);\n}\n\nfunction canonicalJson(value: unknown): string {\n\tif (Array.isArray(value))\n\t\treturn JSON.stringify(value.map((item) => JSON.parse(canonicalJson(item))));\n\tif (!value || typeof value !== \"object\") return JSON.stringify(value);\n\treturn JSON.stringify(\n\t\tObject.fromEntries(\n\t\t\tObject.keys(value)\n\t\t\t\t.sort()\n\t\t\t\t.map((key) => [key, JSON.parse(canonicalJson((value as Record<string, unknown>)[key]))]),\n\t\t),\n\t);\n}\n\nfunction joinRemote(...parts: string[]) {\n\treturn parts\n\t\t.flatMap((part) => part.split(\"/\"))\n\t\t.filter(Boolean)\n\t\t.join(\"/\");\n}\n\nfunction secretFreeUrl(value: string) {\n\tconst url = new URL(value);\n\turl.username = \"\";\n\turl.password = \"\";\n\turl.search = \"\";\n\turl.hash = \"\";\n\treturn url.toString();\n}\n\nfunction sha256(value: Buffer) {\n\treturn createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\nfunction throwIfAborted(signal?: AbortSignal) {\n\tif (!signal?.aborted) return;\n\tthrow signal.reason instanceof Error\n\t\t? signal.reason\n\t\t: new DOMException(\"The operation was aborted\", \"AbortError\");\n}\n\nfunction errorMessage(error: unknown) {\n\tif (error instanceof WebDavHttpError) return error.message;\n\treturn error instanceof Error ? error.message : String(error);\n}\n", "import { XMLParser } from \"fast-xml-parser\";\nimport type { RemoteObject, ResolvedWebDavBackend } from \"./types.js\";\n\nconst JSON_LIMIT = 1024 * 1024;\nconst ERROR_LIMIT = 64 * 1024;\nconst SNAPSHOT_LIMIT = 256 * 1024 * 1024;\nconst XML_LIMIT = 1024 * 1024;\nconst REQUEST_TIMEOUT_MS = 30_000;\nconst MAX_REDIRECTS = 3;\n\nexport interface WebDavPutOptions {\n\tifAbsent?: boolean;\n\tifMatch?: string;\n}\n\nexport interface WebDavEntry {\n\thref: string;\n\tetag?: string;\n\tcollection: boolean;\n}\n\nexport class WebDavHttpError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\treadonly status: number,\n\t\toptions?: ErrorOptions,\n\t) {\n\t\tsuper(message, options);\n\t\tthis.name = \"WebDavHttpError\";\n\t}\n}\n\nexport class WebDavPreconditionError extends WebDavHttpError {\n\tconstructor(message = \"WebDAV precondition failed.\") {\n\t\tsuper(message, 412);\n\t\tthis.name = \"WebDavPreconditionError\";\n\t}\n}\n\nexport class WebDavClient {\n\tprivate readonly baseUrl: URL;\n\tprivate readonly authorization: string;\n\n\tconstructor(\n\t\tprivate readonly config: ResolvedWebDavBackend,\n\t\tprivate readonly signal?: AbortSignal,\n\t\tprivate readonly timeoutMs = REQUEST_TIMEOUT_MS,\n\t) {\n\t\tthis.baseUrl = new URL(config.profile.url);\n\t\tassertSafeAuthenticatedUrl(this.baseUrl);\n\t\tif (\n\t\t\t!config.profile.username ||\n\t\t\t!config.profile.password ||\n\t\t\tconfig.profile.username.includes(\":\") ||\n\t\t\thasControlCharacter(config.profile.username) ||\n\t\t\thasControlCharacter(config.profile.password)\n\t\t) {\n\t\t\tthrow new Error(\"Invalid WebDAV credentials.\");\n\t\t}\n\t\tthis.authorization = `Basic ${Buffer.from(`${config.profile.username}:${config.profile.password}`).toString(\"base64\")}`;\n\t}\n\n\tasync getBuffer(remotePath: string): Promise<RemoteObject<Buffer>> {\n\t\tconst response = await this.request(remotePath, { method: \"GET\" });\n\t\tif (response.status === 404) {\n\t\t\tawait response.body?.cancel();\n\t\t\treturn { missing: true };\n\t\t}\n\t\tawait this.requireOk(response, \"read\");\n\t\treturn {\n\t\t\tvalue: await readBounded(response, SNAPSHOT_LIMIT, \"WebDAV response is too large\"),\n\t\t\tetag: response.headers.get(\"etag\") ?? undefined,\n\t\t\tmissing: false,\n\t\t};\n\t}\n\n\tasync getJson<T>(remotePath: string): Promise<RemoteObject<T>> {\n\t\tconst response = await this.request(remotePath, { method: \"GET\" });\n\t\tif (response.status === 404) {\n\t\t\tawait response.body?.cancel();\n\t\t\treturn { missing: true };\n\t\t}\n\t\tawait this.requireOk(response, \"read\");\n\t\tconst bytes = await readBounded(response, JSON_LIMIT, \"WebDAV JSON response is too large\");\n\t\ttry {\n\t\t\treturn {\n\t\t\t\tvalue: JSON.parse(bytes.toString(\"utf8\")) as T,\n\t\t\t\tetag: response.headers.get(\"etag\") ?? undefined,\n\t\t\t\tmissing: false,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthrow new Error(\"WebDAV JSON response is malformed.\", { cause: error });\n\t\t}\n\t}\n\n\tasync putBuffer(\n\t\tremotePath: string,\n\t\tbody: Buffer,\n\t\tcontentType: string,\n\t\toptions: WebDavPutOptions = {},\n\t) {\n\t\tconst headers: Record<string, string> = { \"content-type\": contentType };\n\t\tif (options.ifAbsent) headers[\"if-none-match\"] = \"*\";\n\t\tif (options.ifMatch) headers[\"if-match\"] = options.ifMatch;\n\t\tconst response = await this.request(remotePath, {\n\t\t\tmethod: \"PUT\",\n\t\t\theaders,\n\t\t\tbody: body as unknown as BodyInit,\n\t\t});\n\t\tif (response.status === 412) {\n\t\t\tawait response.body?.cancel();\n\t\t\tthrow new WebDavPreconditionError();\n\t\t}\n\t\tawait this.requireOk(response, \"write\");\n\t\tawait response.body?.cancel();\n\t\treturn response.headers.get(\"etag\") ?? undefined;\n\t}\n\n\tasync putJson(remotePath: string, value: unknown, options: WebDavPutOptions = {}) {\n\t\treturn this.putBuffer(\n\t\t\tremotePath,\n\t\t\tBuffer.from(JSON.stringify(value)),\n\t\t\t\"application/json\",\n\t\t\toptions,\n\t\t);\n\t}\n\n\tasync makeCollection(remotePath: string) {\n\t\tconst response = await this.request(remotePath, { method: \"MKCOL\" });\n\t\tif (response.status === 405) {\n\t\t\tawait response.body?.cancel();\n\t\t\treturn false;\n\t\t}\n\t\tawait this.requireOk(response, \"create collection\");\n\t\tawait response.body?.cancel();\n\t\treturn true;\n\t}\n\n\tasync ensureCollection(remotePath: string) {\n\t\tconst segments = safeSegments(remotePath);\n\t\tfor (let index = 1; index <= segments.length; index += 1) {\n\t\t\tawait this.makeCollection(segments.slice(0, index).join(\"/\"));\n\t\t}\n\t}\n\n\tasync listCollection(remotePath: string): Promise<WebDavEntry[]> {\n\t\tconst response = await this.request(remotePath, {\n\t\t\tmethod: \"PROPFIND\",\n\t\t\theaders: { depth: \"1\", \"content-type\": \"application/xml; charset=utf-8\" },\n\t\t\tbody: '<?xml version=\"1.0\"?><d:propfind xmlns:d=\"DAV:\"><d:prop><d:getetag/><d:resourcetype/></d:prop></d:propfind>',\n\t\t});\n\t\tif (response.status === 404) {\n\t\t\tawait response.body?.cancel();\n\t\t\tthrow new WebDavHttpError(\"WebDAV collection is missing.\", 404);\n\t\t}\n\t\tif (response.status !== 207) await this.requireOk(response, \"list collection\");\n\t\tconst xml = (\n\t\t\tawait readBounded(response, XML_LIMIT, \"WebDAV directory response is too large\")\n\t\t).toString(\"utf8\");\n\t\ttry {\n\t\t\tconst parsed = new XMLParser({\n\t\t\t\tremoveNSPrefix: true,\n\t\t\t\tignoreAttributes: false,\n\t\t\t\tprocessEntities: false,\n\t\t\t}).parse(xml) as {\n\t\t\t\tmultistatus?: { response?: unknown };\n\t\t\t};\n\t\t\tif (!parsed.multistatus || parsed.multistatus.response === undefined) {\n\t\t\t\tthrow new Error(\"Missing DAV multistatus response.\");\n\t\t\t}\n\t\t\tconst responses = asArray(parsed.multistatus.response);\n\t\t\treturn responses.map(parseEntry);\n\t\t} catch (error) {\n\t\t\tthrow new Error(\"WebDAV directory response is malformed.\", { cause: error });\n\t\t}\n\t}\n\n\tasync delete(remotePath: string) {\n\t\tconst response = await this.request(remotePath, { method: \"DELETE\" });\n\t\tif (response.status === 404) {\n\t\t\tawait response.body?.cancel();\n\t\t\treturn;\n\t\t}\n\t\tif (response.status === 207) {\n\t\t\tawait response.body?.cancel();\n\t\t\tthrow new WebDavHttpError(\"WebDAV probe cleanup returned a partial response.\", 207);\n\t\t}\n\t\tawait this.requireOk(response, \"delete probe resource\");\n\t\tawait response.body?.cancel();\n\t}\n\n\tprivate async request(remotePath: string, init: RequestInit) {\n\t\tthrowIfAborted(this.signal);\n\t\tlet url = appendRemotePath(this.baseUrl, remotePath);\n\t\tfor (let redirects = 0; ; redirects += 1) {\n\t\t\tconst timeout = AbortSignal.timeout(this.timeoutMs);\n\t\t\tconst signal = this.signal ? AbortSignal.any([this.signal, timeout]) : timeout;\n\t\t\tlet response: Response;\n\t\t\ttry {\n\t\t\t\tresponse = await fetch(url, {\n\t\t\t\t\t...init,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\taccept: \"*/*\",\n\t\t\t\t\t\tauthorization: this.authorization,\n\t\t\t\t\t\t...headersObject(init.headers),\n\t\t\t\t\t},\n\t\t\t\t\tredirect: \"manual\",\n\t\t\t\t\tsignal,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tthrowIfAborted(this.signal);\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`WebDAV ${String(init.method ?? \"GET\")} request failed for ${redactText(safeUrl(url), this.config)}.`,\n\t\t\t\t\t{\n\t\t\t\t\t\tcause: redactError(error, this.config),\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (![301, 302, 303, 307, 308].includes(response.status)) return response;\n\t\t\tawait response.body?.cancel();\n\t\t\tconst method = String(init.method ?? \"GET\").toUpperCase();\n\t\t\tif ([301, 302, 303].includes(response.status) && method !== \"GET\" && method !== \"HEAD\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`WebDAV refused an ambiguous HTTP ${response.status} redirect for ${method}; configure the canonical collection URL or require HTTP 307/308.`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (redirects >= MAX_REDIRECTS) throw new Error(\"WebDAV redirect limit exceeded.\");\n\t\t\tconst location = response.headers.get(\"location\");\n\t\t\tif (!location) throw new Error(\"WebDAV redirect is missing Location.\");\n\t\t\tconst next = new URL(location, url);\n\t\t\tif (next.origin !== this.baseUrl.origin) {\n\t\t\t\tthrow new Error(\"WebDAV refused a cross-origin authenticated redirect.\");\n\t\t\t}\n\t\t\turl = next;\n\t\t}\n\t}\n\n\tprivate async requireOk(response: Response, action: string) {\n\t\tif (response.ok) return;\n\t\tconst body = (await readBounded(response, ERROR_LIMIT, \"WebDAV error body is too large\"))\n\t\t\t.toString(\"utf8\")\n\t\t\t// biome-ignore lint/suspicious/noControlCharactersInRegex: Remote error text is untrusted terminal input.\n\t\t\t.replace(/[\\u0000-\\u001f\\u007f-\\u009f]/gu, \" \")\n\t\t\t.trim();\n\t\tconst detail = body ? `: ${redactText(body, this.config)}` : \"\";\n\t\tthrow new WebDavHttpError(\n\t\t\t`WebDAV ${action} failed with HTTP ${response.status}${detail}`,\n\t\t\tresponse.status,\n\t\t);\n\t}\n}\n\nfunction assertSafeAuthenticatedUrl(url: URL) {\n\tconst loopback =\n\t\turl.hostname === \"127.0.0.1\" ||\n\t\turl.hostname === \"localhost\" ||\n\t\turl.hostname === \"[::1]\" ||\n\t\turl.hostname === \"::1\";\n\tif (\n\t\turl.username ||\n\t\turl.password ||\n\t\turl.search ||\n\t\turl.hash ||\n\t\t(url.protocol !== \"https:\" && !(url.protocol === \"http:\" && loopback))\n\t) {\n\t\tthrow new Error(\n\t\t\t\"Invalid WebDAV URL: HTTPS is required and embedded credentials, query, or fragment are not allowed.\",\n\t\t);\n\t}\n}\n\nfunction hasControlCharacter(value: string) {\n\treturn [...value].some((character) => {\n\t\tconst code = character.codePointAt(0) ?? 0;\n\t\treturn code < 0x20 || (code >= 0x7f && code <= 0x9f);\n\t});\n}\n\nfunction appendRemotePath(base: URL, remotePath: string) {\n\tconst url = new URL(base);\n\tconst suffix = safeSegments(remotePath).map(encodeURIComponent).join(\"/\");\n\turl.pathname = `${base.pathname.replace(/\\/+$/u, \"\")}/${suffix}`;\n\treturn url;\n}\n\nfunction safeSegments(value: string) {\n\tconst segments = value\n\t\t.replace(/^\\/+|\\/+$/gu, \"\")\n\t\t.split(\"/\")\n\t\t.filter(Boolean);\n\tif (\n\t\tsegments.some(\n\t\t\t(segment) =>\n\t\t\t\tsegment === \".\" ||\n\t\t\t\tsegment === \"..\" ||\n\t\t\t\t// biome-ignore lint/suspicious/noControlCharactersInRegex: Remote path segments cannot contain controls.\n\t\t\t\t/[\\u0000-\\u001f]/u.test(segment),\n\t\t)\n\t) {\n\t\tthrow new Error(\"Invalid WebDAV remote path.\");\n\t}\n\treturn segments;\n}\n\nasync function readBounded(response: Response, limit: number, message: string) {\n\tconst length = Number(response.headers.get(\"content-length\"));\n\tif (Number.isFinite(length) && length > limit) {\n\t\tawait response.body?.cancel();\n\t\tthrow new Error(message);\n\t}\n\tif (!response.body) return Buffer.alloc(0);\n\tconst reader = response.body.getReader();\n\tconst chunks: Buffer[] = [];\n\tlet total = 0;\n\ttry {\n\t\twhile (true) {\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done) break;\n\t\t\ttotal += value.byteLength;\n\t\t\tif (total > limit) throw new Error(message);\n\t\t\tchunks.push(Buffer.from(value));\n\t\t}\n\t} catch (error) {\n\t\tawait reader.cancel().catch(() => undefined);\n\t\tthrow error;\n\t}\n\treturn Buffer.concat(chunks, total);\n}\n\nfunction parseEntry(value: unknown): WebDavEntry {\n\tif (!value || typeof value !== \"object\") throw new Error(\"Invalid WebDAV response entry.\");\n\tconst record = value as Record<string, unknown>;\n\tconst href = typeof record.href === \"string\" ? record.href : undefined;\n\tif (!href) throw new Error(\"Invalid WebDAV response href.\");\n\tconst propstat = asArray(record.propstat).find((item) => {\n\t\tif (!item || typeof item !== \"object\") return false;\n\t\treturn String((item as Record<string, unknown>).status ?? \"\").includes(\" 200 \");\n\t}) as Record<string, unknown> | undefined;\n\tconst prop = propstat?.prop as Record<string, unknown> | undefined;\n\treturn {\n\t\thref,\n\t\tetag: typeof prop?.getetag === \"string\" ? prop.getetag : undefined,\n\t\tcollection:\n\t\t\t!!prop?.resourcetype &&\n\t\t\ttypeof prop.resourcetype === \"object\" &&\n\t\t\tObject.hasOwn(prop.resourcetype, \"collection\"),\n\t};\n}\n\nfunction asArray(value: unknown): unknown[] {\n\tif (value === undefined) return [];\n\treturn Array.isArray(value) ? value : [value];\n}\n\nfunction headersObject(headers: HeadersInit | undefined) {\n\treturn Object.fromEntries(new Headers(headers).entries());\n}\n\nfunction safeUrl(url: URL) {\n\treturn `${url.protocol}//${url.host}${url.pathname}`;\n}\n\nfunction redactError(error: unknown, config: ResolvedWebDavBackend) {\n\tconst message = error instanceof Error ? error.message : String(error);\n\treturn new Error(redactText(message, config));\n}\n\nfunction redactText(value: string, config: ResolvedWebDavBackend) {\n\tlet result = value;\n\tfor (const secret of [config.profile.username, config.profile.password, config.profile.url]) {\n\t\tif (!secret) continue;\n\t\tfor (const variant of new Set([secret, encodeURIComponent(secret)])) {\n\t\t\tresult = result.replace(new RegExp(escapeRegExp(variant), \"giu\"), \"[redacted]\");\n\t\t}\n\t}\n\treturn result\n\t\t.replace(/basic\\s+[a-z0-9+/=]+/giu, \"Basic [redacted]\")\n\t\t.replace(/\\?[^\\s]*/gu, \"?[redacted]\");\n}\n\nfunction escapeRegExp(value: string) {\n\treturn value.replace(/[.*+?^${}()|[\\]\\\\]/gu, \"\\\\$&\");\n}\n\nfunction throwIfAborted(signal?: AbortSignal) {\n\tif (!signal?.aborted) return;\n\tthrow signal.reason instanceof Error\n\t\t? signal.reason\n\t\t: new DOMException(\"The operation was aborted\", \"AbortError\");\n}\n"],
  "mappings": "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",
  "names": ["throwIfAborted"]
}
