@pierre/storage 0.2.1 → 0.2.3

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/schemas.ts","../src/commit-pack.ts","../src/stream-utils.ts","../src/commit.ts","../src/diff-commit.ts","../src/fetch.ts","../src/util.ts","../src/webhook.ts","../src/index.ts"],"names":["z","BufferCtor","buildMessageIterable","normalizeBranchName","API_BASE_URL","crypto","toRefUpdate","snakecaseKeys","importPKCS8","SignJWT"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { RefUpdate, RefUpdateReason } from './types';\n\nexport interface RefUpdateErrorOptions {\n\tstatus: string;\n\tmessage?: string;\n\trefUpdate?: Partial<RefUpdate>;\n\treason?: RefUpdateReason;\n}\n\nexport class RefUpdateError extends Error {\n\tpublic readonly status: string;\n\tpublic readonly reason: RefUpdateReason;\n\tpublic readonly refUpdate?: Partial<RefUpdate>;\n\n\tconstructor(message: string, options: RefUpdateErrorOptions) {\n\t\tsuper(message);\n\t\tthis.name = 'RefUpdateError';\n\t\tthis.status = options.status;\n\t\tthis.reason = options.reason ?? inferRefUpdateReason(options.status);\n\t\tthis.refUpdate = options.refUpdate;\n\t}\n}\n\nconst REF_REASON_MAP: Record<string, RefUpdateReason> = {\n\tprecondition_failed: 'precondition_failed',\n\tconflict: 'conflict',\n\tnot_found: 'not_found',\n\tinvalid: 'invalid',\n\ttimeout: 'timeout',\n\tunauthorized: 'unauthorized',\n\tforbidden: 'forbidden',\n\tunavailable: 'unavailable',\n\tinternal: 'internal',\n\tfailed: 'failed',\n\tok: 'unknown',\n};\n\nexport function inferRefUpdateReason(status?: string): RefUpdateReason {\n\tif (!status) {\n\t\treturn 'unknown';\n\t}\n\n\tconst trimmed = status.trim();\n\tif (trimmed === '') {\n\t\treturn 'unknown';\n\t}\n\n\tconst label = trimmed.toLowerCase();\n\treturn REF_REASON_MAP[label] ?? 'unknown';\n}\n","import { z } from 'zod';\n\nexport const listFilesResponseSchema = z.object({\n\tpaths: z.array(z.string()),\n\tref: z.string(),\n});\n\nexport const branchInfoSchema = z.object({\n\tcursor: z.string(),\n\tname: z.string(),\n\thead_sha: z.string(),\n\tcreated_at: z.string(),\n});\n\nexport const listBranchesResponseSchema = z.object({\n\tbranches: z.array(branchInfoSchema),\n\tnext_cursor: z.string().nullable().optional(),\n\thas_more: z.boolean(),\n});\n\nexport const commitInfoRawSchema = z.object({\n\tsha: z.string(),\n\tmessage: z.string(),\n\tauthor_name: z.string(),\n\tauthor_email: z.string(),\n\tcommitter_name: z.string(),\n\tcommitter_email: z.string(),\n\tdate: z.string(),\n});\n\nexport const listCommitsResponseSchema = z.object({\n\tcommits: z.array(commitInfoRawSchema),\n\tnext_cursor: z.string().nullable().optional(),\n\thas_more: z.boolean(),\n});\n\nexport const diffStatsSchema = z.object({\n\tfiles: z.number(),\n\tadditions: z.number(),\n\tdeletions: z.number(),\n\tchanges: z.number(),\n});\n\nexport const diffFileRawSchema = z.object({\n\tpath: z.string(),\n\tstate: z.string(),\n\told_path: z.string().nullable().optional(),\n\traw: z.string(),\n\tbytes: z.number(),\n\tis_eof: z.boolean(),\n});\n\nexport const filteredFileRawSchema = z.object({\n\tpath: z.string(),\n\tstate: z.string(),\n\told_path: z.string().nullable().optional(),\n\tbytes: z.number(),\n\tis_eof: z.boolean(),\n});\n\nexport const branchDiffResponseSchema = z.object({\n\tbranch: z.string(),\n\tbase: z.string(),\n\tstats: diffStatsSchema,\n\tfiles: z.array(diffFileRawSchema),\n\tfiltered_files: z.array(filteredFileRawSchema),\n});\n\nexport const commitDiffResponseSchema = z.object({\n\tsha: z.string(),\n\tstats: diffStatsSchema,\n\tfiles: z.array(diffFileRawSchema),\n\tfiltered_files: z.array(filteredFileRawSchema),\n});\n\nexport const refUpdateResultSchema = z.object({\n\tbranch: z.string(),\n\told_sha: z.string(),\n\tnew_sha: z.string(),\n\tsuccess: z.boolean(),\n\tstatus: z.string(),\n\tmessage: z.string().optional(),\n});\n\nexport const commitPackCommitSchema = z.object({\n\tcommit_sha: z.string(),\n\ttree_sha: z.string(),\n\ttarget_branch: z.string(),\n\tpack_bytes: z.number(),\n\tblob_count: z.number(),\n});\n\nexport const restoreCommitCommitSchema = commitPackCommitSchema.omit({ blob_count: true });\n\nexport const refUpdateResultWithOptionalsSchema = z.object({\n\tbranch: z.string().optional(),\n\told_sha: z.string().optional(),\n\tnew_sha: z.string().optional(),\n\tsuccess: z.boolean().optional(),\n\tstatus: z.string(),\n\tmessage: z.string().optional(),\n});\n\nexport const commitPackAckSchema = z.object({\n\tcommit: commitPackCommitSchema,\n\tresult: refUpdateResultSchema,\n});\n\nexport const restoreCommitAckSchema = z.object({\n\tcommit: restoreCommitCommitSchema,\n\tresult: refUpdateResultSchema.extend({ success: z.literal(true) }),\n});\n\nexport const commitPackResponseSchema = z.object({\n\tcommit: commitPackCommitSchema.partial().optional().nullable(),\n\tresult: refUpdateResultWithOptionalsSchema,\n});\n\nexport const restoreCommitResponseSchema = z.object({\n\tcommit: restoreCommitCommitSchema.partial().optional().nullable(),\n\tresult: refUpdateResultWithOptionalsSchema,\n});\n\nexport const errorEnvelopeSchema = z.object({\n\terror: z.string(),\n});\n\nexport type ListFilesResponseRaw = z.infer<typeof listFilesResponseSchema>;\nexport type RawBranchInfo = z.infer<typeof branchInfoSchema>;\nexport type ListBranchesResponseRaw = z.infer<typeof listBranchesResponseSchema>;\nexport type RawCommitInfo = z.infer<typeof commitInfoRawSchema>;\nexport type ListCommitsResponseRaw = z.infer<typeof listCommitsResponseSchema>;\nexport type RawFileDiff = z.infer<typeof diffFileRawSchema>;\nexport type RawFilteredFile = z.infer<typeof filteredFileRawSchema>;\nexport type GetBranchDiffResponseRaw = z.infer<typeof branchDiffResponseSchema>;\nexport type GetCommitDiffResponseRaw = z.infer<typeof commitDiffResponseSchema>;\nexport type CommitPackAckRaw = z.infer<typeof commitPackAckSchema>;\nexport type RestoreCommitAckRaw = z.infer<typeof restoreCommitAckSchema>;\n","import { inferRefUpdateReason, RefUpdateError } from './errors';\nimport type { CommitPackAckRaw } from './schemas';\nimport { commitPackResponseSchema, errorEnvelopeSchema } from './schemas';\nimport type { CommitResult, RefUpdate } from './types';\n\nexport type CommitPackAck = CommitPackAckRaw;\n\nexport function buildCommitResult(ack: CommitPackAckRaw): CommitResult {\n\tconst refUpdate = toRefUpdate(ack.result);\n\tif (!ack.result.success) {\n\t\tthrow new RefUpdateError(\n\t\t\tack.result.message ?? `Commit failed with status ${ack.result.status}`,\n\t\t\t{\n\t\t\t\tstatus: ack.result.status,\n\t\t\t\tmessage: ack.result.message,\n\t\t\t\trefUpdate,\n\t\t\t},\n\t\t);\n\t}\n\treturn {\n\t\tcommitSha: ack.commit.commit_sha,\n\t\ttreeSha: ack.commit.tree_sha,\n\t\ttargetBranch: ack.commit.target_branch,\n\t\tpackBytes: ack.commit.pack_bytes,\n\t\tblobCount: ack.commit.blob_count,\n\t\trefUpdate,\n\t};\n}\n\nexport function toRefUpdate(result: CommitPackAckRaw['result']): RefUpdate {\n\treturn {\n\t\tbranch: result.branch,\n\t\toldSha: result.old_sha,\n\t\tnewSha: result.new_sha,\n\t};\n}\n\nexport async function parseCommitPackError(\n\tresponse: Response,\n\tfallbackMessage: string,\n): Promise<{\n\tstatusMessage: string;\n\tstatusLabel: string;\n\trefUpdate?: Partial<RefUpdate>;\n}> {\n\tconst cloned = response.clone();\n\tlet jsonBody: unknown;\n\ttry {\n\t\tjsonBody = await cloned.json();\n\t} catch {\n\t\tjsonBody = undefined;\n\t}\n\n\tlet textBody: string | undefined;\n\tif (jsonBody === undefined) {\n\t\ttry {\n\t\t\ttextBody = await response.text();\n\t\t} catch {\n\t\t\ttextBody = undefined;\n\t\t}\n\t}\n\n\tconst defaultStatus = (() => {\n\t\tconst inferred = inferRefUpdateReason(String(response.status));\n\t\treturn inferred === 'unknown' ? 'failed' : inferred;\n\t})();\n\tlet statusLabel = defaultStatus;\n\tlet refUpdate: Partial<RefUpdate> | undefined;\n\tlet message: string | undefined;\n\n\tif (jsonBody !== undefined) {\n\t\tconst parsedResponse = commitPackResponseSchema.safeParse(jsonBody);\n\t\tif (parsedResponse.success) {\n\t\t\tconst result = parsedResponse.data.result;\n\t\t\tif (typeof result.status === 'string' && result.status.trim() !== '') {\n\t\t\t\tstatusLabel = result.status.trim() as typeof statusLabel;\n\t\t\t}\n\t\t\trefUpdate = toPartialRefUpdateFields(result.branch, result.old_sha, result.new_sha);\n\t\t\tif (typeof result.message === 'string' && result.message.trim() !== '') {\n\t\t\t\tmessage = result.message.trim();\n\t\t\t}\n\t\t}\n\n\t\tif (!message) {\n\t\t\tconst parsedError = errorEnvelopeSchema.safeParse(jsonBody);\n\t\t\tif (parsedError.success) {\n\t\t\t\tconst trimmed = parsedError.data.error.trim();\n\t\t\t\tif (trimmed) {\n\t\t\t\t\tmessage = trimmed;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!message && typeof jsonBody === 'string' && jsonBody.trim() !== '') {\n\t\tmessage = jsonBody.trim();\n\t}\n\n\tif (!message && textBody && textBody.trim() !== '') {\n\t\tmessage = textBody.trim();\n\t}\n\n\treturn {\n\t\tstatusMessage: message ?? fallbackMessage,\n\t\tstatusLabel,\n\t\trefUpdate,\n\t};\n}\n\nfunction toPartialRefUpdateFields(\n\tbranch?: string | null,\n\toldSha?: string | null,\n\tnewSha?: string | null,\n): Partial<RefUpdate> | undefined {\n\tconst refUpdate: Partial<RefUpdate> = {};\n\n\tif (typeof branch === 'string' && branch.trim() !== '') {\n\t\trefUpdate.branch = branch.trim();\n\t}\n\tif (typeof oldSha === 'string' && oldSha.trim() !== '') {\n\t\trefUpdate.oldSha = oldSha.trim();\n\t}\n\tif (typeof newSha === 'string' && newSha.trim() !== '') {\n\t\trefUpdate.newSha = newSha.trim();\n\t}\n\n\treturn Object.keys(refUpdate).length > 0 ? refUpdate : undefined;\n}\n","import type { BlobLike, FileLike, ReadableStreamLike } from './types';\n\ntype NodeBuffer = Uint8Array & { toString(encoding?: string): string };\ninterface NodeBufferConstructor {\n\tfrom(data: Uint8Array): NodeBuffer;\n\tfrom(data: string, encoding?: string): NodeBuffer;\n\tisBuffer(value: unknown): value is NodeBuffer;\n}\n\nconst BufferCtor: NodeBufferConstructor | undefined = (\n\tglobalThis as { Buffer?: NodeBufferConstructor }\n).Buffer;\n\nexport const MAX_CHUNK_BYTES = 4 * 1024 * 1024;\n\nexport type ChunkSegment = {\n\tchunk: Uint8Array;\n\teof: boolean;\n};\n\nexport async function* chunkify(source: AsyncIterable<Uint8Array>): AsyncIterable<ChunkSegment> {\n\tlet pending: Uint8Array | null = null;\n\tlet produced = false;\n\n\tfor await (const value of source) {\n\t\tconst bytes = value;\n\n\t\tif (pending && pending.byteLength === MAX_CHUNK_BYTES) {\n\t\t\tyield { chunk: pending, eof: false };\n\t\t\tproduced = true;\n\t\t\tpending = null;\n\t\t}\n\n\t\tconst merged: Uint8Array = pending ? concatChunks(pending, bytes) : bytes;\n\t\tpending = null;\n\n\t\tlet cursor: Uint8Array = merged;\n\t\twhile (cursor.byteLength > MAX_CHUNK_BYTES) {\n\t\t\tconst chunk: Uint8Array = cursor.slice(0, MAX_CHUNK_BYTES);\n\t\t\tcursor = cursor.slice(MAX_CHUNK_BYTES);\n\t\t\tyield { chunk, eof: false };\n\t\t\tproduced = true;\n\t\t}\n\n\t\tpending = cursor;\n\t}\n\n\tif (pending) {\n\t\tyield { chunk: pending, eof: true };\n\t\tproduced = true;\n\t}\n\n\tif (!produced) {\n\t\tyield { chunk: new Uint8Array(0), eof: true };\n\t}\n}\n\nexport async function* toAsyncIterable(\n\tsource:\n\t\t| string\n\t\t| Uint8Array\n\t\t| ArrayBuffer\n\t\t| BlobLike\n\t\t| FileLike\n\t\t| ReadableStreamLike<Uint8Array | ArrayBuffer | ArrayBufferView | string>\n\t\t| AsyncIterable<Uint8Array | ArrayBuffer | ArrayBufferView | string>\n\t\t| Iterable<Uint8Array | ArrayBuffer | ArrayBufferView | string>,\n): AsyncIterable<Uint8Array> {\n\tif (typeof source === 'string') {\n\t\tyield new TextEncoder().encode(source);\n\t\treturn;\n\t}\n\tif (source instanceof Uint8Array) {\n\t\tyield source;\n\t\treturn;\n\t}\n\tif (source instanceof ArrayBuffer) {\n\t\tyield new Uint8Array(source);\n\t\treturn;\n\t}\n\tif (ArrayBuffer.isView(source)) {\n\t\tyield new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n\t\treturn;\n\t}\n\tif (isBlobLike(source)) {\n\t\tconst stream = source.stream();\n\t\tif (isAsyncIterable(stream)) {\n\t\t\tfor await (const chunk of stream as AsyncIterable<unknown>) {\n\t\t\t\tyield ensureUint8Array(chunk);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (isReadableStreamLike(stream)) {\n\t\t\tyield* readReadableStream(stream);\n\t\t\treturn;\n\t\t}\n\t}\n\tif (isReadableStreamLike(source)) {\n\t\tyield* readReadableStream(source);\n\t\treturn;\n\t}\n\tif (isAsyncIterable(source)) {\n\t\tfor await (const chunk of source as AsyncIterable<unknown>) {\n\t\t\tyield ensureUint8Array(chunk);\n\t\t}\n\t\treturn;\n\t}\n\tif (isIterable(source)) {\n\t\tfor (const chunk of source as Iterable<unknown>) {\n\t\t\tyield ensureUint8Array(chunk);\n\t\t}\n\t\treturn;\n\t}\n\tthrow new Error('Unsupported content source; expected binary data');\n}\n\nexport function base64Encode(bytes: Uint8Array): string {\n\tif (BufferCtor) {\n\t\treturn BufferCtor.from(bytes).toString('base64');\n\t}\n\tlet binary = '';\n\tfor (let i = 0; i < bytes.byteLength; i++) {\n\t\tbinary += String.fromCharCode(bytes[i]);\n\t}\n\tconst btoaFn = (globalThis as { btoa?: (data: string) => string }).btoa;\n\tif (typeof btoaFn === 'function') {\n\t\treturn btoaFn(binary);\n\t}\n\tthrow new Error('Base64 encoding is not supported in this environment');\n}\n\nexport function requiresDuplex(body: unknown): boolean {\n\tif (!body || typeof body !== 'object') {\n\t\treturn false;\n\t}\n\n\tif (typeof (body as { [Symbol.asyncIterator]?: unknown })[Symbol.asyncIterator] === 'function') {\n\t\treturn true;\n\t}\n\n\tconst readableStreamCtor = (\n\t\tglobalThis as {\n\t\t\tReadableStream?: new (...args: unknown[]) => unknown;\n\t\t}\n\t).ReadableStream;\n\tif (readableStreamCtor && body instanceof readableStreamCtor) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nexport function toRequestBody(iterable: AsyncIterable<Uint8Array>): unknown {\n\tconst readableStreamCtor = (\n\t\tglobalThis as { ReadableStream?: new (underlyingSource: unknown) => unknown }\n\t).ReadableStream;\n\tif (typeof readableStreamCtor === 'function') {\n\t\tconst iterator = iterable[Symbol.asyncIterator]();\n\t\treturn new readableStreamCtor({\n\t\t\tasync pull(controller: { enqueue(chunk: Uint8Array): void; close(): void }) {\n\t\t\t\tconst { value, done } = await iterator.next();\n\t\t\t\tif (done) {\n\t\t\t\t\tcontroller.close();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcontroller.enqueue(value!);\n\t\t\t},\n\t\t\tasync cancel(reason: unknown) {\n\t\t\t\tif (typeof iterator.return === 'function') {\n\t\t\t\t\tawait iterator.return(reason);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t}\n\treturn iterable;\n}\n\nasync function* readReadableStream(stream: ReadableStreamLike<unknown>): AsyncIterable<Uint8Array> {\n\tconst reader = stream.getReader();\n\ttry {\n\t\twhile (true) {\n\t\t\tconst { value, done } = await reader.read();\n\t\t\tif (done) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (value !== undefined) {\n\t\t\t\tyield ensureUint8Array(value);\n\t\t\t}\n\t\t}\n\t} finally {\n\t\treader.releaseLock?.();\n\t}\n}\n\nfunction ensureUint8Array(value: unknown): Uint8Array {\n\tif (value instanceof Uint8Array) {\n\t\treturn value;\n\t}\n\tif (value instanceof ArrayBuffer) {\n\t\treturn new Uint8Array(value);\n\t}\n\tif (ArrayBuffer.isView(value)) {\n\t\treturn new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n\t}\n\tif (typeof value === 'string') {\n\t\treturn new TextEncoder().encode(value);\n\t}\n\tif (BufferCtor && BufferCtor.isBuffer(value)) {\n\t\treturn value as Uint8Array;\n\t}\n\tthrow new Error('Unsupported chunk type; expected binary data');\n}\n\nfunction isBlobLike(value: unknown): value is BlobLike {\n\treturn (\n\t\ttypeof value === 'object' && value !== null && typeof (value as BlobLike).stream === 'function'\n\t);\n}\n\nfunction isReadableStreamLike<T>(value: unknown): value is ReadableStreamLike<T> {\n\treturn (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\ttypeof (value as ReadableStreamLike<T>).getReader === 'function'\n\t);\n}\n\nfunction isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n\treturn (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\tSymbol.asyncIterator in (value as Record<string, unknown>)\n\t);\n}\n\nfunction isIterable(value: unknown): value is Iterable<unknown> {\n\treturn (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\tSymbol.iterator in (value as Record<string, unknown>)\n\t);\n}\n\nfunction concatChunks(a: Uint8Array, b: Uint8Array): Uint8Array {\n\tif (a.byteLength === 0) {\n\t\treturn b;\n\t}\n\tif (b.byteLength === 0) {\n\t\treturn a;\n\t}\n\tconst merged = new Uint8Array(a.byteLength + b.byteLength);\n\tmerged.set(a, 0);\n\tmerged.set(b, a.byteLength);\n\treturn merged;\n}\n","import { buildCommitResult, parseCommitPackError } from './commit-pack';\nimport { RefUpdateError } from './errors';\nimport type { CommitPackAckRaw } from './schemas';\nimport { commitPackAckSchema } from './schemas';\nimport {\n\tbase64Encode,\n\ttype ChunkSegment,\n\tchunkify,\n\trequiresDuplex,\n\ttoAsyncIterable,\n\ttoRequestBody,\n} from './stream-utils';\nimport type {\n\tCommitBuilder,\n\tCommitFileOptions,\n\tCommitFileSource,\n\tCommitResult,\n\tCommitSignature,\n\tCommitTextFileOptions,\n\tCreateCommitOptions,\n\tLegacyCreateCommitOptions,\n} from './types';\n\nconst DEFAULT_TTL_SECONDS = 60 * 60;\nconst HEADS_REF_PREFIX = 'refs/heads/';\n\ntype NodeBuffer = Uint8Array & { toString(encoding?: string): string };\ninterface NodeBufferConstructor {\n\tfrom(data: Uint8Array): NodeBuffer;\n\tfrom(data: string, encoding?: string): NodeBuffer;\n\tisBuffer(value: unknown): value is NodeBuffer;\n}\n\nconst BufferCtor: NodeBufferConstructor | undefined = (\n\tglobalThis as { Buffer?: NodeBufferConstructor }\n).Buffer;\n\ninterface CommitMetadataPayload {\n\ttarget_branch: string;\n\texpected_head_sha?: string;\n\tbase_branch?: string;\n\tcommit_message: string;\n\tephemeral?: boolean;\n\tephemeral_base?: boolean;\n\tauthor: {\n\t\tname: string;\n\t\temail: string;\n\t};\n\tcommitter?: {\n\t\tname: string;\n\t\temail: string;\n\t};\n\tfiles: Array<{\n\t\tpath: string;\n\t\tcontent_id: string;\n\t\toperation?: 'upsert' | 'delete';\n\t\tmode?: string;\n\t}>;\n}\n\ninterface CommitTransportRequest {\n\tauthorization: string;\n\tsignal?: AbortSignal;\n\tmetadata: CommitMetadataPayload;\n\tblobs: Array<{ contentId: string; chunks: AsyncIterable<ChunkSegment> }>;\n}\n\ninterface CommitTransport {\n\tsend(request: CommitTransportRequest): Promise<CommitPackAckRaw>;\n}\n\ntype NormalizedCommitOptions = {\n\ttargetBranch: string;\n\tcommitMessage: string;\n\texpectedHeadSha?: string;\n\tbaseBranch?: string;\n\tephemeral?: boolean;\n\tephemeralBase?: boolean;\n\tauthor: CommitSignature;\n\tcommitter?: CommitSignature;\n\tsignal?: AbortSignal;\n\tttl?: number;\n};\n\ninterface CommitBuilderDeps {\n\toptions: CreateCommitOptions;\n\tgetAuthToken: () => Promise<string>;\n\ttransport: CommitTransport;\n}\n\ntype FileOperationState = {\n\tpath: string;\n\tcontentId: string;\n\tmode?: string;\n\toperation: 'upsert' | 'delete';\n\tstreamFactory?: () => AsyncIterable<Uint8Array>;\n};\n\nexport class CommitBuilderImpl implements CommitBuilder {\n\tprivate readonly options: NormalizedCommitOptions;\n\tprivate readonly getAuthToken: () => Promise<string>;\n\tprivate readonly transport: CommitTransport;\n\tprivate readonly operations: FileOperationState[] = [];\n\tprivate sent = false;\n\n\tconstructor(deps: CommitBuilderDeps) {\n\t\tthis.options = normalizeCommitOptions(deps.options);\n\t\tthis.getAuthToken = deps.getAuthToken;\n\t\tthis.transport = deps.transport;\n\n\t\tconst trimmedMessage = this.options.commitMessage?.trim();\n\t\tconst trimmedAuthorName = this.options.author?.name?.trim();\n\t\tconst trimmedAuthorEmail = this.options.author?.email?.trim();\n\n\t\tif (!trimmedMessage) {\n\t\t\tthrow new Error('createCommit commitMessage is required');\n\t\t}\n\t\tif (!trimmedAuthorName || !trimmedAuthorEmail) {\n\t\t\tthrow new Error('createCommit author name and email are required');\n\t\t}\n\t\tthis.options.commitMessage = trimmedMessage;\n\t\tthis.options.author = {\n\t\t\tname: trimmedAuthorName,\n\t\t\temail: trimmedAuthorEmail,\n\t\t};\n\t\tif (typeof this.options.expectedHeadSha === 'string') {\n\t\t\tthis.options.expectedHeadSha = this.options.expectedHeadSha.trim();\n\t\t}\n\t\tif (typeof this.options.baseBranch === 'string') {\n\t\t\tconst trimmedBase = this.options.baseBranch.trim();\n\t\t\tif (trimmedBase === '') {\n\t\t\t\tdelete this.options.baseBranch;\n\t\t\t} else {\n\t\t\t\tif (trimmedBase.startsWith('refs/')) {\n\t\t\t\t\tthrow new Error('createCommit baseBranch must not include refs/ prefix');\n\t\t\t\t}\n\t\t\t\tthis.options.baseBranch = trimmedBase;\n\t\t\t}\n\t\t}\n\n\t\tif (this.options.ephemeralBase && !this.options.baseBranch) {\n\t\t\tthrow new Error('createCommit ephemeralBase requires baseBranch');\n\t\t}\n\t}\n\n\taddFile(path: string, source: CommitFileSource, options?: CommitFileOptions): CommitBuilder {\n\t\tthis.ensureNotSent();\n\t\tconst normalizedPath = this.normalizePath(path);\n\t\tconst contentId = randomContentId();\n\t\tconst mode = options?.mode ?? '100644';\n\n\t\tthis.operations.push({\n\t\t\tpath: normalizedPath,\n\t\t\tcontentId,\n\t\t\tmode,\n\t\t\toperation: 'upsert',\n\t\t\tstreamFactory: () => toAsyncIterable(source),\n\t\t});\n\n\t\treturn this;\n\t}\n\n\taddFileFromString(\n\t\tpath: string,\n\t\tcontents: string,\n\t\toptions?: CommitTextFileOptions,\n\t): CommitBuilder {\n\t\tconst encoding = options?.encoding ?? 'utf8';\n\t\tconst normalizedEncoding = encoding === 'utf-8' ? 'utf8' : encoding;\n\t\tlet data: Uint8Array;\n\t\tif (normalizedEncoding === 'utf8') {\n\t\t\tdata = new TextEncoder().encode(contents);\n\t\t} else if (BufferCtor) {\n\t\t\tdata = BufferCtor.from(\n\t\t\t\tcontents,\n\t\t\t\tnormalizedEncoding as Parameters<NodeBufferConstructor['from']>[1],\n\t\t\t);\n\t\t} else {\n\t\t\tthrow new Error(\n\t\t\t\t`Unsupported encoding \"${encoding}\" in this environment. Non-UTF encodings require Node.js Buffer support.`,\n\t\t\t);\n\t\t}\n\t\treturn this.addFile(path, data, options);\n\t}\n\n\tdeletePath(path: string): CommitBuilder {\n\t\tthis.ensureNotSent();\n\t\tconst normalizedPath = this.normalizePath(path);\n\t\tthis.operations.push({\n\t\t\tpath: normalizedPath,\n\t\t\tcontentId: randomContentId(),\n\t\t\toperation: 'delete',\n\t\t});\n\t\treturn this;\n\t}\n\n\tasync send(): Promise<CommitResult> {\n\t\tthis.ensureNotSent();\n\t\tthis.sent = true;\n\n\t\tconst metadata = this.buildMetadata();\n\t\tconst blobEntries = this.operations\n\t\t\t.filter((op) => op.operation === 'upsert' && op.streamFactory)\n\t\t\t.map((op) => ({\n\t\t\t\tcontentId: op.contentId,\n\t\t\t\tchunks: chunkify(op.streamFactory!()),\n\t\t\t}));\n\n\t\tconst authorization = await this.getAuthToken();\n\t\tconst ack = await this.transport.send({\n\t\t\tauthorization,\n\t\t\tsignal: this.options.signal,\n\t\t\tmetadata,\n\t\t\tblobs: blobEntries,\n\t\t});\n\t\treturn buildCommitResult(ack);\n\t}\n\n\tprivate buildMetadata(): CommitMetadataPayload {\n\t\tconst files = this.operations.map((op) => {\n\t\t\tconst entry: CommitMetadataPayload['files'][number] = {\n\t\t\t\tpath: op.path,\n\t\t\t\tcontent_id: op.contentId,\n\t\t\t\toperation: op.operation,\n\t\t\t};\n\t\t\tif (op.mode) {\n\t\t\t\tentry.mode = op.mode;\n\t\t\t}\n\t\t\treturn entry;\n\t\t});\n\n\t\tconst metadata: CommitMetadataPayload = {\n\t\t\ttarget_branch: this.options.targetBranch,\n\t\t\tcommit_message: this.options.commitMessage,\n\t\t\tauthor: {\n\t\t\t\tname: this.options.author.name,\n\t\t\t\temail: this.options.author.email,\n\t\t\t},\n\t\t\tfiles,\n\t\t};\n\n\t\tif (this.options.expectedHeadSha) {\n\t\t\tmetadata.expected_head_sha = this.options.expectedHeadSha;\n\t\t}\n\t\tif (this.options.baseBranch) {\n\t\t\tmetadata.base_branch = this.options.baseBranch;\n\t\t}\n\t\tif (this.options.committer) {\n\t\t\tmetadata.committer = {\n\t\t\t\tname: this.options.committer.name,\n\t\t\t\temail: this.options.committer.email,\n\t\t\t};\n\t\t}\n\n\t\tif (this.options.ephemeral) {\n\t\t\tmetadata.ephemeral = true;\n\t\t}\n\t\tif (this.options.ephemeralBase) {\n\t\t\tmetadata.ephemeral_base = true;\n\t\t}\n\n\t\treturn metadata;\n\t}\n\n\tprivate ensureNotSent(): void {\n\t\tif (this.sent) {\n\t\t\tthrow new Error('createCommit builder cannot be reused after send()');\n\t\t}\n\t}\n\n\tprivate normalizePath(path: string): string {\n\t\tif (!path || typeof path !== 'string' || path.trim() === '') {\n\t\t\tthrow new Error('File path must be a non-empty string');\n\t\t}\n\t\treturn path.replace(/^\\//, '');\n\t}\n}\n\nexport class FetchCommitTransport implements CommitTransport {\n\tprivate readonly url: string;\n\n\tconstructor(config: { baseUrl: string; version: number }) {\n\t\tconst trimmedBase = config.baseUrl.replace(/\\/+$/, '');\n\t\tthis.url = `${trimmedBase}/api/v${config.version}/repos/commit-pack`;\n\t}\n\n\tasync send(request: CommitTransportRequest): Promise<CommitPackAckRaw> {\n\t\tconst bodyIterable = buildMessageIterable(request.metadata, request.blobs);\n\t\tconst body = toRequestBody(bodyIterable);\n\n\t\tconst init: RequestInit = {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${request.authorization}`,\n\t\t\t\t'Content-Type': 'application/x-ndjson',\n\t\t\t\tAccept: 'application/json',\n\t\t\t},\n\t\t\tbody: body as any,\n\t\t\tsignal: request.signal,\n\t\t};\n\n\t\tif (requiresDuplex(body)) {\n\t\t\t(init as RequestInit & { duplex: 'half' }).duplex = 'half';\n\t\t}\n\n\t\tconst response = await fetch(this.url, init);\n\n\t\tif (!response.ok) {\n\t\t\tconst fallbackMessage = `createCommit request failed (${response.status} ${response.statusText})`;\n\t\t\tconst { statusMessage, statusLabel, refUpdate } = await parseCommitPackError(\n\t\t\t\tresponse,\n\t\t\t\tfallbackMessage,\n\t\t\t);\n\t\t\tthrow new RefUpdateError(statusMessage, {\n\t\t\t\tstatus: statusLabel,\n\t\t\t\tmessage: statusMessage,\n\t\t\t\trefUpdate,\n\t\t\t});\n\t\t}\n\n\t\tconst ack = commitPackAckSchema.parse(await response.json());\n\t\treturn ack;\n\t}\n}\n\nfunction buildMessageIterable(\n\tmetadata: CommitMetadataPayload,\n\tblobs: Array<{ contentId: string; chunks: AsyncIterable<ChunkSegment> }>,\n): AsyncIterable<Uint8Array> {\n\tconst encoder = new TextEncoder();\n\treturn {\n\t\tasync *[Symbol.asyncIterator]() {\n\t\t\tyield encoder.encode(`${JSON.stringify({ metadata })}\\n`);\n\t\t\tfor (const blob of blobs) {\n\t\t\t\tfor await (const segment of blob.chunks) {\n\t\t\t\t\tconst payload = {\n\t\t\t\t\t\tblob_chunk: {\n\t\t\t\t\t\t\tcontent_id: blob.contentId,\n\t\t\t\t\t\t\tdata: base64Encode(segment.chunk),\n\t\t\t\t\t\t\teof: segment.eof,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t\tyield encoder.encode(`${JSON.stringify(payload)}\\n`);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t};\n}\n\nfunction randomContentId(): string {\n\tconst cryptoObj = globalThis.crypto;\n\tif (cryptoObj && typeof cryptoObj.randomUUID === 'function') {\n\t\treturn cryptoObj.randomUUID();\n\t}\n\tconst random = Math.random().toString(36).slice(2);\n\treturn `cid-${Date.now().toString(36)}-${random}`;\n}\n\nfunction normalizeCommitOptions(options: CreateCommitOptions): NormalizedCommitOptions {\n\treturn {\n\t\ttargetBranch: resolveTargetBranch(options),\n\t\tcommitMessage: options.commitMessage,\n\t\texpectedHeadSha: options.expectedHeadSha,\n\t\tbaseBranch: options.baseBranch,\n\t\tephemeral: options.ephemeral === true,\n\t\tephemeralBase: options.ephemeralBase === true,\n\t\tauthor: options.author,\n\t\tcommitter: options.committer,\n\t\tsignal: options.signal,\n\t\tttl: options.ttl,\n\t};\n}\n\nfunction resolveTargetBranch(options: CreateCommitOptions): string {\n\tconst branchCandidate =\n\t\ttypeof options.targetBranch === 'string' ? options.targetBranch.trim() : '';\n\tif (branchCandidate) {\n\t\treturn normalizeBranchName(branchCandidate);\n\t}\n\tif (hasLegacyTargetRef(options)) {\n\t\treturn normalizeLegacyTargetRef(options.targetRef);\n\t}\n\tthrow new Error('createCommit targetBranch is required');\n}\n\nfunction normalizeBranchName(value: string): string {\n\tconst trimmed = value.trim();\n\tif (!trimmed) {\n\t\tthrow new Error('createCommit targetBranch is required');\n\t}\n\tif (trimmed.startsWith(HEADS_REF_PREFIX)) {\n\t\tconst branch = trimmed.slice(HEADS_REF_PREFIX.length).trim();\n\t\tif (!branch) {\n\t\t\tthrow new Error('createCommit targetBranch is required');\n\t\t}\n\t\treturn branch;\n\t}\n\tif (trimmed.startsWith('refs/')) {\n\t\tthrow new Error('createCommit targetBranch must not include refs/ prefix');\n\t}\n\treturn trimmed;\n}\n\nfunction normalizeLegacyTargetRef(ref: string): string {\n\tconst trimmed = ref.trim();\n\tif (!trimmed) {\n\t\tthrow new Error('createCommit targetRef is required');\n\t}\n\tif (!trimmed.startsWith(HEADS_REF_PREFIX)) {\n\t\tthrow new Error('createCommit targetRef must start with refs/heads/');\n\t}\n\tconst branch = trimmed.slice(HEADS_REF_PREFIX.length).trim();\n\tif (!branch) {\n\t\tthrow new Error('createCommit targetRef must include a branch name');\n\t}\n\treturn branch;\n}\n\nfunction hasLegacyTargetRef(options: CreateCommitOptions): options is LegacyCreateCommitOptions {\n\treturn typeof (options as LegacyCreateCommitOptions).targetRef === 'string';\n}\n\nexport function createCommitBuilder(deps: CommitBuilderDeps): CommitBuilder {\n\treturn new CommitBuilderImpl(deps);\n}\n\nexport function resolveCommitTtlSeconds(options?: { ttl?: number }): number {\n\tif (typeof options?.ttl === 'number' && options.ttl > 0) {\n\t\treturn options.ttl;\n\t}\n\treturn DEFAULT_TTL_SECONDS;\n}\n","import { buildCommitResult, parseCommitPackError } from './commit-pack';\nimport { RefUpdateError } from './errors';\nimport type { CommitPackAckRaw } from './schemas';\nimport { commitPackAckSchema } from './schemas';\nimport {\n\tbase64Encode,\n\ttype ChunkSegment,\n\tchunkify,\n\trequiresDuplex,\n\ttoAsyncIterable,\n\ttoRequestBody,\n} from './stream-utils';\nimport type {\n\tCommitResult,\n\tCommitSignature,\n\tCreateCommitFromDiffOptions,\n\tDiffSource,\n} from './types';\n\ninterface DiffCommitMetadataPayload {\n\ttarget_branch: string;\n\texpected_head_sha?: string;\n\tbase_branch?: string;\n\tcommit_message: string;\n\tephemeral?: boolean;\n\tephemeral_base?: boolean;\n\tauthor: {\n\t\tname: string;\n\t\temail: string;\n\t};\n\tcommitter?: {\n\t\tname: string;\n\t\temail: string;\n\t};\n}\n\ninterface DiffCommitTransportRequest {\n\tauthorization: string;\n\tsignal?: AbortSignal;\n\tmetadata: DiffCommitMetadataPayload;\n\tdiffChunks: AsyncIterable<ChunkSegment>;\n}\n\ninterface DiffCommitTransport {\n\tsend(request: DiffCommitTransportRequest): Promise<CommitPackAckRaw>;\n}\n\ntype NormalizedDiffCommitOptions = {\n\ttargetBranch: string;\n\tcommitMessage: string;\n\texpectedHeadSha?: string;\n\tbaseBranch?: string;\n\tephemeral?: boolean;\n\tephemeralBase?: boolean;\n\tauthor: CommitSignature;\n\tcommitter?: CommitSignature;\n\tsignal?: AbortSignal;\n\tttl?: number;\n\tinitialDiff: DiffSource;\n};\n\ninterface CommitFromDiffSendDeps {\n\toptions: CreateCommitFromDiffOptions;\n\tgetAuthToken: () => Promise<string>;\n\ttransport: DiffCommitTransport;\n}\n\nclass DiffCommitExecutor {\n\tprivate readonly options: NormalizedDiffCommitOptions;\n\tprivate readonly getAuthToken: () => Promise<string>;\n\tprivate readonly transport: DiffCommitTransport;\n\tprivate readonly diffFactory: () => AsyncIterable<Uint8Array>;\n\tprivate sent = false;\n\n\tconstructor(deps: CommitFromDiffSendDeps) {\n\t\tthis.options = normalizeDiffCommitOptions(deps.options);\n\t\tthis.getAuthToken = deps.getAuthToken;\n\t\tthis.transport = deps.transport;\n\n\t\tconst trimmedMessage = this.options.commitMessage?.trim();\n\t\tconst trimmedAuthorName = this.options.author?.name?.trim();\n\t\tconst trimmedAuthorEmail = this.options.author?.email?.trim();\n\n\t\tif (!trimmedMessage) {\n\t\t\tthrow new Error('createCommitFromDiff commitMessage is required');\n\t\t}\n\t\tif (!trimmedAuthorName || !trimmedAuthorEmail) {\n\t\t\tthrow new Error('createCommitFromDiff author name and email are required');\n\t\t}\n\n\t\tthis.options.commitMessage = trimmedMessage;\n\t\tthis.options.author = {\n\t\t\tname: trimmedAuthorName,\n\t\t\temail: trimmedAuthorEmail,\n\t\t};\n\n\t\tif (typeof this.options.expectedHeadSha === 'string') {\n\t\t\tthis.options.expectedHeadSha = this.options.expectedHeadSha.trim();\n\t\t}\n\t\tif (typeof this.options.baseBranch === 'string') {\n\t\t\tconst trimmedBase = this.options.baseBranch.trim();\n\t\t\tif (trimmedBase === '') {\n\t\t\t\tdelete this.options.baseBranch;\n\t\t\t} else {\n\t\t\t\tif (trimmedBase.startsWith('refs/')) {\n\t\t\t\t\tthrow new Error('createCommitFromDiff baseBranch must not include refs/ prefix');\n\t\t\t\t}\n\t\t\t\tthis.options.baseBranch = trimmedBase;\n\t\t\t}\n\t\t}\n\t\tif (this.options.ephemeralBase && !this.options.baseBranch) {\n\t\t\tthrow new Error('createCommitFromDiff ephemeralBase requires baseBranch');\n\t\t}\n\n\t\tthis.diffFactory = () => toAsyncIterable(this.options.initialDiff);\n\t}\n\n\tasync send(): Promise<CommitResult> {\n\t\tthis.ensureNotSent();\n\t\tthis.sent = true;\n\n\t\tconst metadata = this.buildMetadata();\n\t\tconst diffIterable = chunkify(this.diffFactory());\n\n\t\tconst authorization = await this.getAuthToken();\n\t\tconst ack = await this.transport.send({\n\t\t\tauthorization,\n\t\t\tsignal: this.options.signal,\n\t\t\tmetadata,\n\t\t\tdiffChunks: diffIterable,\n\t\t});\n\n\t\treturn buildCommitResult(ack);\n\t}\n\n\tprivate buildMetadata(): DiffCommitMetadataPayload {\n\t\tconst metadata: DiffCommitMetadataPayload = {\n\t\t\ttarget_branch: this.options.targetBranch,\n\t\t\tcommit_message: this.options.commitMessage,\n\t\t\tauthor: {\n\t\t\t\tname: this.options.author.name,\n\t\t\t\temail: this.options.author.email,\n\t\t\t},\n\t\t};\n\n\t\tif (this.options.expectedHeadSha) {\n\t\t\tmetadata.expected_head_sha = this.options.expectedHeadSha;\n\t\t}\n\t\tif (this.options.baseBranch) {\n\t\t\tmetadata.base_branch = this.options.baseBranch;\n\t\t}\n\t\tif (this.options.committer) {\n\t\t\tmetadata.committer = {\n\t\t\t\tname: this.options.committer.name,\n\t\t\t\temail: this.options.committer.email,\n\t\t\t};\n\t\t}\n\t\tif (this.options.ephemeral) {\n\t\t\tmetadata.ephemeral = true;\n\t\t}\n\t\tif (this.options.ephemeralBase) {\n\t\t\tmetadata.ephemeral_base = true;\n\t\t}\n\n\t\treturn metadata;\n\t}\n\n\tprivate ensureNotSent(): void {\n\t\tif (this.sent) {\n\t\t\tthrow new Error('createCommitFromDiff cannot be reused after send()');\n\t\t}\n\t}\n}\n\nexport class FetchDiffCommitTransport implements DiffCommitTransport {\n\tprivate readonly url: string;\n\n\tconstructor(config: { baseUrl: string; version: number }) {\n\t\tconst trimmedBase = config.baseUrl.replace(/\\/+$/, '');\n\t\tthis.url = `${trimmedBase}/api/v${config.version}/repos/diff-commit`;\n\t}\n\n\tasync send(request: DiffCommitTransportRequest): Promise<CommitPackAckRaw> {\n\t\tconst bodyIterable = buildMessageIterable(request.metadata, request.diffChunks);\n\t\tconst body = toRequestBody(bodyIterable);\n\n\t\tconst init: RequestInit = {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${request.authorization}`,\n\t\t\t\t'Content-Type': 'application/x-ndjson',\n\t\t\t\tAccept: 'application/json',\n\t\t\t},\n\t\t\tbody: body as any,\n\t\t\tsignal: request.signal,\n\t\t};\n\n\t\tif (requiresDuplex(body)) {\n\t\t\t(init as RequestInit & { duplex: 'half' }).duplex = 'half';\n\t\t}\n\n\t\tconst response = await fetch(this.url, init);\n\t\tif (!response.ok) {\n\t\t\tconst fallbackMessage = `createCommitFromDiff request failed (${response.status} ${response.statusText})`;\n\t\t\tconst { statusMessage, statusLabel, refUpdate } = await parseCommitPackError(\n\t\t\t\tresponse,\n\t\t\t\tfallbackMessage,\n\t\t\t);\n\t\t\tthrow new RefUpdateError(statusMessage, {\n\t\t\t\tstatus: statusLabel,\n\t\t\t\tmessage: statusMessage,\n\t\t\t\trefUpdate,\n\t\t\t});\n\t\t}\n\n\t\treturn commitPackAckSchema.parse(await response.json());\n\t}\n}\n\nfunction buildMessageIterable(\n\tmetadata: DiffCommitMetadataPayload,\n\tdiffChunks: AsyncIterable<ChunkSegment>,\n): AsyncIterable<Uint8Array> {\n\tconst encoder = new TextEncoder();\n\treturn {\n\t\tasync *[Symbol.asyncIterator]() {\n\t\t\tyield encoder.encode(`${JSON.stringify({ metadata })}\\n`);\n\t\t\tfor await (const segment of diffChunks) {\n\t\t\t\tconst payload = {\n\t\t\t\t\tdiff_chunk: {\n\t\t\t\t\t\tdata: base64Encode(segment.chunk),\n\t\t\t\t\t\teof: segment.eof,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tyield encoder.encode(`${JSON.stringify(payload)}\\n`);\n\t\t\t}\n\t\t},\n\t};\n}\n\nfunction normalizeDiffCommitOptions(\n\toptions: CreateCommitFromDiffOptions,\n): NormalizedDiffCommitOptions {\n\tif (!options || typeof options !== 'object') {\n\t\tthrow new Error('createCommitFromDiff options are required');\n\t}\n\n\tif (options.diff === undefined || options.diff === null) {\n\t\tthrow new Error('createCommitFromDiff diff is required');\n\t}\n\n\tconst targetBranch = normalizeBranchName(options.targetBranch);\n\n\tlet committer: CommitSignature | undefined;\n\tif (options.committer) {\n\t\tconst name = options.committer.name?.trim();\n\t\tconst email = options.committer.email?.trim();\n\t\tif (!name || !email) {\n\t\t\tthrow new Error('createCommitFromDiff committer name and email are required when provided');\n\t\t}\n\t\tcommitter = { name, email };\n\t}\n\n\treturn {\n\t\ttargetBranch,\n\t\tcommitMessage: options.commitMessage,\n\t\texpectedHeadSha: options.expectedHeadSha,\n\t\tbaseBranch: options.baseBranch,\n\t\tephemeral: options.ephemeral === true,\n\t\tephemeralBase: options.ephemeralBase === true,\n\t\tauthor: options.author,\n\t\tcommitter,\n\t\tsignal: options.signal,\n\t\tttl: options.ttl,\n\t\tinitialDiff: options.diff,\n\t};\n}\n\nfunction normalizeBranchName(value: string | undefined): string {\n\tconst trimmed = value?.trim();\n\tif (!trimmed) {\n\t\tthrow new Error('createCommitFromDiff targetBranch is required');\n\t}\n\tif (trimmed.startsWith('refs/heads/')) {\n\t\tconst branch = trimmed.slice('refs/heads/'.length).trim();\n\t\tif (!branch) {\n\t\t\tthrow new Error('createCommitFromDiff targetBranch must include a branch name');\n\t\t}\n\t\treturn branch;\n\t}\n\tif (trimmed.startsWith('refs/')) {\n\t\tthrow new Error('createCommitFromDiff targetBranch must not include refs/ prefix');\n\t}\n\treturn trimmed;\n}\n\nexport async function sendCommitFromDiff(deps: CommitFromDiffSendDeps): Promise<CommitResult> {\n\tconst executor = new DiffCommitExecutor(deps);\n\treturn executor.send();\n}\n","import { errorEnvelopeSchema } from './schemas';\nimport type { ValidAPIVersion, ValidMethod, ValidPath } from './types';\n\ninterface RequestOptions {\n\tallowedStatus?: number[];\n}\n\nexport class ApiError extends Error {\n\tpublic readonly status: number;\n\tpublic readonly statusText: string;\n\tpublic readonly method: ValidMethod;\n\tpublic readonly url: string;\n\tpublic readonly body?: unknown;\n\n\tconstructor(params: {\n\t\tmessage: string;\n\t\tstatus: number;\n\t\tstatusText: string;\n\t\tmethod: ValidMethod;\n\t\turl: string;\n\t\tbody?: unknown;\n\t}) {\n\t\tsuper(params.message);\n\t\tthis.name = 'ApiError';\n\t\tthis.status = params.status;\n\t\tthis.statusText = params.statusText;\n\t\tthis.method = params.method;\n\t\tthis.url = params.url;\n\t\tthis.body = params.body;\n\t}\n}\n\nexport class ApiFetcher {\n\tconstructor(\n\t\tprivate readonly API_BASE_URL: string,\n\t\tprivate readonly version: ValidAPIVersion,\n\t) {}\n\n\tprivate getBaseUrl() {\n\t\treturn `${this.API_BASE_URL}/api/v${this.version}`;\n\t}\n\n\tprivate getRequestUrl(path: ValidPath) {\n\t\tif (typeof path === 'string') {\n\t\t\treturn `${this.getBaseUrl()}/${path}`;\n\t\t} else if (path.params) {\n\t\t\tconst paramStr = new URLSearchParams(path.params).toString();\n\t\t\treturn `${this.getBaseUrl()}/${path.path}${paramStr ? `?${paramStr}` : ''}`;\n\t\t} else {\n\t\t\treturn `${this.getBaseUrl()}/${path.path}`;\n\t\t}\n\t}\n\n\tprivate async fetch(path: ValidPath, method: ValidMethod, jwt: string, options?: RequestOptions) {\n\t\tconst requestUrl = this.getRequestUrl(path);\n\n\t\tconst requestOptions: RequestInit = {\n\t\t\tmethod,\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${jwt}`,\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t},\n\t\t};\n\n\t\tif (method !== 'GET' && typeof path !== 'string' && path.body) {\n\t\t\trequestOptions.body = JSON.stringify(path.body);\n\t\t}\n\n\t\tconst response = await fetch(requestUrl, requestOptions);\n\n\t\tif (!response.ok) {\n\t\t\tconst allowed = options?.allowedStatus ?? [];\n\t\t\tif (allowed.includes(response.status)) {\n\t\t\t\treturn response;\n\t\t\t}\n\n\t\t\tlet errorBody: unknown;\n\t\t\tlet message: string | undefined;\n\t\t\tconst contentType = response.headers.get('content-type') ?? '';\n\n\t\t\ttry {\n\t\t\t\tif (contentType.includes('application/json')) {\n\t\t\t\t\terrorBody = await response.json();\n\t\t\t\t} else {\n\t\t\t\t\tconst text = await response.text();\n\t\t\t\t\terrorBody = text;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Fallback to plain text if JSON parse failed after reading body\n\t\t\t\ttry {\n\t\t\t\t\terrorBody = await response.text();\n\t\t\t\t} catch {\n\t\t\t\t\terrorBody = undefined;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof errorBody === 'string') {\n\t\t\t\tconst trimmed = errorBody.trim();\n\t\t\t\tif (trimmed) {\n\t\t\t\t\tmessage = trimmed;\n\t\t\t\t}\n\t\t\t} else if (errorBody && typeof errorBody === 'object') {\n\t\t\t\tconst parsedError = errorEnvelopeSchema.safeParse(errorBody);\n\t\t\t\tif (parsedError.success) {\n\t\t\t\t\tconst trimmed = parsedError.data.error.trim();\n\t\t\t\t\tif (trimmed) {\n\t\t\t\t\t\tmessage = trimmed;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthrow new ApiError({\n\t\t\t\tmessage:\n\t\t\t\t\tmessage ??\n\t\t\t\t\t`Request ${method} ${requestUrl} failed with status ${response.status} ${response.statusText}`,\n\t\t\t\tstatus: response.status,\n\t\t\t\tstatusText: response.statusText,\n\t\t\t\tmethod,\n\t\t\t\turl: requestUrl,\n\t\t\t\tbody: errorBody,\n\t\t\t});\n\t\t}\n\t\treturn response;\n\t}\n\n\tasync get(path: ValidPath, jwt: string, options?: RequestOptions) {\n\t\treturn this.fetch(path, 'GET', jwt, options);\n\t}\n\n\tasync post(path: ValidPath, jwt: string, options?: RequestOptions) {\n\t\treturn this.fetch(path, 'POST', jwt, options);\n\t}\n\n\tasync put(path: ValidPath, jwt: string, options?: RequestOptions) {\n\t\treturn this.fetch(path, 'PUT', jwt, options);\n\t}\n\n\tasync delete(path: ValidPath, jwt: string, options?: RequestOptions) {\n\t\treturn this.fetch(path, 'DELETE', jwt, options);\n\t}\n}\n","export function timingSafeEqual(a: string | Uint8Array, b: string | Uint8Array): boolean {\n\tconst bufferA = typeof a === 'string' ? new TextEncoder().encode(a) : a;\n\tconst bufferB = typeof b === 'string' ? new TextEncoder().encode(b) : b;\n\n\tif (bufferA.length !== bufferB.length) return false;\n\n\tlet result = 0;\n\tfor (let i = 0; i < bufferA.length; i++) {\n\t\tresult |= bufferA[i] ^ bufferB[i];\n\t}\n\treturn result === 0;\n}\n\nexport async function getEnvironmentCrypto() {\n\tif (!globalThis.crypto) {\n\t\tconst { webcrypto } = await import('node:crypto');\n\t\treturn webcrypto;\n\t}\n\treturn globalThis.crypto;\n}\n\nexport async function createHmac(algorithm: string, secret: string, data: string): Promise<string> {\n\tif (algorithm !== 'sha256') {\n\t\tthrow new Error('Only sha256 algorithm is supported');\n\t}\n\tif (!secret || secret.length === 0) {\n\t\tthrow new Error('Secret is required');\n\t}\n\n\tconst crypto = await getEnvironmentCrypto();\n\tconst encoder = new TextEncoder();\n\tconst key = await crypto.subtle.importKey(\n\t\t'raw',\n\t\tencoder.encode(secret),\n\t\t{ name: 'HMAC', hash: 'SHA-256' },\n\t\tfalse,\n\t\t['sign'],\n\t);\n\n\tconst signature = await crypto.subtle.sign('HMAC', key, encoder.encode(data));\n\treturn Array.from(new Uint8Array(signature))\n\t\t.map((b) => b.toString(16).padStart(2, '0'))\n\t\t.join('');\n}\n","/**\n * Webhook validation utilities for Pierre Git Storage\n */\n\nimport type {\n\tParsedWebhookSignature,\n\tRawWebhookPushEvent,\n\tWebhookEventPayload,\n\tWebhookPushEvent,\n\tWebhookValidationOptions,\n\tWebhookValidationResult,\n} from './types';\n\nimport { createHmac, timingSafeEqual } from './util';\n\nconst DEFAULT_MAX_AGE_SECONDS = 300; // 5 minutes\n\n/**\n * Parse the X-Pierre-Signature header\n * Format: t=<timestamp>,sha256=<signature>\n */\nexport function parseSignatureHeader(header: string): ParsedWebhookSignature | null {\n\tif (!header || typeof header !== 'string') {\n\t\treturn null;\n\t}\n\n\tlet timestamp = '';\n\tlet signature = '';\n\n\t// Split by comma and parse each element\n\tconst elements = header.split(',');\n\tfor (const element of elements) {\n\t\tconst trimmedElement = element.trim();\n\t\tconst parts = trimmedElement.split('=', 2);\n\t\tif (parts.length !== 2) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst [key, value] = parts;\n\t\tswitch (key) {\n\t\t\tcase 't':\n\t\t\t\ttimestamp = value;\n\t\t\t\tbreak;\n\t\t\tcase 'sha256':\n\t\t\t\tsignature = value;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!timestamp || !signature) {\n\t\treturn null;\n\t}\n\n\treturn { timestamp, signature };\n}\n\n/**\n * Validate a webhook signature and timestamp\n *\n * @param payload - The raw webhook payload (request body)\n * @param signatureHeader - The X-Pierre-Signature header value\n * @param secret - The webhook secret for HMAC verification\n * @param options - Validation options\n * @returns Validation result with details\n *\n * @example\n * ```typescript\n * const result = await validateWebhookSignature(\n * requestBody,\n * request.headers['x-pierre-signature'],\n * webhookSecret\n * );\n *\n * if (!result.valid) {\n * console.error('Invalid webhook:', result.error);\n * return;\n * }\n * ```\n */\nexport async function validateWebhookSignature(\n\tpayload: string | Buffer,\n\tsignatureHeader: string,\n\tsecret: string,\n\toptions: WebhookValidationOptions = {},\n): Promise<WebhookValidationResult> {\n\tif (!secret || secret.length === 0) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terror: 'Empty secret is not allowed',\n\t\t};\n\t}\n\n\t// Parse the signature header\n\tconst parsed = parseSignatureHeader(signatureHeader);\n\tif (!parsed) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terror: 'Invalid signature header format',\n\t\t};\n\t}\n\n\t// Parse timestamp\n\tconst timestamp = Number.parseInt(parsed.timestamp, 10);\n\tif (isNaN(timestamp)) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terror: 'Invalid timestamp in signature',\n\t\t};\n\t}\n\n\t// Validate timestamp age (prevent replay attacks)\n\tconst maxAge = options.maxAgeSeconds ?? DEFAULT_MAX_AGE_SECONDS;\n\tif (maxAge > 0) {\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst age = now - timestamp;\n\n\t\tif (age > maxAge) {\n\t\t\treturn {\n\t\t\t\tvalid: false,\n\t\t\t\terror: `Webhook timestamp too old (${age} seconds)`,\n\t\t\t\ttimestamp,\n\t\t\t};\n\t\t}\n\n\t\t// Also reject timestamps from the future (clock skew tolerance of 60 seconds)\n\t\tif (age < -60) {\n\t\t\treturn {\n\t\t\t\tvalid: false,\n\t\t\t\terror: 'Webhook timestamp is in the future',\n\t\t\t\ttimestamp,\n\t\t\t};\n\t\t}\n\t}\n\n\t// Convert payload to string if it's a Buffer\n\tconst payloadStr = typeof payload === 'string' ? payload : payload.toString('utf8');\n\n\t// Compute expected signature\n\t// Format: HMAC-SHA256(secret, timestamp + \".\" + payload)\n\tconst signedData = `${parsed.timestamp}.${payloadStr}`;\n\tconst expectedSignature = await createHmac('sha256', secret, signedData);\n\n\t// Compare signatures using constant-time comparison\n\tconst expectedBuffer = Buffer.from(expectedSignature);\n\tconst actualBuffer = Buffer.from(parsed.signature);\n\n\t// Ensure both buffers are the same length for timing-safe comparison\n\tif (expectedBuffer.length !== actualBuffer.length) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terror: 'Invalid signature',\n\t\t\ttimestamp,\n\t\t};\n\t}\n\n\tconst signaturesMatch = timingSafeEqual(expectedBuffer, actualBuffer);\n\tif (!signaturesMatch) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terror: 'Invalid signature',\n\t\t\ttimestamp,\n\t\t};\n\t}\n\n\treturn {\n\t\tvalid: true,\n\t\ttimestamp,\n\t};\n}\n\n/**\n * Validate a webhook request\n *\n * This is a convenience function that validates the signature and parses the payload.\n *\n * @param payload - The raw webhook payload (request body)\n * @param headers - The request headers (must include x-pierre-signature and x-pierre-event)\n * @param secret - The webhook secret for HMAC verification\n * @param options - Validation options\n * @returns The parsed webhook payload if valid, or validation error\n *\n * @example\n * ```typescript\n * const result = await validateWebhook(\n * request.body,\n * request.headers,\n * process.env.WEBHOOK_SECRET\n * );\n *\n * if (!result.valid) {\n * return new Response('Invalid webhook', { status: 401 });\n * }\n *\n * // Type-safe access to the webhook payload\n * console.log('Push event:', result.payload);\n * ```\n */\nexport async function validateWebhook(\n\tpayload: string | Buffer,\n\theaders: Record<string, string | string[] | undefined>,\n\tsecret: string,\n\toptions: WebhookValidationOptions = {},\n): Promise<WebhookValidationResult & { payload?: WebhookEventPayload }> {\n\t// Get signature header\n\tconst signatureHeader = headers['x-pierre-signature'] || headers['X-Pierre-Signature'];\n\tif (!signatureHeader || Array.isArray(signatureHeader)) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terror: 'Missing or invalid X-Pierre-Signature header',\n\t\t};\n\t}\n\n\t// Get event type header\n\tconst eventType = headers['x-pierre-event'] || headers['X-Pierre-Event'];\n\tif (!eventType || Array.isArray(eventType)) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terror: 'Missing or invalid X-Pierre-Event header',\n\t\t};\n\t}\n\n\t// Validate signature\n\tconst validationResult = await validateWebhookSignature(\n\t\tpayload,\n\t\tsignatureHeader,\n\t\tsecret,\n\t\toptions,\n\t);\n\n\tif (!validationResult.valid) {\n\t\treturn validationResult;\n\t}\n\n\t// Parse payload\n\tconst payloadStr = typeof payload === 'string' ? payload : payload.toString('utf8');\n\tlet parsedJson: unknown;\n\ttry {\n\t\tparsedJson = JSON.parse(payloadStr);\n\t} catch {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terror: 'Invalid JSON payload',\n\t\t\ttimestamp: validationResult.timestamp,\n\t\t};\n\t}\n\n\tconst conversion = convertWebhookPayload(String(eventType), parsedJson);\n\tif (!conversion.valid) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terror: conversion.error,\n\t\t\ttimestamp: validationResult.timestamp,\n\t\t};\n\t}\n\n\treturn {\n\t\tvalid: true,\n\t\teventType,\n\t\ttimestamp: validationResult.timestamp,\n\t\tpayload: conversion.payload,\n\t};\n}\n\nfunction convertWebhookPayload(\n\teventType: string,\n\traw: unknown,\n): { valid: true; payload: WebhookEventPayload } | { valid: false; error: string } {\n\tif (eventType === 'push') {\n\t\tif (!isRawWebhookPushEvent(raw)) {\n\t\t\treturn {\n\t\t\t\tvalid: false,\n\t\t\t\terror: 'Invalid push payload',\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tvalid: true,\n\t\t\tpayload: transformPushEvent(raw),\n\t\t};\n\t}\n\tconst fallbackPayload = { type: eventType, raw };\n\treturn {\n\t\tvalid: true,\n\t\tpayload: fallbackPayload,\n\t};\n}\n\nfunction transformPushEvent(raw: RawWebhookPushEvent): WebhookPushEvent {\n\treturn {\n\t\ttype: 'push' as const,\n\t\trepository: {\n\t\t\tid: raw.repository.id,\n\t\t\turl: raw.repository.url,\n\t\t},\n\t\tref: raw.ref,\n\t\tbefore: raw.before,\n\t\tafter: raw.after,\n\t\tcustomerId: raw.customer_id,\n\t\tpushedAt: new Date(raw.pushed_at),\n\t\trawPushedAt: raw.pushed_at,\n\t};\n}\n\nfunction isRawWebhookPushEvent(value: unknown): value is RawWebhookPushEvent {\n\tif (!isRecord(value)) {\n\t\treturn false;\n\t}\n\tif (!isRecord(value.repository)) {\n\t\treturn false;\n\t}\n\treturn (\n\t\ttypeof value.repository.id === 'string' &&\n\t\ttypeof value.repository.url === 'string' &&\n\t\ttypeof value.ref === 'string' &&\n\t\ttypeof value.before === 'string' &&\n\t\ttypeof value.after === 'string' &&\n\t\ttypeof value.customer_id === 'string' &&\n\t\ttypeof value.pushed_at === 'string'\n\t);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === 'object' && value !== null;\n}\n","/**\n * Pierre Git Storage SDK\n *\n * A TypeScript SDK for interacting with Pierre's git storage system\n */\n\nimport { importPKCS8, SignJWT } from 'jose';\nimport snakecaseKeys from 'snakecase-keys';\nimport { createCommitBuilder, FetchCommitTransport, resolveCommitTtlSeconds } from './commit';\nimport { FetchDiffCommitTransport, sendCommitFromDiff } from './diff-commit';\nimport { RefUpdateError } from './errors';\nimport { ApiFetcher } from './fetch';\nimport type { RestoreCommitAckRaw } from './schemas';\nimport {\n\tbranchDiffResponseSchema,\n\tcommitDiffResponseSchema,\n\tlistBranchesResponseSchema,\n\tlistCommitsResponseSchema,\n\tlistFilesResponseSchema,\n\trestoreCommitAckSchema,\n\trestoreCommitResponseSchema,\n} from './schemas';\nimport type {\n\tBranchInfo,\n\tCommitBuilder,\n\tCommitInfo,\n\tCommitResult,\n\tCreateCommitFromDiffOptions,\n\tCreateCommitOptions,\n\tCreateRepoOptions,\n\tDiffFileState,\n\tFileDiff,\n\tFilteredFile,\n\tFindOneOptions,\n\tGetBranchDiffOptions,\n\tGetBranchDiffResponse,\n\tGetBranchDiffResult,\n\tGetCommitDiffOptions,\n\tGetCommitDiffResponse,\n\tGetCommitDiffResult,\n\tGetFileOptions,\n\tGetRemoteURLOptions,\n\tGitStorageOptions,\n\tListBranchesOptions,\n\tListBranchesResponse,\n\tListBranchesResult,\n\tListCommitsOptions,\n\tListCommitsResponse,\n\tListCommitsResult,\n\tListFilesOptions,\n\tListFilesResult,\n\tOverrideableGitStorageOptions,\n\tPullUpstreamOptions,\n\tRawBranchInfo,\n\tRawCommitInfo,\n\tRawFileDiff,\n\tRawFilteredFile,\n\tRefUpdate,\n\tRepo,\n\tRestoreCommitOptions,\n\tRestoreCommitResult,\n\tValidAPIVersion,\n} from './types';\n\n/**\n * Type definitions for Pierre Git Storage SDK\n */\n\nexport { RefUpdateError } from './errors';\nexport { ApiError } from './fetch';\n// Import additional types from types.ts\nexport * from './types';\n\n// Export webhook validation utilities\nexport { parseSignatureHeader, validateWebhook, validateWebhookSignature } from './webhook';\n\n/**\n * Git Storage API\n */\n\ndeclare const __STORAGE_BASE_URL__: string;\ndeclare const __API_BASE_URL__: string;\n\nconst API_BASE_URL = __API_BASE_URL__;\nconst STORAGE_BASE_URL = __STORAGE_BASE_URL__;\nconst API_VERSION: ValidAPIVersion = 1;\n\nconst apiInstanceMap = new Map<string, ApiFetcher>();\nconst DEFAULT_TOKEN_TTL_SECONDS = 60 * 60; // 1 hour\nconst RESTORE_COMMIT_ALLOWED_STATUS = [\n\t400, // Bad Request - validation errors\n\t401, // Unauthorized - missing/invalid auth header\n\t403, // Forbidden - missing git:write scope\n\t404, // Not Found - repo lookup failures\n\t408, // Request Timeout - client cancelled\n\t409, // Conflict - concurrent ref updates\n\t412, // Precondition Failed - optimistic concurrency\n\t422, // Unprocessable Entity - metadata issues\n\t429, // Too Many Requests - upstream throttling\n\t499, // Client Closed Request - storage cancellation\n\t500, // Internal Server Error - generic failure\n\t502, // Bad Gateway - storage/gateway bridge issues\n\t503, // Service Unavailable - storage selection failures\n\t504, // Gateway Timeout - long-running storage operations\n] as const;\n\nfunction resolveInvocationTtlSeconds(\n\toptions?: { ttl?: number },\n\tdefaultValue: number = DEFAULT_TOKEN_TTL_SECONDS,\n): number {\n\tif (typeof options?.ttl === 'number' && options.ttl > 0) {\n\t\treturn options.ttl;\n\t}\n\treturn defaultValue;\n}\n\ntype RestoreCommitAck = RestoreCommitAckRaw;\n\nfunction toRefUpdate(result: RestoreCommitAck['result']): RefUpdate {\n\treturn {\n\t\tbranch: result.branch,\n\t\toldSha: result.old_sha,\n\t\tnewSha: result.new_sha,\n\t};\n}\n\nfunction buildRestoreCommitResult(ack: RestoreCommitAck): RestoreCommitResult {\n\tconst refUpdate = toRefUpdate(ack.result);\n\tif (!ack.result.success) {\n\t\tthrow new RefUpdateError(\n\t\t\tack.result.message ?? `Restore commit failed with status ${ack.result.status}`,\n\t\t\t{\n\t\t\t\tstatus: ack.result.status,\n\t\t\t\tmessage: ack.result.message,\n\t\t\t\trefUpdate,\n\t\t\t},\n\t\t);\n\t}\n\treturn {\n\t\tcommitSha: ack.commit.commit_sha,\n\t\ttreeSha: ack.commit.tree_sha,\n\t\ttargetBranch: ack.commit.target_branch,\n\t\tpackBytes: ack.commit.pack_bytes,\n\t\trefUpdate,\n\t};\n}\n\ninterface RestoreCommitFailureInfo {\n\tstatus?: string;\n\tmessage?: string;\n\trefUpdate?: Partial<RefUpdate>;\n}\n\nfunction toPartialRefUpdate(\n\tbranch?: unknown,\n\toldSha?: unknown,\n\tnewSha?: unknown,\n): Partial<RefUpdate> | undefined {\n\tconst refUpdate: Partial<RefUpdate> = {};\n\tif (typeof branch === 'string' && branch.trim() !== '') {\n\t\trefUpdate.branch = branch;\n\t}\n\tif (typeof oldSha === 'string' && oldSha.trim() !== '') {\n\t\trefUpdate.oldSha = oldSha;\n\t}\n\tif (typeof newSha === 'string' && newSha.trim() !== '') {\n\t\trefUpdate.newSha = newSha;\n\t}\n\treturn Object.keys(refUpdate).length > 0 ? refUpdate : undefined;\n}\n\nfunction parseRestoreCommitPayload(\n\tpayload: unknown,\n): { ack: RestoreCommitAck } | { failure: RestoreCommitFailureInfo } | null {\n\tconst ack = restoreCommitAckSchema.safeParse(payload);\n\tif (ack.success) {\n\t\treturn { ack: ack.data };\n\t}\n\n\tconst failure = restoreCommitResponseSchema.safeParse(payload);\n\tif (failure.success) {\n\t\tconst result = failure.data.result;\n\t\treturn {\n\t\t\tfailure: {\n\t\t\t\tstatus: result.status,\n\t\t\t\tmessage: result.message,\n\t\t\t\trefUpdate: toPartialRefUpdate(result.branch, result.old_sha, result.new_sha),\n\t\t\t},\n\t\t};\n\t}\n\n\treturn null;\n}\n\nfunction httpStatusToRestoreStatus(status: number): string {\n\tswitch (status) {\n\t\tcase 409:\n\t\t\treturn 'conflict';\n\t\tcase 412:\n\t\t\treturn 'precondition_failed';\n\t\tdefault:\n\t\t\treturn `${status}`;\n\t}\n}\n\nfunction getApiInstance(baseUrl: string, version: ValidAPIVersion) {\n\tif (!apiInstanceMap.has(`${baseUrl}--${version}`)) {\n\t\tapiInstanceMap.set(`${baseUrl}--${version}`, new ApiFetcher(baseUrl, version));\n\t}\n\treturn apiInstanceMap.get(`${baseUrl}--${version}`)!;\n}\n\nfunction transformBranchInfo(raw: RawBranchInfo): BranchInfo {\n\treturn {\n\t\tcursor: raw.cursor,\n\t\tname: raw.name,\n\t\theadSha: raw.head_sha,\n\t\tcreatedAt: raw.created_at,\n\t};\n}\n\nfunction transformListBranchesResult(raw: ListBranchesResponse): ListBranchesResult {\n\treturn {\n\t\tbranches: raw.branches.map(transformBranchInfo),\n\t\tnextCursor: raw.next_cursor ?? undefined,\n\t\thasMore: raw.has_more,\n\t};\n}\n\nfunction transformCommitInfo(raw: RawCommitInfo): CommitInfo {\n\tconst parsedDate = new Date(raw.date);\n\treturn {\n\t\tsha: raw.sha,\n\t\tmessage: raw.message,\n\t\tauthorName: raw.author_name,\n\t\tauthorEmail: raw.author_email,\n\t\tcommitterName: raw.committer_name,\n\t\tcommitterEmail: raw.committer_email,\n\t\tdate: parsedDate,\n\t\trawDate: raw.date,\n\t};\n}\n\nfunction transformListCommitsResult(raw: ListCommitsResponse): ListCommitsResult {\n\treturn {\n\t\tcommits: raw.commits.map(transformCommitInfo),\n\t\tnextCursor: raw.next_cursor ?? undefined,\n\t\thasMore: raw.has_more,\n\t};\n}\n\nfunction normalizeDiffState(rawState: string): DiffFileState {\n\tif (!rawState) {\n\t\treturn 'unknown';\n\t}\n\tconst leading = rawState.trim()[0]?.toUpperCase();\n\tswitch (leading) {\n\t\tcase 'A':\n\t\t\treturn 'added';\n\t\tcase 'M':\n\t\t\treturn 'modified';\n\t\tcase 'D':\n\t\t\treturn 'deleted';\n\t\tcase 'R':\n\t\t\treturn 'renamed';\n\t\tcase 'C':\n\t\t\treturn 'copied';\n\t\tcase 'T':\n\t\t\treturn 'type_changed';\n\t\tcase 'U':\n\t\t\treturn 'unmerged';\n\t\tdefault:\n\t\t\treturn 'unknown';\n\t}\n}\n\nfunction transformFileDiff(raw: RawFileDiff): FileDiff {\n\tconst normalizedState = normalizeDiffState(raw.state);\n\treturn {\n\t\tpath: raw.path,\n\t\tstate: normalizedState,\n\t\trawState: raw.state,\n\t\toldPath: raw.old_path ?? undefined,\n\t\traw: raw.raw,\n\t\tbytes: raw.bytes,\n\t\tisEof: raw.is_eof,\n\t};\n}\n\nfunction transformFilteredFile(raw: RawFilteredFile): FilteredFile {\n\tconst normalizedState = normalizeDiffState(raw.state);\n\treturn {\n\t\tpath: raw.path,\n\t\tstate: normalizedState,\n\t\trawState: raw.state,\n\t\toldPath: raw.old_path ?? undefined,\n\t\tbytes: raw.bytes,\n\t\tisEof: raw.is_eof,\n\t};\n}\n\nfunction transformBranchDiffResult(raw: GetBranchDiffResponse): GetBranchDiffResult {\n\treturn {\n\t\tbranch: raw.branch,\n\t\tbase: raw.base,\n\t\tstats: raw.stats,\n\t\tfiles: raw.files.map(transformFileDiff),\n\t\tfilteredFiles: raw.filtered_files.map(transformFilteredFile),\n\t};\n}\n\nfunction transformCommitDiffResult(raw: GetCommitDiffResponse): GetCommitDiffResult {\n\treturn {\n\t\tsha: raw.sha,\n\t\tstats: raw.stats,\n\t\tfiles: raw.files.map(transformFileDiff),\n\t\tfilteredFiles: raw.filtered_files.map(transformFilteredFile),\n\t};\n}\n\n/**\n * Implementation of the Repo interface\n */\nclass RepoImpl implements Repo {\n\tprivate readonly api: ApiFetcher;\n\n\tconstructor(\n\t\tpublic readonly id: string,\n\t\tprivate readonly options: GitStorageOptions,\n\t\tprivate readonly generateJWT: (\n\t\t\trepoId: string,\n\t\t\toptions?: GetRemoteURLOptions,\n\t\t) => Promise<string>,\n\t) {\n\t\tthis.api = getApiInstance(\n\t\t\tthis.options.apiBaseUrl ?? API_BASE_URL,\n\t\t\tthis.options.apiVersion ?? API_VERSION,\n\t\t);\n\t}\n\n\tasync getRemoteURL(urlOptions?: GetRemoteURLOptions): Promise<string> {\n\t\tconst storageBaseUrl = this.options.storageBaseUrl ?? STORAGE_BASE_URL;\n\t\tconst url = new URL(`https://${this.options.name}.${storageBaseUrl}/${this.id}.git`);\n\t\turl.username = `t`;\n\t\turl.password = await this.generateJWT(this.id, urlOptions);\n\t\treturn url.toString();\n\t}\n\n\tasync getFileStream(options: GetFileOptions): Promise<Response> {\n\t\tconst ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n\t\tconst jwt = await this.generateJWT(this.id, {\n\t\t\tpermissions: ['git:read'],\n\t\t\tttl,\n\t\t});\n\n\t\tconst params: Record<string, string> = {\n\t\t\tpath: options.path,\n\t\t};\n\n\t\tif (options.ref) {\n\t\t\tparams.ref = options.ref;\n\t\t}\n\t\tif (typeof options.ephemeral === 'boolean') {\n\t\t\tparams.ephemeral = String(options.ephemeral);\n\t\t}\n\n\t\t// Return the raw fetch Response for streaming\n\t\treturn this.api.get({ path: 'repos/file', params }, jwt);\n\t}\n\n\tasync listFiles(options?: ListFilesOptions): Promise<ListFilesResult> {\n\t\tconst ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n\t\tconst jwt = await this.generateJWT(this.id, {\n\t\t\tpermissions: ['git:read'],\n\t\t\tttl,\n\t\t});\n\n\t\tconst params: Record<string, string> = {};\n\t\tif (options?.ref) {\n\t\t\tparams.ref = options.ref;\n\t\t}\n\t\tif (typeof options?.ephemeral === 'boolean') {\n\t\t\tparams.ephemeral = String(options.ephemeral);\n\t\t}\n\t\tconst response = await this.api.get(\n\t\t\t{ path: 'repos/files', params: Object.keys(params).length ? params : undefined },\n\t\t\tjwt,\n\t\t);\n\n\t\tconst raw = listFilesResponseSchema.parse(await response.json());\n\t\treturn { paths: raw.paths, ref: raw.ref };\n\t}\n\n\tasync listBranches(options?: ListBranchesOptions): Promise<ListBranchesResult> {\n\t\tconst ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n\t\tconst jwt = await this.generateJWT(this.id, {\n\t\t\tpermissions: ['git:read'],\n\t\t\tttl,\n\t\t});\n\n\t\tconst cursor = options?.cursor;\n\t\tconst limit = options?.limit;\n\n\t\tlet params: Record<string, string> | undefined;\n\n\t\tif (typeof cursor === 'string' || typeof limit === 'number') {\n\t\t\tparams = {};\n\t\t\tif (typeof cursor === 'string') {\n\t\t\t\tparams.cursor = cursor;\n\t\t\t}\n\t\t\tif (typeof limit === 'number') {\n\t\t\t\tparams.limit = limit.toString();\n\t\t\t}\n\t\t}\n\n\t\tconst response = await this.api.get({ path: 'repos/branches', params }, jwt);\n\n\t\tconst raw = listBranchesResponseSchema.parse(await response.json());\n\t\treturn transformListBranchesResult({\n\t\t\t...raw,\n\t\t\tnext_cursor: raw.next_cursor ?? undefined,\n\t\t});\n\t}\n\n\tasync listCommits(options?: ListCommitsOptions): Promise<ListCommitsResult> {\n\t\tconst ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n\t\tconst jwt = await this.generateJWT(this.id, {\n\t\t\tpermissions: ['git:read'],\n\t\t\tttl,\n\t\t});\n\n\t\tlet params: Record<string, string> | undefined;\n\n\t\tif (options?.branch || options?.cursor || options?.limit) {\n\t\t\tparams = {};\n\t\t\tif (options?.branch) {\n\t\t\t\tparams.branch = options.branch;\n\t\t\t}\n\t\t\tif (options?.cursor) {\n\t\t\t\tparams.cursor = options.cursor;\n\t\t\t}\n\t\t\tif (typeof options?.limit == 'number') {\n\t\t\t\tparams.limit = options.limit.toString();\n\t\t\t}\n\t\t}\n\n\t\tconst response = await this.api.get({ path: 'repos/commits', params }, jwt);\n\n\t\tconst raw = listCommitsResponseSchema.parse(await response.json());\n\t\treturn transformListCommitsResult({\n\t\t\t...raw,\n\t\t\tnext_cursor: raw.next_cursor ?? undefined,\n\t\t});\n\t}\n\n\tasync getBranchDiff(options: GetBranchDiffOptions): Promise<GetBranchDiffResult> {\n\t\tconst ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n\t\tconst jwt = await this.generateJWT(this.id, {\n\t\t\tpermissions: ['git:read'],\n\t\t\tttl,\n\t\t});\n\n\t\tconst params: Record<string, string> = {\n\t\t\tbranch: options.branch,\n\t\t};\n\n\t\tif (options.base) {\n\t\t\tparams.base = options.base;\n\t\t}\n\n\t\tconst response = await this.api.get({ path: 'repos/branches/diff', params }, jwt);\n\n\t\tconst raw = branchDiffResponseSchema.parse(await response.json());\n\t\treturn transformBranchDiffResult(raw);\n\t}\n\n\tasync getCommitDiff(options: GetCommitDiffOptions): Promise<GetCommitDiffResult> {\n\t\tconst ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n\t\tconst jwt = await this.generateJWT(this.id, {\n\t\t\tpermissions: ['git:read'],\n\t\t\tttl,\n\t\t});\n\n\t\tconst params: Record<string, string> = {\n\t\t\tsha: options.sha,\n\t\t};\n\n\t\tconst response = await this.api.get({ path: 'repos/diff', params }, jwt);\n\n\t\tconst raw = commitDiffResponseSchema.parse(await response.json());\n\t\treturn transformCommitDiffResult(raw);\n\t}\n\n\tasync pullUpstream(options: PullUpstreamOptions): Promise<void> {\n\t\tconst ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n\t\tconst jwt = await this.generateJWT(this.id, {\n\t\t\tpermissions: ['git:write'],\n\t\t\tttl,\n\t\t});\n\n\t\tconst body: Record<string, string> = {};\n\n\t\tif (options.ref) {\n\t\t\tbody.ref = options.ref;\n\t\t}\n\n\t\tconst response = await this.api.post({ path: 'repos/pull-upstream', body }, jwt);\n\n\t\tif (response.status !== 202) {\n\t\t\tthrow new Error(`Pull Upstream failed: ${response.status} ${await response.text()}`);\n\t\t}\n\n\t\treturn;\n\t}\n\n\tasync restoreCommit(options: RestoreCommitOptions): Promise<RestoreCommitResult> {\n\t\tconst targetBranch = options?.targetBranch?.trim();\n\t\tif (!targetBranch) {\n\t\t\tthrow new Error('restoreCommit targetBranch is required');\n\t\t}\n\t\tif (targetBranch.startsWith('refs/')) {\n\t\t\tthrow new Error('restoreCommit targetBranch must not include refs/ prefix');\n\t\t}\n\n\t\tconst targetCommitSha = options?.targetCommitSha?.trim();\n\t\tif (!targetCommitSha) {\n\t\t\tthrow new Error('restoreCommit targetCommitSha is required');\n\t\t}\n\t\tconst commitMessage = options?.commitMessage?.trim();\n\n\t\tconst authorName = options.author?.name?.trim();\n\t\tconst authorEmail = options.author?.email?.trim();\n\t\tif (!authorName || !authorEmail) {\n\t\t\tthrow new Error('restoreCommit author name and email are required');\n\t\t}\n\n\t\tconst ttl = resolveCommitTtlSeconds(options);\n\t\tconst jwt = await this.generateJWT(this.id, {\n\t\t\tpermissions: ['git:write'],\n\t\t\tttl,\n\t\t});\n\n\t\tconst metadata: Record<string, unknown> = {\n\t\t\ttarget_branch: targetBranch,\n\t\t\ttarget_commit_sha: targetCommitSha,\n\t\t\tauthor: {\n\t\t\t\tname: authorName,\n\t\t\t\temail: authorEmail,\n\t\t\t},\n\t\t};\n\n\t\tif (commitMessage) {\n\t\t\tmetadata.commit_message = commitMessage;\n\t\t}\n\n\t\tconst expectedHeadSha = options.expectedHeadSha?.trim();\n\t\tif (expectedHeadSha) {\n\t\t\tmetadata.expected_head_sha = expectedHeadSha;\n\t\t}\n\n\t\tif (options.committer) {\n\t\t\tconst committerName = options.committer.name?.trim();\n\t\t\tconst committerEmail = options.committer.email?.trim();\n\t\t\tif (!committerName || !committerEmail) {\n\t\t\t\tthrow new Error('restoreCommit committer name and email are required when provided');\n\t\t\t}\n\t\t\tmetadata.committer = {\n\t\t\t\tname: committerName,\n\t\t\t\temail: committerEmail,\n\t\t\t};\n\t\t}\n\n\t\tconst response = await this.api.post(\n\t\t\t{ path: 'repos/restore-commit', body: { metadata } },\n\t\t\tjwt,\n\t\t\t{\n\t\t\t\tallowedStatus: [...RESTORE_COMMIT_ALLOWED_STATUS],\n\t\t\t},\n\t\t);\n\n\t\tconst payload = await response.json();\n\t\tconst parsed = parseRestoreCommitPayload(payload);\n\t\tif (parsed && 'ack' in parsed) {\n\t\t\treturn buildRestoreCommitResult(parsed.ack);\n\t\t}\n\n\t\tconst failure = parsed && 'failure' in parsed ? parsed.failure : undefined;\n\t\tconst status = failure?.status ?? httpStatusToRestoreStatus(response.status);\n\t\tconst message =\n\t\t\tfailure?.message ??\n\t\t\t`Restore commit failed with HTTP ${response.status}` +\n\t\t\t\t(response.statusText ? ` ${response.statusText}` : '');\n\n\t\tthrow new RefUpdateError(message, {\n\t\t\tstatus,\n\t\t\trefUpdate: failure?.refUpdate,\n\t\t});\n\t}\n\n\tcreateCommit(options: CreateCommitOptions): CommitBuilder {\n\t\tconst version = this.options.apiVersion ?? API_VERSION;\n\t\tconst baseUrl = this.options.apiBaseUrl ?? API_BASE_URL;\n\t\tconst transport = new FetchCommitTransport({ baseUrl, version });\n\t\tconst ttl = resolveCommitTtlSeconds(options);\n\t\tconst builderOptions: CreateCommitOptions = {\n\t\t\t...options,\n\t\t\tttl,\n\t\t};\n\t\tconst getAuthToken = () =>\n\t\t\tthis.generateJWT(this.id, {\n\t\t\t\tpermissions: ['git:write'],\n\t\t\t\tttl,\n\t\t\t});\n\n\t\treturn createCommitBuilder({\n\t\t\toptions: builderOptions,\n\t\t\tgetAuthToken,\n\t\t\ttransport,\n\t\t});\n\t}\n\n\tasync createCommitFromDiff(options: CreateCommitFromDiffOptions): Promise<CommitResult> {\n\t\tconst version = this.options.apiVersion ?? API_VERSION;\n\t\tconst baseUrl = this.options.apiBaseUrl ?? API_BASE_URL;\n\t\tconst transport = new FetchDiffCommitTransport({ baseUrl, version });\n\t\tconst ttl = resolveCommitTtlSeconds(options);\n\t\tconst requestOptions: CreateCommitFromDiffOptions = {\n\t\t\t...options,\n\t\t\tttl,\n\t\t};\n\t\tconst getAuthToken = () =>\n\t\t\tthis.generateJWT(this.id, {\n\t\t\t\tpermissions: ['git:write'],\n\t\t\t\tttl,\n\t\t\t});\n\n\t\treturn sendCommitFromDiff({\n\t\t\toptions: requestOptions,\n\t\t\tgetAuthToken,\n\t\t\ttransport,\n\t\t});\n\t}\n}\n\nexport class GitStorage {\n\tprivate static overrides: OverrideableGitStorageOptions = {};\n\tprivate options: GitStorageOptions;\n\tprivate api: ApiFetcher;\n\n\tconstructor(options: GitStorageOptions) {\n\t\tif (\n\t\t\t!options ||\n\t\t\toptions.name === undefined ||\n\t\t\toptions.key === undefined ||\n\t\t\toptions.name === null ||\n\t\t\toptions.key === null\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t'GitStorage requires a name and key. Please check your configuration and try again.',\n\t\t\t);\n\t\t}\n\n\t\tif (typeof options.name !== 'string' || options.name.trim() === '') {\n\t\t\tthrow new Error('GitStorage name must be a non-empty string.');\n\t\t}\n\n\t\tif (typeof options.key !== 'string' || options.key.trim() === '') {\n\t\t\tthrow new Error('GitStorage key must be a non-empty string.');\n\t\t}\n\n\t\tconst resolvedApiBaseUrl =\n\t\t\toptions.apiBaseUrl ?? GitStorage.overrides.apiBaseUrl ?? API_BASE_URL;\n\t\tconst resolvedApiVersion = options.apiVersion ?? GitStorage.overrides.apiVersion ?? API_VERSION;\n\t\tconst resolvedStorageBaseUrl =\n\t\t\toptions.storageBaseUrl ?? GitStorage.overrides.storageBaseUrl ?? STORAGE_BASE_URL;\n\t\tconst resolvedDefaultTtl = options.defaultTTL ?? GitStorage.overrides.defaultTTL;\n\n\t\tthis.api = getApiInstance(resolvedApiBaseUrl, resolvedApiVersion);\n\n\t\tthis.options = {\n\t\t\tkey: options.key,\n\t\t\tname: options.name,\n\t\t\tapiBaseUrl: resolvedApiBaseUrl,\n\t\t\tapiVersion: resolvedApiVersion,\n\t\t\tstorageBaseUrl: resolvedStorageBaseUrl,\n\t\t\tdefaultTTL: resolvedDefaultTtl,\n\t\t};\n\t}\n\n\tstatic override(options: OverrideableGitStorageOptions): void {\n\t\tthis.overrides = Object.assign({}, this.overrides, options);\n\t}\n\n\t/**\n\t * Create a new repository\n\t * @returns The created repository\n\t */\n\tasync createRepo(options?: CreateRepoOptions): Promise<Repo> {\n\t\tconst repoId = options?.id || crypto.randomUUID();\n\t\tconst ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n\t\tconst jwt = await this.generateJWT(repoId, {\n\t\t\tpermissions: ['repo:write'],\n\t\t\tttl,\n\t\t});\n\n\t\tconst baseRepoOptions = options?.baseRepo\n\t\t\t? {\n\t\t\t\t\tprovider: 'github',\n\t\t\t\t\t...snakecaseKeys(options.baseRepo as unknown as Record<string, unknown>),\n\t\t\t\t}\n\t\t\t: null;\n\n\t\t// Default defaultBranch to 'main' if not provided\n\t\tconst defaultBranch = options?.defaultBranch ?? 'main';\n\n\t\tconst createRepoPath =\n\t\t\tbaseRepoOptions || defaultBranch\n\t\t\t\t? {\n\t\t\t\t\t\tpath: 'repos',\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t...(baseRepoOptions && { base_repo: baseRepoOptions }),\n\t\t\t\t\t\t\tdefault_branch: defaultBranch,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: 'repos';\n\n\t\t// Allow 409 so we can map it to a clearer error message\n\t\tconst resp = await this.api.post(createRepoPath, jwt, { allowedStatus: [409] });\n\t\tif (resp.status === 409) {\n\t\t\tthrow new Error('Repository already exists');\n\t\t}\n\n\t\treturn new RepoImpl(repoId, this.options, this.generateJWT.bind(this));\n\t}\n\n\t/**\n\t * Find a repository by ID\n\t * @param options The search options\n\t * @returns The found repository\n\t */\n\tasync findOne(options: FindOneOptions): Promise<Repo | null> {\n\t\tconst jwt = await this.generateJWT(options.id, {\n\t\t\tpermissions: ['git:read'],\n\t\t\tttl: DEFAULT_TOKEN_TTL_SECONDS,\n\t\t});\n\n\t\t// Allow 404 to indicate \"not found\" without throwing\n\t\tconst resp = await this.api.get('repo', jwt, { allowedStatus: [404] });\n\t\tif (resp.status === 404) {\n\t\t\treturn null;\n\t\t}\n\t\t// On 200, we could validate response, but RepoImpl only needs the repo URL/id\n\t\t// const body = await resp.json(); // not required for now\n\t\treturn new RepoImpl(options.id, this.options, this.generateJWT.bind(this));\n\t}\n\n\t/**\n\t * Get the current configuration\n\t * @returns The client configuration\n\t */\n\tgetConfig(): GitStorageOptions {\n\t\treturn { ...this.options };\n\t}\n\n\t/**\n\t * Generate a JWT token for git storage URL authentication\n\t * @private\n\t */\n\tprivate async generateJWT(repoId: string, options?: GetRemoteURLOptions): Promise<string> {\n\t\t// Default permissions and TTL\n\t\tconst permissions = options?.permissions || ['git:write', 'git:read'];\n\t\tconst ttl = resolveInvocationTtlSeconds(options, this.options.defaultTTL ?? 365 * 24 * 60 * 60);\n\n\t\t// Create the JWT payload\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst payload = {\n\t\t\tiss: this.options.name,\n\t\t\tsub: '@pierre/storage',\n\t\t\trepo: repoId,\n\t\t\tscopes: permissions,\n\t\t\tiat: now,\n\t\t\texp: now + ttl,\n\t\t};\n\n\t\t// Sign the JWT with the key as the secret\n\t\t// Using HS256 for symmetric signing with the key\n\t\tconst key = await importPKCS8(this.options.key, 'ES256');\n\t\t// Sign the JWT with the key as the secret\n\t\tconst jwt = await new SignJWT(payload)\n\t\t\t.setProtectedHeader({ alg: 'ES256', typ: 'JWT' })\n\t\t\t.sign(key);\n\n\t\treturn jwt;\n\t}\n}\n\n// Export a default client factory\nexport function createClient(options: GitStorageOptions): GitStorage {\n\treturn new GitStorage(options);\n}\n\n// Type alias for backward compatibility\nexport type StorageOptions = GitStorageOptions;\n"]}
1
+ {"version":3,"sources":["../src/errors.ts","../src/schemas.ts","../src/commit-pack.ts","../src/stream-utils.ts","../src/commit.ts","../src/diff-commit.ts","../src/fetch.ts","../src/util.ts","../src/webhook.ts","../src/index.ts"],"names":["z","BufferCtor","buildMessageIterable","normalizeBranchName","API_BASE_URL","crypto","toRefUpdate","snakecaseKeys","importPKCS8","SignJWT"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { RefUpdate, RefUpdateReason } from './types';\n\nexport interface RefUpdateErrorOptions {\n\tstatus: string;\n\tmessage?: string;\n\trefUpdate?: Partial<RefUpdate>;\n\treason?: RefUpdateReason;\n}\n\nexport class RefUpdateError extends Error {\n\tpublic readonly status: string;\n\tpublic readonly reason: RefUpdateReason;\n\tpublic readonly refUpdate?: Partial<RefUpdate>;\n\n\tconstructor(message: string, options: RefUpdateErrorOptions) {\n\t\tsuper(message);\n\t\tthis.name = 'RefUpdateError';\n\t\tthis.status = options.status;\n\t\tthis.reason = options.reason ?? inferRefUpdateReason(options.status);\n\t\tthis.refUpdate = options.refUpdate;\n\t}\n}\n\nconst REF_REASON_MAP: Record<string, RefUpdateReason> = {\n\tprecondition_failed: 'precondition_failed',\n\tconflict: 'conflict',\n\tnot_found: 'not_found',\n\tinvalid: 'invalid',\n\ttimeout: 'timeout',\n\tunauthorized: 'unauthorized',\n\tforbidden: 'forbidden',\n\tunavailable: 'unavailable',\n\tinternal: 'internal',\n\tfailed: 'failed',\n\tok: 'unknown',\n};\n\nexport function inferRefUpdateReason(status?: string): RefUpdateReason {\n\tif (!status) {\n\t\treturn 'unknown';\n\t}\n\n\tconst trimmed = status.trim();\n\tif (trimmed === '') {\n\t\treturn 'unknown';\n\t}\n\n\tconst label = trimmed.toLowerCase();\n\treturn REF_REASON_MAP[label] ?? 'unknown';\n}\n","import { z } from 'zod';\n\nexport const listFilesResponseSchema = z.object({\n\tpaths: z.array(z.string()),\n\tref: z.string(),\n});\n\nexport const branchInfoSchema = z.object({\n\tcursor: z.string(),\n\tname: z.string(),\n\thead_sha: z.string(),\n\tcreated_at: z.string(),\n});\n\nexport const listBranchesResponseSchema = z.object({\n\tbranches: z.array(branchInfoSchema),\n\tnext_cursor: z.string().nullable().optional(),\n\thas_more: z.boolean(),\n});\n\nexport const commitInfoRawSchema = z.object({\n\tsha: z.string(),\n\tmessage: z.string(),\n\tauthor_name: z.string(),\n\tauthor_email: z.string(),\n\tcommitter_name: z.string(),\n\tcommitter_email: z.string(),\n\tdate: z.string(),\n});\n\nexport const listCommitsResponseSchema = z.object({\n\tcommits: z.array(commitInfoRawSchema),\n\tnext_cursor: z.string().nullable().optional(),\n\thas_more: z.boolean(),\n});\n\nexport const diffStatsSchema = z.object({\n\tfiles: z.number(),\n\tadditions: z.number(),\n\tdeletions: z.number(),\n\tchanges: z.number(),\n});\n\nexport const diffFileRawSchema = z.object({\n\tpath: z.string(),\n\tstate: z.string(),\n\told_path: z.string().nullable().optional(),\n\traw: z.string(),\n\tbytes: z.number(),\n\tis_eof: z.boolean(),\n});\n\nexport const filteredFileRawSchema = z.object({\n\tpath: z.string(),\n\tstate: z.string(),\n\told_path: z.string().nullable().optional(),\n\tbytes: z.number(),\n\tis_eof: z.boolean(),\n});\n\nexport const branchDiffResponseSchema = z.object({\n\tbranch: z.string(),\n\tbase: z.string(),\n\tstats: diffStatsSchema,\n\tfiles: z.array(diffFileRawSchema),\n\tfiltered_files: z.array(filteredFileRawSchema),\n});\n\nexport const commitDiffResponseSchema = z.object({\n\tsha: z.string(),\n\tstats: diffStatsSchema,\n\tfiles: z.array(diffFileRawSchema),\n\tfiltered_files: z.array(filteredFileRawSchema),\n});\n\nexport const createBranchResponseSchema = z.object({\n\tmessage: z.string(),\n\ttarget_branch: z.string(),\n\ttarget_is_ephemeral: z.boolean(),\n\tcommit_sha: z.string().nullable().optional(),\n});\n\nexport const refUpdateResultSchema = z.object({\n\tbranch: z.string(),\n\told_sha: z.string(),\n\tnew_sha: z.string(),\n\tsuccess: z.boolean(),\n\tstatus: z.string(),\n\tmessage: z.string().optional(),\n});\n\nexport const commitPackCommitSchema = z.object({\n\tcommit_sha: z.string(),\n\ttree_sha: z.string(),\n\ttarget_branch: z.string(),\n\tpack_bytes: z.number(),\n\tblob_count: z.number(),\n});\n\nexport const restoreCommitCommitSchema = commitPackCommitSchema.omit({ blob_count: true });\n\nexport const refUpdateResultWithOptionalsSchema = z.object({\n\tbranch: z.string().optional(),\n\told_sha: z.string().optional(),\n\tnew_sha: z.string().optional(),\n\tsuccess: z.boolean().optional(),\n\tstatus: z.string(),\n\tmessage: z.string().optional(),\n});\n\nexport const commitPackAckSchema = z.object({\n\tcommit: commitPackCommitSchema,\n\tresult: refUpdateResultSchema,\n});\n\nexport const restoreCommitAckSchema = z.object({\n\tcommit: restoreCommitCommitSchema,\n\tresult: refUpdateResultSchema.extend({ success: z.literal(true) }),\n});\n\nexport const commitPackResponseSchema = z.object({\n\tcommit: commitPackCommitSchema.partial().optional().nullable(),\n\tresult: refUpdateResultWithOptionalsSchema,\n});\n\nexport const restoreCommitResponseSchema = z.object({\n\tcommit: restoreCommitCommitSchema.partial().optional().nullable(),\n\tresult: refUpdateResultWithOptionalsSchema,\n});\n\nexport const errorEnvelopeSchema = z.object({\n\terror: z.string(),\n});\n\nexport type ListFilesResponseRaw = z.infer<typeof listFilesResponseSchema>;\nexport type RawBranchInfo = z.infer<typeof branchInfoSchema>;\nexport type ListBranchesResponseRaw = z.infer<typeof listBranchesResponseSchema>;\nexport type RawCommitInfo = z.infer<typeof commitInfoRawSchema>;\nexport type ListCommitsResponseRaw = z.infer<typeof listCommitsResponseSchema>;\nexport type RawFileDiff = z.infer<typeof diffFileRawSchema>;\nexport type RawFilteredFile = z.infer<typeof filteredFileRawSchema>;\nexport type GetBranchDiffResponseRaw = z.infer<typeof branchDiffResponseSchema>;\nexport type GetCommitDiffResponseRaw = z.infer<typeof commitDiffResponseSchema>;\nexport type CreateBranchResponseRaw = z.infer<typeof createBranchResponseSchema>;\nexport type CommitPackAckRaw = z.infer<typeof commitPackAckSchema>;\nexport type RestoreCommitAckRaw = z.infer<typeof restoreCommitAckSchema>;\n","import { inferRefUpdateReason, RefUpdateError } from './errors';\nimport type { CommitPackAckRaw } from './schemas';\nimport { commitPackResponseSchema, errorEnvelopeSchema } from './schemas';\nimport type { CommitResult, RefUpdate } from './types';\n\nexport type CommitPackAck = CommitPackAckRaw;\n\nexport function buildCommitResult(ack: CommitPackAckRaw): CommitResult {\n\tconst refUpdate = toRefUpdate(ack.result);\n\tif (!ack.result.success) {\n\t\tthrow new RefUpdateError(\n\t\t\tack.result.message ?? `Commit failed with status ${ack.result.status}`,\n\t\t\t{\n\t\t\t\tstatus: ack.result.status,\n\t\t\t\tmessage: ack.result.message,\n\t\t\t\trefUpdate,\n\t\t\t},\n\t\t);\n\t}\n\treturn {\n\t\tcommitSha: ack.commit.commit_sha,\n\t\ttreeSha: ack.commit.tree_sha,\n\t\ttargetBranch: ack.commit.target_branch,\n\t\tpackBytes: ack.commit.pack_bytes,\n\t\tblobCount: ack.commit.blob_count,\n\t\trefUpdate,\n\t};\n}\n\nexport function toRefUpdate(result: CommitPackAckRaw['result']): RefUpdate {\n\treturn {\n\t\tbranch: result.branch,\n\t\toldSha: result.old_sha,\n\t\tnewSha: result.new_sha,\n\t};\n}\n\nexport async function parseCommitPackError(\n\tresponse: Response,\n\tfallbackMessage: string,\n): Promise<{\n\tstatusMessage: string;\n\tstatusLabel: string;\n\trefUpdate?: Partial<RefUpdate>;\n}> {\n\tconst cloned = response.clone();\n\tlet jsonBody: unknown;\n\ttry {\n\t\tjsonBody = await cloned.json();\n\t} catch {\n\t\tjsonBody = undefined;\n\t}\n\n\tlet textBody: string | undefined;\n\tif (jsonBody === undefined) {\n\t\ttry {\n\t\t\ttextBody = await response.text();\n\t\t} catch {\n\t\t\ttextBody = undefined;\n\t\t}\n\t}\n\n\tconst defaultStatus = (() => {\n\t\tconst inferred = inferRefUpdateReason(String(response.status));\n\t\treturn inferred === 'unknown' ? 'failed' : inferred;\n\t})();\n\tlet statusLabel = defaultStatus;\n\tlet refUpdate: Partial<RefUpdate> | undefined;\n\tlet message: string | undefined;\n\n\tif (jsonBody !== undefined) {\n\t\tconst parsedResponse = commitPackResponseSchema.safeParse(jsonBody);\n\t\tif (parsedResponse.success) {\n\t\t\tconst result = parsedResponse.data.result;\n\t\t\tif (typeof result.status === 'string' && result.status.trim() !== '') {\n\t\t\t\tstatusLabel = result.status.trim() as typeof statusLabel;\n\t\t\t}\n\t\t\trefUpdate = toPartialRefUpdateFields(result.branch, result.old_sha, result.new_sha);\n\t\t\tif (typeof result.message === 'string' && result.message.trim() !== '') {\n\t\t\t\tmessage = result.message.trim();\n\t\t\t}\n\t\t}\n\n\t\tif (!message) {\n\t\t\tconst parsedError = errorEnvelopeSchema.safeParse(jsonBody);\n\t\t\tif (parsedError.success) {\n\t\t\t\tconst trimmed = parsedError.data.error.trim();\n\t\t\t\tif (trimmed) {\n\t\t\t\t\tmessage = trimmed;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!message && typeof jsonBody === 'string' && jsonBody.trim() !== '') {\n\t\tmessage = jsonBody.trim();\n\t}\n\n\tif (!message && textBody && textBody.trim() !== '') {\n\t\tmessage = textBody.trim();\n\t}\n\n\treturn {\n\t\tstatusMessage: message ?? fallbackMessage,\n\t\tstatusLabel,\n\t\trefUpdate,\n\t};\n}\n\nfunction toPartialRefUpdateFields(\n\tbranch?: string | null,\n\toldSha?: string | null,\n\tnewSha?: string | null,\n): Partial<RefUpdate> | undefined {\n\tconst refUpdate: Partial<RefUpdate> = {};\n\n\tif (typeof branch === 'string' && branch.trim() !== '') {\n\t\trefUpdate.branch = branch.trim();\n\t}\n\tif (typeof oldSha === 'string' && oldSha.trim() !== '') {\n\t\trefUpdate.oldSha = oldSha.trim();\n\t}\n\tif (typeof newSha === 'string' && newSha.trim() !== '') {\n\t\trefUpdate.newSha = newSha.trim();\n\t}\n\n\treturn Object.keys(refUpdate).length > 0 ? refUpdate : undefined;\n}\n","import type { BlobLike, FileLike, ReadableStreamLike } from './types';\n\ntype NodeBuffer = Uint8Array & { toString(encoding?: string): string };\ninterface NodeBufferConstructor {\n\tfrom(data: Uint8Array): NodeBuffer;\n\tfrom(data: string, encoding?: string): NodeBuffer;\n\tisBuffer(value: unknown): value is NodeBuffer;\n}\n\nconst BufferCtor: NodeBufferConstructor | undefined = (\n\tglobalThis as { Buffer?: NodeBufferConstructor }\n).Buffer;\n\nexport const MAX_CHUNK_BYTES = 4 * 1024 * 1024;\n\nexport type ChunkSegment = {\n\tchunk: Uint8Array;\n\teof: boolean;\n};\n\nexport async function* chunkify(source: AsyncIterable<Uint8Array>): AsyncIterable<ChunkSegment> {\n\tlet pending: Uint8Array | null = null;\n\tlet produced = false;\n\n\tfor await (const value of source) {\n\t\tconst bytes = value;\n\n\t\tif (pending && pending.byteLength === MAX_CHUNK_BYTES) {\n\t\t\tyield { chunk: pending, eof: false };\n\t\t\tproduced = true;\n\t\t\tpending = null;\n\t\t}\n\n\t\tconst merged: Uint8Array = pending ? concatChunks(pending, bytes) : bytes;\n\t\tpending = null;\n\n\t\tlet cursor: Uint8Array = merged;\n\t\twhile (cursor.byteLength > MAX_CHUNK_BYTES) {\n\t\t\tconst chunk: Uint8Array = cursor.slice(0, MAX_CHUNK_BYTES);\n\t\t\tcursor = cursor.slice(MAX_CHUNK_BYTES);\n\t\t\tyield { chunk, eof: false };\n\t\t\tproduced = true;\n\t\t}\n\n\t\tpending = cursor;\n\t}\n\n\tif (pending) {\n\t\tyield { chunk: pending, eof: true };\n\t\tproduced = true;\n\t}\n\n\tif (!produced) {\n\t\tyield { chunk: new Uint8Array(0), eof: true };\n\t}\n}\n\nexport async function* toAsyncIterable(\n\tsource:\n\t\t| string\n\t\t| Uint8Array\n\t\t| ArrayBuffer\n\t\t| BlobLike\n\t\t| FileLike\n\t\t| ReadableStreamLike<Uint8Array | ArrayBuffer | ArrayBufferView | string>\n\t\t| AsyncIterable<Uint8Array | ArrayBuffer | ArrayBufferView | string>\n\t\t| Iterable<Uint8Array | ArrayBuffer | ArrayBufferView | string>,\n): AsyncIterable<Uint8Array> {\n\tif (typeof source === 'string') {\n\t\tyield new TextEncoder().encode(source);\n\t\treturn;\n\t}\n\tif (source instanceof Uint8Array) {\n\t\tyield source;\n\t\treturn;\n\t}\n\tif (source instanceof ArrayBuffer) {\n\t\tyield new Uint8Array(source);\n\t\treturn;\n\t}\n\tif (ArrayBuffer.isView(source)) {\n\t\tyield new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n\t\treturn;\n\t}\n\tif (isBlobLike(source)) {\n\t\tconst stream = source.stream();\n\t\tif (isAsyncIterable(stream)) {\n\t\t\tfor await (const chunk of stream as AsyncIterable<unknown>) {\n\t\t\t\tyield ensureUint8Array(chunk);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (isReadableStreamLike(stream)) {\n\t\t\tyield* readReadableStream(stream);\n\t\t\treturn;\n\t\t}\n\t}\n\tif (isReadableStreamLike(source)) {\n\t\tyield* readReadableStream(source);\n\t\treturn;\n\t}\n\tif (isAsyncIterable(source)) {\n\t\tfor await (const chunk of source as AsyncIterable<unknown>) {\n\t\t\tyield ensureUint8Array(chunk);\n\t\t}\n\t\treturn;\n\t}\n\tif (isIterable(source)) {\n\t\tfor (const chunk of source as Iterable<unknown>) {\n\t\t\tyield ensureUint8Array(chunk);\n\t\t}\n\t\treturn;\n\t}\n\tthrow new Error('Unsupported content source; expected binary data');\n}\n\nexport function base64Encode(bytes: Uint8Array): string {\n\tif (BufferCtor) {\n\t\treturn BufferCtor.from(bytes).toString('base64');\n\t}\n\tlet binary = '';\n\tfor (let i = 0; i < bytes.byteLength; i++) {\n\t\tbinary += String.fromCharCode(bytes[i]);\n\t}\n\tconst btoaFn = (globalThis as { btoa?: (data: string) => string }).btoa;\n\tif (typeof btoaFn === 'function') {\n\t\treturn btoaFn(binary);\n\t}\n\tthrow new Error('Base64 encoding is not supported in this environment');\n}\n\nexport function requiresDuplex(body: unknown): boolean {\n\tif (!body || typeof body !== 'object') {\n\t\treturn false;\n\t}\n\n\tif (typeof (body as { [Symbol.asyncIterator]?: unknown })[Symbol.asyncIterator] === 'function') {\n\t\treturn true;\n\t}\n\n\tconst readableStreamCtor = (\n\t\tglobalThis as {\n\t\t\tReadableStream?: new (...args: unknown[]) => unknown;\n\t\t}\n\t).ReadableStream;\n\tif (readableStreamCtor && body instanceof readableStreamCtor) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nexport function toRequestBody(iterable: AsyncIterable<Uint8Array>): unknown {\n\tconst readableStreamCtor = (\n\t\tglobalThis as { ReadableStream?: new (underlyingSource: unknown) => unknown }\n\t).ReadableStream;\n\tif (typeof readableStreamCtor === 'function') {\n\t\tconst iterator = iterable[Symbol.asyncIterator]();\n\t\treturn new readableStreamCtor({\n\t\t\tasync pull(controller: { enqueue(chunk: Uint8Array): void; close(): void }) {\n\t\t\t\tconst { value, done } = await iterator.next();\n\t\t\t\tif (done) {\n\t\t\t\t\tcontroller.close();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcontroller.enqueue(value!);\n\t\t\t},\n\t\t\tasync cancel(reason: unknown) {\n\t\t\t\tif (typeof iterator.return === 'function') {\n\t\t\t\t\tawait iterator.return(reason);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t}\n\treturn iterable;\n}\n\nasync function* readReadableStream(stream: ReadableStreamLike<unknown>): AsyncIterable<Uint8Array> {\n\tconst reader = stream.getReader();\n\ttry {\n\t\twhile (true) {\n\t\t\tconst { value, done } = await reader.read();\n\t\t\tif (done) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (value !== undefined) {\n\t\t\t\tyield ensureUint8Array(value);\n\t\t\t}\n\t\t}\n\t} finally {\n\t\treader.releaseLock?.();\n\t}\n}\n\nfunction ensureUint8Array(value: unknown): Uint8Array {\n\tif (value instanceof Uint8Array) {\n\t\treturn value;\n\t}\n\tif (value instanceof ArrayBuffer) {\n\t\treturn new Uint8Array(value);\n\t}\n\tif (ArrayBuffer.isView(value)) {\n\t\treturn new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n\t}\n\tif (typeof value === 'string') {\n\t\treturn new TextEncoder().encode(value);\n\t}\n\tif (BufferCtor && BufferCtor.isBuffer(value)) {\n\t\treturn value as Uint8Array;\n\t}\n\tthrow new Error('Unsupported chunk type; expected binary data');\n}\n\nfunction isBlobLike(value: unknown): value is BlobLike {\n\treturn (\n\t\ttypeof value === 'object' && value !== null && typeof (value as BlobLike).stream === 'function'\n\t);\n}\n\nfunction isReadableStreamLike<T>(value: unknown): value is ReadableStreamLike<T> {\n\treturn (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\ttypeof (value as ReadableStreamLike<T>).getReader === 'function'\n\t);\n}\n\nfunction isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n\treturn (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\tSymbol.asyncIterator in (value as Record<string, unknown>)\n\t);\n}\n\nfunction isIterable(value: unknown): value is Iterable<unknown> {\n\treturn (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\tSymbol.iterator in (value as Record<string, unknown>)\n\t);\n}\n\nfunction concatChunks(a: Uint8Array, b: Uint8Array): Uint8Array {\n\tif (a.byteLength === 0) {\n\t\treturn b;\n\t}\n\tif (b.byteLength === 0) {\n\t\treturn a;\n\t}\n\tconst merged = new Uint8Array(a.byteLength + b.byteLength);\n\tmerged.set(a, 0);\n\tmerged.set(b, a.byteLength);\n\treturn merged;\n}\n","import { buildCommitResult, parseCommitPackError } from './commit-pack';\nimport { RefUpdateError } from './errors';\nimport type { CommitPackAckRaw } from './schemas';\nimport { commitPackAckSchema } from './schemas';\nimport {\n\tbase64Encode,\n\ttype ChunkSegment,\n\tchunkify,\n\trequiresDuplex,\n\ttoAsyncIterable,\n\ttoRequestBody,\n} from './stream-utils';\nimport type {\n\tCommitBuilder,\n\tCommitFileOptions,\n\tCommitFileSource,\n\tCommitResult,\n\tCommitSignature,\n\tCommitTextFileOptions,\n\tCreateCommitOptions,\n\tLegacyCreateCommitOptions,\n} from './types';\n\nconst DEFAULT_TTL_SECONDS = 60 * 60;\nconst HEADS_REF_PREFIX = 'refs/heads/';\n\ntype NodeBuffer = Uint8Array & { toString(encoding?: string): string };\ninterface NodeBufferConstructor {\n\tfrom(data: Uint8Array): NodeBuffer;\n\tfrom(data: string, encoding?: string): NodeBuffer;\n\tisBuffer(value: unknown): value is NodeBuffer;\n}\n\nconst BufferCtor: NodeBufferConstructor | undefined = (\n\tglobalThis as { Buffer?: NodeBufferConstructor }\n).Buffer;\n\ninterface CommitMetadataPayload {\n\ttarget_branch: string;\n\texpected_head_sha?: string;\n\tbase_branch?: string;\n\tcommit_message: string;\n\tephemeral?: boolean;\n\tephemeral_base?: boolean;\n\tauthor: {\n\t\tname: string;\n\t\temail: string;\n\t};\n\tcommitter?: {\n\t\tname: string;\n\t\temail: string;\n\t};\n\tfiles: Array<{\n\t\tpath: string;\n\t\tcontent_id: string;\n\t\toperation?: 'upsert' | 'delete';\n\t\tmode?: string;\n\t}>;\n}\n\ninterface CommitTransportRequest {\n\tauthorization: string;\n\tsignal?: AbortSignal;\n\tmetadata: CommitMetadataPayload;\n\tblobs: Array<{ contentId: string; chunks: AsyncIterable<ChunkSegment> }>;\n}\n\ninterface CommitTransport {\n\tsend(request: CommitTransportRequest): Promise<CommitPackAckRaw>;\n}\n\ntype NormalizedCommitOptions = {\n\ttargetBranch: string;\n\tcommitMessage: string;\n\texpectedHeadSha?: string;\n\tbaseBranch?: string;\n\tephemeral?: boolean;\n\tephemeralBase?: boolean;\n\tauthor: CommitSignature;\n\tcommitter?: CommitSignature;\n\tsignal?: AbortSignal;\n\tttl?: number;\n};\n\ninterface CommitBuilderDeps {\n\toptions: CreateCommitOptions;\n\tgetAuthToken: () => Promise<string>;\n\ttransport: CommitTransport;\n}\n\ntype FileOperationState = {\n\tpath: string;\n\tcontentId: string;\n\tmode?: string;\n\toperation: 'upsert' | 'delete';\n\tstreamFactory?: () => AsyncIterable<Uint8Array>;\n};\n\nexport class CommitBuilderImpl implements CommitBuilder {\n\tprivate readonly options: NormalizedCommitOptions;\n\tprivate readonly getAuthToken: () => Promise<string>;\n\tprivate readonly transport: CommitTransport;\n\tprivate readonly operations: FileOperationState[] = [];\n\tprivate sent = false;\n\n\tconstructor(deps: CommitBuilderDeps) {\n\t\tthis.options = normalizeCommitOptions(deps.options);\n\t\tthis.getAuthToken = deps.getAuthToken;\n\t\tthis.transport = deps.transport;\n\n\t\tconst trimmedMessage = this.options.commitMessage?.trim();\n\t\tconst trimmedAuthorName = this.options.author?.name?.trim();\n\t\tconst trimmedAuthorEmail = this.options.author?.email?.trim();\n\n\t\tif (!trimmedMessage) {\n\t\t\tthrow new Error('createCommit commitMessage is required');\n\t\t}\n\t\tif (!trimmedAuthorName || !trimmedAuthorEmail) {\n\t\t\tthrow new Error('createCommit author name and email are required');\n\t\t}\n\t\tthis.options.commitMessage = trimmedMessage;\n\t\tthis.options.author = {\n\t\t\tname: trimmedAuthorName,\n\t\t\temail: trimmedAuthorEmail,\n\t\t};\n\t\tif (typeof this.options.expectedHeadSha === 'string') {\n\t\t\tthis.options.expectedHeadSha = this.options.expectedHeadSha.trim();\n\t\t}\n\t\tif (typeof this.options.baseBranch === 'string') {\n\t\t\tconst trimmedBase = this.options.baseBranch.trim();\n\t\t\tif (trimmedBase === '') {\n\t\t\t\tdelete this.options.baseBranch;\n\t\t\t} else {\n\t\t\t\tif (trimmedBase.startsWith('refs/')) {\n\t\t\t\t\tthrow new Error('createCommit baseBranch must not include refs/ prefix');\n\t\t\t\t}\n\t\t\t\tthis.options.baseBranch = trimmedBase;\n\t\t\t}\n\t\t}\n\n\t\tif (this.options.ephemeralBase && !this.options.baseBranch) {\n\t\t\tthrow new Error('createCommit ephemeralBase requires baseBranch');\n\t\t}\n\t}\n\n\taddFile(path: string, source: CommitFileSource, options?: CommitFileOptions): CommitBuilder {\n\t\tthis.ensureNotSent();\n\t\tconst normalizedPath = this.normalizePath(path);\n\t\tconst contentId = randomContentId();\n\t\tconst mode = options?.mode ?? '100644';\n\n\t\tthis.operations.push({\n\t\t\tpath: normalizedPath,\n\t\t\tcontentId,\n\t\t\tmode,\n\t\t\toperation: 'upsert',\n\t\t\tstreamFactory: () => toAsyncIterable(source),\n\t\t});\n\n\t\treturn this;\n\t}\n\n\taddFileFromString(\n\t\tpath: string,\n\t\tcontents: string,\n\t\toptions?: CommitTextFileOptions,\n\t): CommitBuilder {\n\t\tconst encoding = options?.encoding ?? 'utf8';\n\t\tconst normalizedEncoding = encoding === 'utf-8' ? 'utf8' : encoding;\n\t\tlet data: Uint8Array;\n\t\tif (normalizedEncoding === 'utf8') {\n\t\t\tdata = new TextEncoder().encode(contents);\n\t\t} else if (BufferCtor) {\n\t\t\tdata = BufferCtor.from(\n\t\t\t\tcontents,\n\t\t\t\tnormalizedEncoding as Parameters<NodeBufferConstructor['from']>[1],\n\t\t\t);\n\t\t} else {\n\t\t\tthrow new Error(\n\t\t\t\t`Unsupported encoding \"${encoding}\" in this environment. Non-UTF encodings require Node.js Buffer support.`,\n\t\t\t);\n\t\t}\n\t\treturn this.addFile(path, data, options);\n\t}\n\n\tdeletePath(path: string): CommitBuilder {\n\t\tthis.ensureNotSent();\n\t\tconst normalizedPath = this.normalizePath(path);\n\t\tthis.operations.push({\n\t\t\tpath: normalizedPath,\n\t\t\tcontentId: randomContentId(),\n\t\t\toperation: 'delete',\n\t\t});\n\t\treturn this;\n\t}\n\n\tasync send(): Promise<CommitResult> {\n\t\tthis.ensureNotSent();\n\t\tthis.sent = true;\n\n\t\tconst metadata = this.buildMetadata();\n\t\tconst blobEntries = this.operations\n\t\t\t.filter((op) => op.operation === 'upsert' && op.streamFactory)\n\t\t\t.map((op) => ({\n\t\t\t\tcontentId: op.contentId,\n\t\t\t\tchunks: chunkify(op.streamFactory!()),\n\t\t\t}));\n\n\t\tconst authorization = await this.getAuthToken();\n\t\tconst ack = await this.transport.send({\n\t\t\tauthorization,\n\t\t\tsignal: this.options.signal,\n\t\t\tmetadata,\n\t\t\tblobs: blobEntries,\n\t\t});\n\t\treturn buildCommitResult(ack);\n\t}\n\n\tprivate buildMetadata(): CommitMetadataPayload {\n\t\tconst files = this.operations.map((op) => {\n\t\t\tconst entry: CommitMetadataPayload['files'][number] = {\n\t\t\t\tpath: op.path,\n\t\t\t\tcontent_id: op.contentId,\n\t\t\t\toperation: op.operation,\n\t\t\t};\n\t\t\tif (op.mode) {\n\t\t\t\tentry.mode = op.mode;\n\t\t\t}\n\t\t\treturn entry;\n\t\t});\n\n\t\tconst metadata: CommitMetadataPayload = {\n\t\t\ttarget_branch: this.options.targetBranch,\n\t\t\tcommit_message: this.options.commitMessage,\n\t\t\tauthor: {\n\t\t\t\tname: this.options.author.name,\n\t\t\t\temail: this.options.author.email,\n\t\t\t},\n\t\t\tfiles,\n\t\t};\n\n\t\tif (this.options.expectedHeadSha) {\n\t\t\tmetadata.expected_head_sha = this.options.expectedHeadSha;\n\t\t}\n\t\tif (this.options.baseBranch) {\n\t\t\tmetadata.base_branch = this.options.baseBranch;\n\t\t}\n\t\tif (this.options.committer) {\n\t\t\tmetadata.committer = {\n\t\t\t\tname: this.options.committer.name,\n\t\t\t\temail: this.options.committer.email,\n\t\t\t};\n\t\t}\n\n\t\tif (this.options.ephemeral) {\n\t\t\tmetadata.ephemeral = true;\n\t\t}\n\t\tif (this.options.ephemeralBase) {\n\t\t\tmetadata.ephemeral_base = true;\n\t\t}\n\n\t\treturn metadata;\n\t}\n\n\tprivate ensureNotSent(): void {\n\t\tif (this.sent) {\n\t\t\tthrow new Error('createCommit builder cannot be reused after send()');\n\t\t}\n\t}\n\n\tprivate normalizePath(path: string): string {\n\t\tif (!path || typeof path !== 'string' || path.trim() === '') {\n\t\t\tthrow new Error('File path must be a non-empty string');\n\t\t}\n\t\treturn path.replace(/^\\//, '');\n\t}\n}\n\nexport class FetchCommitTransport implements CommitTransport {\n\tprivate readonly url: string;\n\n\tconstructor(config: { baseUrl: string; version: number }) {\n\t\tconst trimmedBase = config.baseUrl.replace(/\\/+$/, '');\n\t\tthis.url = `${trimmedBase}/api/v${config.version}/repos/commit-pack`;\n\t}\n\n\tasync send(request: CommitTransportRequest): Promise<CommitPackAckRaw> {\n\t\tconst bodyIterable = buildMessageIterable(request.metadata, request.blobs);\n\t\tconst body = toRequestBody(bodyIterable);\n\n\t\tconst init: RequestInit = {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${request.authorization}`,\n\t\t\t\t'Content-Type': 'application/x-ndjson',\n\t\t\t\tAccept: 'application/json',\n\t\t\t},\n\t\t\tbody: body as any,\n\t\t\tsignal: request.signal,\n\t\t};\n\n\t\tif (requiresDuplex(body)) {\n\t\t\t(init as RequestInit & { duplex: 'half' }).duplex = 'half';\n\t\t}\n\n\t\tconst response = await fetch(this.url, init);\n\n\t\tif (!response.ok) {\n\t\t\tconst fallbackMessage = `createCommit request failed (${response.status} ${response.statusText})`;\n\t\t\tconst { statusMessage, statusLabel, refUpdate } = await parseCommitPackError(\n\t\t\t\tresponse,\n\t\t\t\tfallbackMessage,\n\t\t\t);\n\t\t\tthrow new RefUpdateError(statusMessage, {\n\t\t\t\tstatus: statusLabel,\n\t\t\t\tmessage: statusMessage,\n\t\t\t\trefUpdate,\n\t\t\t});\n\t\t}\n\n\t\tconst ack = commitPackAckSchema.parse(await response.json());\n\t\treturn ack;\n\t}\n}\n\nfunction buildMessageIterable(\n\tmetadata: CommitMetadataPayload,\n\tblobs: Array<{ contentId: string; chunks: AsyncIterable<ChunkSegment> }>,\n): AsyncIterable<Uint8Array> {\n\tconst encoder = new TextEncoder();\n\treturn {\n\t\tasync *[Symbol.asyncIterator]() {\n\t\t\tyield encoder.encode(`${JSON.stringify({ metadata })}\\n`);\n\t\t\tfor (const blob of blobs) {\n\t\t\t\tfor await (const segment of blob.chunks) {\n\t\t\t\t\tconst payload = {\n\t\t\t\t\t\tblob_chunk: {\n\t\t\t\t\t\t\tcontent_id: blob.contentId,\n\t\t\t\t\t\t\tdata: base64Encode(segment.chunk),\n\t\t\t\t\t\t\teof: segment.eof,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t\tyield encoder.encode(`${JSON.stringify(payload)}\\n`);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t};\n}\n\nfunction randomContentId(): string {\n\tconst cryptoObj = globalThis.crypto;\n\tif (cryptoObj && typeof cryptoObj.randomUUID === 'function') {\n\t\treturn cryptoObj.randomUUID();\n\t}\n\tconst random = Math.random().toString(36).slice(2);\n\treturn `cid-${Date.now().toString(36)}-${random}`;\n}\n\nfunction normalizeCommitOptions(options: CreateCommitOptions): NormalizedCommitOptions {\n\treturn {\n\t\ttargetBranch: resolveTargetBranch(options),\n\t\tcommitMessage: options.commitMessage,\n\t\texpectedHeadSha: options.expectedHeadSha,\n\t\tbaseBranch: options.baseBranch,\n\t\tephemeral: options.ephemeral === true,\n\t\tephemeralBase: options.ephemeralBase === true,\n\t\tauthor: options.author,\n\t\tcommitter: options.committer,\n\t\tsignal: options.signal,\n\t\tttl: options.ttl,\n\t};\n}\n\nfunction resolveTargetBranch(options: CreateCommitOptions): string {\n\tconst branchCandidate =\n\t\ttypeof options.targetBranch === 'string' ? options.targetBranch.trim() : '';\n\tif (branchCandidate) {\n\t\treturn normalizeBranchName(branchCandidate);\n\t}\n\tif (hasLegacyTargetRef(options)) {\n\t\treturn normalizeLegacyTargetRef(options.targetRef);\n\t}\n\tthrow new Error('createCommit targetBranch is required');\n}\n\nfunction normalizeBranchName(value: string): string {\n\tconst trimmed = value.trim();\n\tif (!trimmed) {\n\t\tthrow new Error('createCommit targetBranch is required');\n\t}\n\tif (trimmed.startsWith(HEADS_REF_PREFIX)) {\n\t\tconst branch = trimmed.slice(HEADS_REF_PREFIX.length).trim();\n\t\tif (!branch) {\n\t\t\tthrow new Error('createCommit targetBranch is required');\n\t\t}\n\t\treturn branch;\n\t}\n\tif (trimmed.startsWith('refs/')) {\n\t\tthrow new Error('createCommit targetBranch must not include refs/ prefix');\n\t}\n\treturn trimmed;\n}\n\nfunction normalizeLegacyTargetRef(ref: string): string {\n\tconst trimmed = ref.trim();\n\tif (!trimmed) {\n\t\tthrow new Error('createCommit targetRef is required');\n\t}\n\tif (!trimmed.startsWith(HEADS_REF_PREFIX)) {\n\t\tthrow new Error('createCommit targetRef must start with refs/heads/');\n\t}\n\tconst branch = trimmed.slice(HEADS_REF_PREFIX.length).trim();\n\tif (!branch) {\n\t\tthrow new Error('createCommit targetRef must include a branch name');\n\t}\n\treturn branch;\n}\n\nfunction hasLegacyTargetRef(options: CreateCommitOptions): options is LegacyCreateCommitOptions {\n\treturn typeof (options as LegacyCreateCommitOptions).targetRef === 'string';\n}\n\nexport function createCommitBuilder(deps: CommitBuilderDeps): CommitBuilder {\n\treturn new CommitBuilderImpl(deps);\n}\n\nexport function resolveCommitTtlSeconds(options?: { ttl?: number }): number {\n\tif (typeof options?.ttl === 'number' && options.ttl > 0) {\n\t\treturn options.ttl;\n\t}\n\treturn DEFAULT_TTL_SECONDS;\n}\n","import { buildCommitResult, parseCommitPackError } from './commit-pack';\nimport { RefUpdateError } from './errors';\nimport type { CommitPackAckRaw } from './schemas';\nimport { commitPackAckSchema } from './schemas';\nimport {\n\tbase64Encode,\n\ttype ChunkSegment,\n\tchunkify,\n\trequiresDuplex,\n\ttoAsyncIterable,\n\ttoRequestBody,\n} from './stream-utils';\nimport type {\n\tCommitResult,\n\tCommitSignature,\n\tCreateCommitFromDiffOptions,\n\tDiffSource,\n} from './types';\n\ninterface DiffCommitMetadataPayload {\n\ttarget_branch: string;\n\texpected_head_sha?: string;\n\tbase_branch?: string;\n\tcommit_message: string;\n\tephemeral?: boolean;\n\tephemeral_base?: boolean;\n\tauthor: {\n\t\tname: string;\n\t\temail: string;\n\t};\n\tcommitter?: {\n\t\tname: string;\n\t\temail: string;\n\t};\n}\n\ninterface DiffCommitTransportRequest {\n\tauthorization: string;\n\tsignal?: AbortSignal;\n\tmetadata: DiffCommitMetadataPayload;\n\tdiffChunks: AsyncIterable<ChunkSegment>;\n}\n\ninterface DiffCommitTransport {\n\tsend(request: DiffCommitTransportRequest): Promise<CommitPackAckRaw>;\n}\n\ntype NormalizedDiffCommitOptions = {\n\ttargetBranch: string;\n\tcommitMessage: string;\n\texpectedHeadSha?: string;\n\tbaseBranch?: string;\n\tephemeral?: boolean;\n\tephemeralBase?: boolean;\n\tauthor: CommitSignature;\n\tcommitter?: CommitSignature;\n\tsignal?: AbortSignal;\n\tttl?: number;\n\tinitialDiff: DiffSource;\n};\n\ninterface CommitFromDiffSendDeps {\n\toptions: CreateCommitFromDiffOptions;\n\tgetAuthToken: () => Promise<string>;\n\ttransport: DiffCommitTransport;\n}\n\nclass DiffCommitExecutor {\n\tprivate readonly options: NormalizedDiffCommitOptions;\n\tprivate readonly getAuthToken: () => Promise<string>;\n\tprivate readonly transport: DiffCommitTransport;\n\tprivate readonly diffFactory: () => AsyncIterable<Uint8Array>;\n\tprivate sent = false;\n\n\tconstructor(deps: CommitFromDiffSendDeps) {\n\t\tthis.options = normalizeDiffCommitOptions(deps.options);\n\t\tthis.getAuthToken = deps.getAuthToken;\n\t\tthis.transport = deps.transport;\n\n\t\tconst trimmedMessage = this.options.commitMessage?.trim();\n\t\tconst trimmedAuthorName = this.options.author?.name?.trim();\n\t\tconst trimmedAuthorEmail = this.options.author?.email?.trim();\n\n\t\tif (!trimmedMessage) {\n\t\t\tthrow new Error('createCommitFromDiff commitMessage is required');\n\t\t}\n\t\tif (!trimmedAuthorName || !trimmedAuthorEmail) {\n\t\t\tthrow new Error('createCommitFromDiff author name and email are required');\n\t\t}\n\n\t\tthis.options.commitMessage = trimmedMessage;\n\t\tthis.options.author = {\n\t\t\tname: trimmedAuthorName,\n\t\t\temail: trimmedAuthorEmail,\n\t\t};\n\n\t\tif (typeof this.options.expectedHeadSha === 'string') {\n\t\t\tthis.options.expectedHeadSha = this.options.expectedHeadSha.trim();\n\t\t}\n\t\tif (typeof this.options.baseBranch === 'string') {\n\t\t\tconst trimmedBase = this.options.baseBranch.trim();\n\t\t\tif (trimmedBase === '') {\n\t\t\t\tdelete this.options.baseBranch;\n\t\t\t} else {\n\t\t\t\tif (trimmedBase.startsWith('refs/')) {\n\t\t\t\t\tthrow new Error('createCommitFromDiff baseBranch must not include refs/ prefix');\n\t\t\t\t}\n\t\t\t\tthis.options.baseBranch = trimmedBase;\n\t\t\t}\n\t\t}\n\t\tif (this.options.ephemeralBase && !this.options.baseBranch) {\n\t\t\tthrow new Error('createCommitFromDiff ephemeralBase requires baseBranch');\n\t\t}\n\n\t\tthis.diffFactory = () => toAsyncIterable(this.options.initialDiff);\n\t}\n\n\tasync send(): Promise<CommitResult> {\n\t\tthis.ensureNotSent();\n\t\tthis.sent = true;\n\n\t\tconst metadata = this.buildMetadata();\n\t\tconst diffIterable = chunkify(this.diffFactory());\n\n\t\tconst authorization = await this.getAuthToken();\n\t\tconst ack = await this.transport.send({\n\t\t\tauthorization,\n\t\t\tsignal: this.options.signal,\n\t\t\tmetadata,\n\t\t\tdiffChunks: diffIterable,\n\t\t});\n\n\t\treturn buildCommitResult(ack);\n\t}\n\n\tprivate buildMetadata(): DiffCommitMetadataPayload {\n\t\tconst metadata: DiffCommitMetadataPayload = {\n\t\t\ttarget_branch: this.options.targetBranch,\n\t\t\tcommit_message: this.options.commitMessage,\n\t\t\tauthor: {\n\t\t\t\tname: this.options.author.name,\n\t\t\t\temail: this.options.author.email,\n\t\t\t},\n\t\t};\n\n\t\tif (this.options.expectedHeadSha) {\n\t\t\tmetadata.expected_head_sha = this.options.expectedHeadSha;\n\t\t}\n\t\tif (this.options.baseBranch) {\n\t\t\tmetadata.base_branch = this.options.baseBranch;\n\t\t}\n\t\tif (this.options.committer) {\n\t\t\tmetadata.committer = {\n\t\t\t\tname: this.options.committer.name,\n\t\t\t\temail: this.options.committer.email,\n\t\t\t};\n\t\t}\n\t\tif (this.options.ephemeral) {\n\t\t\tmetadata.ephemeral = true;\n\t\t}\n\t\tif (this.options.ephemeralBase) {\n\t\t\tmetadata.ephemeral_base = true;\n\t\t}\n\n\t\treturn metadata;\n\t}\n\n\tprivate ensureNotSent(): void {\n\t\tif (this.sent) {\n\t\t\tthrow new Error('createCommitFromDiff cannot be reused after send()');\n\t\t}\n\t}\n}\n\nexport class FetchDiffCommitTransport implements DiffCommitTransport {\n\tprivate readonly url: string;\n\n\tconstructor(config: { baseUrl: string; version: number }) {\n\t\tconst trimmedBase = config.baseUrl.replace(/\\/+$/, '');\n\t\tthis.url = `${trimmedBase}/api/v${config.version}/repos/diff-commit`;\n\t}\n\n\tasync send(request: DiffCommitTransportRequest): Promise<CommitPackAckRaw> {\n\t\tconst bodyIterable = buildMessageIterable(request.metadata, request.diffChunks);\n\t\tconst body = toRequestBody(bodyIterable);\n\n\t\tconst init: RequestInit = {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${request.authorization}`,\n\t\t\t\t'Content-Type': 'application/x-ndjson',\n\t\t\t\tAccept: 'application/json',\n\t\t\t},\n\t\t\tbody: body as any,\n\t\t\tsignal: request.signal,\n\t\t};\n\n\t\tif (requiresDuplex(body)) {\n\t\t\t(init as RequestInit & { duplex: 'half' }).duplex = 'half';\n\t\t}\n\n\t\tconst response = await fetch(this.url, init);\n\t\tif (!response.ok) {\n\t\t\tconst fallbackMessage = `createCommitFromDiff request failed (${response.status} ${response.statusText})`;\n\t\t\tconst { statusMessage, statusLabel, refUpdate } = await parseCommitPackError(\n\t\t\t\tresponse,\n\t\t\t\tfallbackMessage,\n\t\t\t);\n\t\t\tthrow new RefUpdateError(statusMessage, {\n\t\t\t\tstatus: statusLabel,\n\t\t\t\tmessage: statusMessage,\n\t\t\t\trefUpdate,\n\t\t\t});\n\t\t}\n\n\t\treturn commitPackAckSchema.parse(await response.json());\n\t}\n}\n\nfunction buildMessageIterable(\n\tmetadata: DiffCommitMetadataPayload,\n\tdiffChunks: AsyncIterable<ChunkSegment>,\n): AsyncIterable<Uint8Array> {\n\tconst encoder = new TextEncoder();\n\treturn {\n\t\tasync *[Symbol.asyncIterator]() {\n\t\t\tyield encoder.encode(`${JSON.stringify({ metadata })}\\n`);\n\t\t\tfor await (const segment of diffChunks) {\n\t\t\t\tconst payload = {\n\t\t\t\t\tdiff_chunk: {\n\t\t\t\t\t\tdata: base64Encode(segment.chunk),\n\t\t\t\t\t\teof: segment.eof,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tyield encoder.encode(`${JSON.stringify(payload)}\\n`);\n\t\t\t}\n\t\t},\n\t};\n}\n\nfunction normalizeDiffCommitOptions(\n\toptions: CreateCommitFromDiffOptions,\n): NormalizedDiffCommitOptions {\n\tif (!options || typeof options !== 'object') {\n\t\tthrow new Error('createCommitFromDiff options are required');\n\t}\n\n\tif (options.diff === undefined || options.diff === null) {\n\t\tthrow new Error('createCommitFromDiff diff is required');\n\t}\n\n\tconst targetBranch = normalizeBranchName(options.targetBranch);\n\n\tlet committer: CommitSignature | undefined;\n\tif (options.committer) {\n\t\tconst name = options.committer.name?.trim();\n\t\tconst email = options.committer.email?.trim();\n\t\tif (!name || !email) {\n\t\t\tthrow new Error('createCommitFromDiff committer name and email are required when provided');\n\t\t}\n\t\tcommitter = { name, email };\n\t}\n\n\treturn {\n\t\ttargetBranch,\n\t\tcommitMessage: options.commitMessage,\n\t\texpectedHeadSha: options.expectedHeadSha,\n\t\tbaseBranch: options.baseBranch,\n\t\tephemeral: options.ephemeral === true,\n\t\tephemeralBase: options.ephemeralBase === true,\n\t\tauthor: options.author,\n\t\tcommitter,\n\t\tsignal: options.signal,\n\t\tttl: options.ttl,\n\t\tinitialDiff: options.diff,\n\t};\n}\n\nfunction normalizeBranchName(value: string | undefined): string {\n\tconst trimmed = value?.trim();\n\tif (!trimmed) {\n\t\tthrow new Error('createCommitFromDiff targetBranch is required');\n\t}\n\tif (trimmed.startsWith('refs/heads/')) {\n\t\tconst branch = trimmed.slice('refs/heads/'.length).trim();\n\t\tif (!branch) {\n\t\t\tthrow new Error('createCommitFromDiff targetBranch must include a branch name');\n\t\t}\n\t\treturn branch;\n\t}\n\tif (trimmed.startsWith('refs/')) {\n\t\tthrow new Error('createCommitFromDiff targetBranch must not include refs/ prefix');\n\t}\n\treturn trimmed;\n}\n\nexport async function sendCommitFromDiff(deps: CommitFromDiffSendDeps): Promise<CommitResult> {\n\tconst executor = new DiffCommitExecutor(deps);\n\treturn executor.send();\n}\n","import { errorEnvelopeSchema } from './schemas';\nimport type { ValidAPIVersion, ValidMethod, ValidPath } from './types';\n\ninterface RequestOptions {\n\tallowedStatus?: number[];\n}\n\nexport class ApiError extends Error {\n\tpublic readonly status: number;\n\tpublic readonly statusText: string;\n\tpublic readonly method: ValidMethod;\n\tpublic readonly url: string;\n\tpublic readonly body?: unknown;\n\n\tconstructor(params: {\n\t\tmessage: string;\n\t\tstatus: number;\n\t\tstatusText: string;\n\t\tmethod: ValidMethod;\n\t\turl: string;\n\t\tbody?: unknown;\n\t}) {\n\t\tsuper(params.message);\n\t\tthis.name = 'ApiError';\n\t\tthis.status = params.status;\n\t\tthis.statusText = params.statusText;\n\t\tthis.method = params.method;\n\t\tthis.url = params.url;\n\t\tthis.body = params.body;\n\t}\n}\n\nexport class ApiFetcher {\n\tconstructor(\n\t\tprivate readonly API_BASE_URL: string,\n\t\tprivate readonly version: ValidAPIVersion,\n\t) {}\n\n\tprivate getBaseUrl() {\n\t\treturn `${this.API_BASE_URL}/api/v${this.version}`;\n\t}\n\n\tprivate getRequestUrl(path: ValidPath) {\n\t\tif (typeof path === 'string') {\n\t\t\treturn `${this.getBaseUrl()}/${path}`;\n\t\t} else if (path.params) {\n\t\t\tconst paramStr = new URLSearchParams(path.params).toString();\n\t\t\treturn `${this.getBaseUrl()}/${path.path}${paramStr ? `?${paramStr}` : ''}`;\n\t\t} else {\n\t\t\treturn `${this.getBaseUrl()}/${path.path}`;\n\t\t}\n\t}\n\n\tprivate async fetch(path: ValidPath, method: ValidMethod, jwt: string, options?: RequestOptions) {\n\t\tconst requestUrl = this.getRequestUrl(path);\n\n\t\tconst requestOptions: RequestInit = {\n\t\t\tmethod,\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${jwt}`,\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t},\n\t\t};\n\n\t\tif (method !== 'GET' && typeof path !== 'string' && path.body) {\n\t\t\trequestOptions.body = JSON.stringify(path.body);\n\t\t}\n\n\t\tconst response = await fetch(requestUrl, requestOptions);\n\n\t\tif (!response.ok) {\n\t\t\tconst allowed = options?.allowedStatus ?? [];\n\t\t\tif (allowed.includes(response.status)) {\n\t\t\t\treturn response;\n\t\t\t}\n\n\t\t\tlet errorBody: unknown;\n\t\t\tlet message: string | undefined;\n\t\t\tconst contentType = response.headers.get('content-type') ?? '';\n\n\t\t\ttry {\n\t\t\t\tif (contentType.includes('application/json')) {\n\t\t\t\t\terrorBody = await response.json();\n\t\t\t\t} else {\n\t\t\t\t\tconst text = await response.text();\n\t\t\t\t\terrorBody = text;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Fallback to plain text if JSON parse failed after reading body\n\t\t\t\ttry {\n\t\t\t\t\terrorBody = await response.text();\n\t\t\t\t} catch {\n\t\t\t\t\terrorBody = undefined;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof errorBody === 'string') {\n\t\t\t\tconst trimmed = errorBody.trim();\n\t\t\t\tif (trimmed) {\n\t\t\t\t\tmessage = trimmed;\n\t\t\t\t}\n\t\t\t} else if (errorBody && typeof errorBody === 'object') {\n\t\t\t\tconst parsedError = errorEnvelopeSchema.safeParse(errorBody);\n\t\t\t\tif (parsedError.success) {\n\t\t\t\t\tconst trimmed = parsedError.data.error.trim();\n\t\t\t\t\tif (trimmed) {\n\t\t\t\t\t\tmessage = trimmed;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthrow new ApiError({\n\t\t\t\tmessage:\n\t\t\t\t\tmessage ??\n\t\t\t\t\t`Request ${method} ${requestUrl} failed with status ${response.status} ${response.statusText}`,\n\t\t\t\tstatus: response.status,\n\t\t\t\tstatusText: response.statusText,\n\t\t\t\tmethod,\n\t\t\t\turl: requestUrl,\n\t\t\t\tbody: errorBody,\n\t\t\t});\n\t\t}\n\t\treturn response;\n\t}\n\n\tasync get(path: ValidPath, jwt: string, options?: RequestOptions) {\n\t\treturn this.fetch(path, 'GET', jwt, options);\n\t}\n\n\tasync post(path: ValidPath, jwt: string, options?: RequestOptions) {\n\t\treturn this.fetch(path, 'POST', jwt, options);\n\t}\n\n\tasync put(path: ValidPath, jwt: string, options?: RequestOptions) {\n\t\treturn this.fetch(path, 'PUT', jwt, options);\n\t}\n\n\tasync delete(path: ValidPath, jwt: string, options?: RequestOptions) {\n\t\treturn this.fetch(path, 'DELETE', jwt, options);\n\t}\n}\n","export function timingSafeEqual(a: string | Uint8Array, b: string | Uint8Array): boolean {\n\tconst bufferA = typeof a === 'string' ? new TextEncoder().encode(a) : a;\n\tconst bufferB = typeof b === 'string' ? new TextEncoder().encode(b) : b;\n\n\tif (bufferA.length !== bufferB.length) return false;\n\n\tlet result = 0;\n\tfor (let i = 0; i < bufferA.length; i++) {\n\t\tresult |= bufferA[i] ^ bufferB[i];\n\t}\n\treturn result === 0;\n}\n\nexport async function getEnvironmentCrypto() {\n\tif (!globalThis.crypto) {\n\t\tconst { webcrypto } = await import('node:crypto');\n\t\treturn webcrypto;\n\t}\n\treturn globalThis.crypto;\n}\n\nexport async function createHmac(algorithm: string, secret: string, data: string): Promise<string> {\n\tif (algorithm !== 'sha256') {\n\t\tthrow new Error('Only sha256 algorithm is supported');\n\t}\n\tif (!secret || secret.length === 0) {\n\t\tthrow new Error('Secret is required');\n\t}\n\n\tconst crypto = await getEnvironmentCrypto();\n\tconst encoder = new TextEncoder();\n\tconst key = await crypto.subtle.importKey(\n\t\t'raw',\n\t\tencoder.encode(secret),\n\t\t{ name: 'HMAC', hash: 'SHA-256' },\n\t\tfalse,\n\t\t['sign'],\n\t);\n\n\tconst signature = await crypto.subtle.sign('HMAC', key, encoder.encode(data));\n\treturn Array.from(new Uint8Array(signature))\n\t\t.map((b) => b.toString(16).padStart(2, '0'))\n\t\t.join('');\n}\n","/**\n * Webhook validation utilities for Pierre Git Storage\n */\n\nimport type {\n\tParsedWebhookSignature,\n\tRawWebhookPushEvent,\n\tWebhookEventPayload,\n\tWebhookPushEvent,\n\tWebhookValidationOptions,\n\tWebhookValidationResult,\n} from './types';\n\nimport { createHmac, timingSafeEqual } from './util';\n\nconst DEFAULT_MAX_AGE_SECONDS = 300; // 5 minutes\n\n/**\n * Parse the X-Pierre-Signature header\n * Format: t=<timestamp>,sha256=<signature>\n */\nexport function parseSignatureHeader(header: string): ParsedWebhookSignature | null {\n\tif (!header || typeof header !== 'string') {\n\t\treturn null;\n\t}\n\n\tlet timestamp = '';\n\tlet signature = '';\n\n\t// Split by comma and parse each element\n\tconst elements = header.split(',');\n\tfor (const element of elements) {\n\t\tconst trimmedElement = element.trim();\n\t\tconst parts = trimmedElement.split('=', 2);\n\t\tif (parts.length !== 2) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst [key, value] = parts;\n\t\tswitch (key) {\n\t\t\tcase 't':\n\t\t\t\ttimestamp = value;\n\t\t\t\tbreak;\n\t\t\tcase 'sha256':\n\t\t\t\tsignature = value;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!timestamp || !signature) {\n\t\treturn null;\n\t}\n\n\treturn { timestamp, signature };\n}\n\n/**\n * Validate a webhook signature and timestamp\n *\n * @param payload - The raw webhook payload (request body)\n * @param signatureHeader - The X-Pierre-Signature header value\n * @param secret - The webhook secret for HMAC verification\n * @param options - Validation options\n * @returns Validation result with details\n *\n * @example\n * ```typescript\n * const result = await validateWebhookSignature(\n * requestBody,\n * request.headers['x-pierre-signature'],\n * webhookSecret\n * );\n *\n * if (!result.valid) {\n * console.error('Invalid webhook:', result.error);\n * return;\n * }\n * ```\n */\nexport async function validateWebhookSignature(\n\tpayload: string | Buffer,\n\tsignatureHeader: string,\n\tsecret: string,\n\toptions: WebhookValidationOptions = {},\n): Promise<WebhookValidationResult> {\n\tif (!secret || secret.length === 0) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terror: 'Empty secret is not allowed',\n\t\t};\n\t}\n\n\t// Parse the signature header\n\tconst parsed = parseSignatureHeader(signatureHeader);\n\tif (!parsed) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terror: 'Invalid signature header format',\n\t\t};\n\t}\n\n\t// Parse timestamp\n\tconst timestamp = Number.parseInt(parsed.timestamp, 10);\n\tif (isNaN(timestamp)) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terror: 'Invalid timestamp in signature',\n\t\t};\n\t}\n\n\t// Validate timestamp age (prevent replay attacks)\n\tconst maxAge = options.maxAgeSeconds ?? DEFAULT_MAX_AGE_SECONDS;\n\tif (maxAge > 0) {\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst age = now - timestamp;\n\n\t\tif (age > maxAge) {\n\t\t\treturn {\n\t\t\t\tvalid: false,\n\t\t\t\terror: `Webhook timestamp too old (${age} seconds)`,\n\t\t\t\ttimestamp,\n\t\t\t};\n\t\t}\n\n\t\t// Also reject timestamps from the future (clock skew tolerance of 60 seconds)\n\t\tif (age < -60) {\n\t\t\treturn {\n\t\t\t\tvalid: false,\n\t\t\t\terror: 'Webhook timestamp is in the future',\n\t\t\t\ttimestamp,\n\t\t\t};\n\t\t}\n\t}\n\n\t// Convert payload to string if it's a Buffer\n\tconst payloadStr = typeof payload === 'string' ? payload : payload.toString('utf8');\n\n\t// Compute expected signature\n\t// Format: HMAC-SHA256(secret, timestamp + \".\" + payload)\n\tconst signedData = `${parsed.timestamp}.${payloadStr}`;\n\tconst expectedSignature = await createHmac('sha256', secret, signedData);\n\n\t// Compare signatures using constant-time comparison\n\tconst expectedBuffer = Buffer.from(expectedSignature);\n\tconst actualBuffer = Buffer.from(parsed.signature);\n\n\t// Ensure both buffers are the same length for timing-safe comparison\n\tif (expectedBuffer.length !== actualBuffer.length) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terror: 'Invalid signature',\n\t\t\ttimestamp,\n\t\t};\n\t}\n\n\tconst signaturesMatch = timingSafeEqual(expectedBuffer, actualBuffer);\n\tif (!signaturesMatch) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terror: 'Invalid signature',\n\t\t\ttimestamp,\n\t\t};\n\t}\n\n\treturn {\n\t\tvalid: true,\n\t\ttimestamp,\n\t};\n}\n\n/**\n * Validate a webhook request\n *\n * This is a convenience function that validates the signature and parses the payload.\n *\n * @param payload - The raw webhook payload (request body)\n * @param headers - The request headers (must include x-pierre-signature and x-pierre-event)\n * @param secret - The webhook secret for HMAC verification\n * @param options - Validation options\n * @returns The parsed webhook payload if valid, or validation error\n *\n * @example\n * ```typescript\n * const result = await validateWebhook(\n * request.body,\n * request.headers,\n * process.env.WEBHOOK_SECRET\n * );\n *\n * if (!result.valid) {\n * return new Response('Invalid webhook', { status: 401 });\n * }\n *\n * // Type-safe access to the webhook payload\n * console.log('Push event:', result.payload);\n * ```\n */\nexport async function validateWebhook(\n\tpayload: string | Buffer,\n\theaders: Record<string, string | string[] | undefined>,\n\tsecret: string,\n\toptions: WebhookValidationOptions = {},\n): Promise<WebhookValidationResult & { payload?: WebhookEventPayload }> {\n\t// Get signature header\n\tconst signatureHeader = headers['x-pierre-signature'] || headers['X-Pierre-Signature'];\n\tif (!signatureHeader || Array.isArray(signatureHeader)) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terror: 'Missing or invalid X-Pierre-Signature header',\n\t\t};\n\t}\n\n\t// Get event type header\n\tconst eventType = headers['x-pierre-event'] || headers['X-Pierre-Event'];\n\tif (!eventType || Array.isArray(eventType)) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terror: 'Missing or invalid X-Pierre-Event header',\n\t\t};\n\t}\n\n\t// Validate signature\n\tconst validationResult = await validateWebhookSignature(\n\t\tpayload,\n\t\tsignatureHeader,\n\t\tsecret,\n\t\toptions,\n\t);\n\n\tif (!validationResult.valid) {\n\t\treturn validationResult;\n\t}\n\n\t// Parse payload\n\tconst payloadStr = typeof payload === 'string' ? payload : payload.toString('utf8');\n\tlet parsedJson: unknown;\n\ttry {\n\t\tparsedJson = JSON.parse(payloadStr);\n\t} catch {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terror: 'Invalid JSON payload',\n\t\t\ttimestamp: validationResult.timestamp,\n\t\t};\n\t}\n\n\tconst conversion = convertWebhookPayload(String(eventType), parsedJson);\n\tif (!conversion.valid) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terror: conversion.error,\n\t\t\ttimestamp: validationResult.timestamp,\n\t\t};\n\t}\n\n\treturn {\n\t\tvalid: true,\n\t\teventType,\n\t\ttimestamp: validationResult.timestamp,\n\t\tpayload: conversion.payload,\n\t};\n}\n\nfunction convertWebhookPayload(\n\teventType: string,\n\traw: unknown,\n): { valid: true; payload: WebhookEventPayload } | { valid: false; error: string } {\n\tif (eventType === 'push') {\n\t\tif (!isRawWebhookPushEvent(raw)) {\n\t\t\treturn {\n\t\t\t\tvalid: false,\n\t\t\t\terror: 'Invalid push payload',\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tvalid: true,\n\t\t\tpayload: transformPushEvent(raw),\n\t\t};\n\t}\n\tconst fallbackPayload = { type: eventType, raw };\n\treturn {\n\t\tvalid: true,\n\t\tpayload: fallbackPayload,\n\t};\n}\n\nfunction transformPushEvent(raw: RawWebhookPushEvent): WebhookPushEvent {\n\treturn {\n\t\ttype: 'push' as const,\n\t\trepository: {\n\t\t\tid: raw.repository.id,\n\t\t\turl: raw.repository.url,\n\t\t},\n\t\tref: raw.ref,\n\t\tbefore: raw.before,\n\t\tafter: raw.after,\n\t\tcustomerId: raw.customer_id,\n\t\tpushedAt: new Date(raw.pushed_at),\n\t\trawPushedAt: raw.pushed_at,\n\t};\n}\n\nfunction isRawWebhookPushEvent(value: unknown): value is RawWebhookPushEvent {\n\tif (!isRecord(value)) {\n\t\treturn false;\n\t}\n\tif (!isRecord(value.repository)) {\n\t\treturn false;\n\t}\n\treturn (\n\t\ttypeof value.repository.id === 'string' &&\n\t\ttypeof value.repository.url === 'string' &&\n\t\ttypeof value.ref === 'string' &&\n\t\ttypeof value.before === 'string' &&\n\t\ttypeof value.after === 'string' &&\n\t\ttypeof value.customer_id === 'string' &&\n\t\ttypeof value.pushed_at === 'string'\n\t);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === 'object' && value !== null;\n}\n","/**\n * Pierre Git Storage SDK\n *\n * A TypeScript SDK for interacting with Pierre's git storage system\n */\n\nimport { importPKCS8, SignJWT } from 'jose';\nimport snakecaseKeys from 'snakecase-keys';\nimport { createCommitBuilder, FetchCommitTransport, resolveCommitTtlSeconds } from './commit';\nimport { FetchDiffCommitTransport, sendCommitFromDiff } from './diff-commit';\nimport { RefUpdateError } from './errors';\nimport { ApiFetcher } from './fetch';\nimport type { RestoreCommitAckRaw } from './schemas';\nimport {\n\tbranchDiffResponseSchema,\n\tcommitDiffResponseSchema,\n\tcreateBranchResponseSchema,\n\tlistBranchesResponseSchema,\n\tlistCommitsResponseSchema,\n\tlistFilesResponseSchema,\n\trestoreCommitAckSchema,\n\trestoreCommitResponseSchema,\n} from './schemas';\nimport type {\n\tBranchInfo,\n\tCommitBuilder,\n\tCommitInfo,\n\tCommitResult,\n\tCreateBranchOptions,\n\tCreateBranchResponse,\n\tCreateBranchResult,\n\tCreateCommitFromDiffOptions,\n\tCreateCommitOptions,\n\tCreateRepoOptions,\n\tDiffFileState,\n\tFileDiff,\n\tFilteredFile,\n\tFindOneOptions,\n\tGetBranchDiffOptions,\n\tGetBranchDiffResponse,\n\tGetBranchDiffResult,\n\tGetCommitDiffOptions,\n\tGetCommitDiffResponse,\n\tGetCommitDiffResult,\n\tGetFileOptions,\n\tGetRemoteURLOptions,\n\tGitStorageOptions,\n\tListBranchesOptions,\n\tListBranchesResponse,\n\tListBranchesResult,\n\tListCommitsOptions,\n\tListCommitsResponse,\n\tListCommitsResult,\n\tListFilesOptions,\n\tListFilesResult,\n\tOverrideableGitStorageOptions,\n\tPullUpstreamOptions,\n\tRawBranchInfo,\n\tRawCommitInfo,\n\tRawFileDiff,\n\tRawFilteredFile,\n\tRefUpdate,\n\tRepo,\n\tRestoreCommitOptions,\n\tRestoreCommitResult,\n\tValidAPIVersion,\n} from './types';\n\n/**\n * Type definitions for Pierre Git Storage SDK\n */\n\nexport { RefUpdateError } from './errors';\nexport { ApiError } from './fetch';\n// Import additional types from types.ts\nexport * from './types';\n\n// Export webhook validation utilities\nexport { parseSignatureHeader, validateWebhook, validateWebhookSignature } from './webhook';\n\n/**\n * Git Storage API\n */\n\ndeclare const __STORAGE_BASE_URL__: string;\ndeclare const __API_BASE_URL__: string;\n\nconst API_BASE_URL = __API_BASE_URL__;\nconst STORAGE_BASE_URL = __STORAGE_BASE_URL__;\nconst API_VERSION: ValidAPIVersion = 1;\n\nconst apiInstanceMap = new Map<string, ApiFetcher>();\nconst DEFAULT_TOKEN_TTL_SECONDS = 60 * 60; // 1 hour\nconst RESTORE_COMMIT_ALLOWED_STATUS = [\n\t400, // Bad Request - validation errors\n\t401, // Unauthorized - missing/invalid auth header\n\t403, // Forbidden - missing git:write scope\n\t404, // Not Found - repo lookup failures\n\t408, // Request Timeout - client cancelled\n\t409, // Conflict - concurrent ref updates\n\t412, // Precondition Failed - optimistic concurrency\n\t422, // Unprocessable Entity - metadata issues\n\t429, // Too Many Requests - upstream throttling\n\t499, // Client Closed Request - storage cancellation\n\t500, // Internal Server Error - generic failure\n\t502, // Bad Gateway - storage/gateway bridge issues\n\t503, // Service Unavailable - storage selection failures\n\t504, // Gateway Timeout - long-running storage operations\n] as const;\n\nfunction resolveInvocationTtlSeconds(\n\toptions?: { ttl?: number },\n\tdefaultValue: number = DEFAULT_TOKEN_TTL_SECONDS,\n): number {\n\tif (typeof options?.ttl === 'number' && options.ttl > 0) {\n\t\treturn options.ttl;\n\t}\n\treturn defaultValue;\n}\n\ntype RestoreCommitAck = RestoreCommitAckRaw;\n\nfunction toRefUpdate(result: RestoreCommitAck['result']): RefUpdate {\n\treturn {\n\t\tbranch: result.branch,\n\t\toldSha: result.old_sha,\n\t\tnewSha: result.new_sha,\n\t};\n}\n\nfunction buildRestoreCommitResult(ack: RestoreCommitAck): RestoreCommitResult {\n\tconst refUpdate = toRefUpdate(ack.result);\n\tif (!ack.result.success) {\n\t\tthrow new RefUpdateError(\n\t\t\tack.result.message ?? `Restore commit failed with status ${ack.result.status}`,\n\t\t\t{\n\t\t\t\tstatus: ack.result.status,\n\t\t\t\tmessage: ack.result.message,\n\t\t\t\trefUpdate,\n\t\t\t},\n\t\t);\n\t}\n\treturn {\n\t\tcommitSha: ack.commit.commit_sha,\n\t\ttreeSha: ack.commit.tree_sha,\n\t\ttargetBranch: ack.commit.target_branch,\n\t\tpackBytes: ack.commit.pack_bytes,\n\t\trefUpdate,\n\t};\n}\n\ninterface RestoreCommitFailureInfo {\n\tstatus?: string;\n\tmessage?: string;\n\trefUpdate?: Partial<RefUpdate>;\n}\n\nfunction toPartialRefUpdate(\n\tbranch?: unknown,\n\toldSha?: unknown,\n\tnewSha?: unknown,\n): Partial<RefUpdate> | undefined {\n\tconst refUpdate: Partial<RefUpdate> = {};\n\tif (typeof branch === 'string' && branch.trim() !== '') {\n\t\trefUpdate.branch = branch;\n\t}\n\tif (typeof oldSha === 'string' && oldSha.trim() !== '') {\n\t\trefUpdate.oldSha = oldSha;\n\t}\n\tif (typeof newSha === 'string' && newSha.trim() !== '') {\n\t\trefUpdate.newSha = newSha;\n\t}\n\treturn Object.keys(refUpdate).length > 0 ? refUpdate : undefined;\n}\n\nfunction parseRestoreCommitPayload(\n\tpayload: unknown,\n): { ack: RestoreCommitAck } | { failure: RestoreCommitFailureInfo } | null {\n\tconst ack = restoreCommitAckSchema.safeParse(payload);\n\tif (ack.success) {\n\t\treturn { ack: ack.data };\n\t}\n\n\tconst failure = restoreCommitResponseSchema.safeParse(payload);\n\tif (failure.success) {\n\t\tconst result = failure.data.result;\n\t\treturn {\n\t\t\tfailure: {\n\t\t\t\tstatus: result.status,\n\t\t\t\tmessage: result.message,\n\t\t\t\trefUpdate: toPartialRefUpdate(result.branch, result.old_sha, result.new_sha),\n\t\t\t},\n\t\t};\n\t}\n\n\treturn null;\n}\n\nfunction httpStatusToRestoreStatus(status: number): string {\n\tswitch (status) {\n\t\tcase 409:\n\t\t\treturn 'conflict';\n\t\tcase 412:\n\t\t\treturn 'precondition_failed';\n\t\tdefault:\n\t\t\treturn `${status}`;\n\t}\n}\n\nfunction getApiInstance(baseUrl: string, version: ValidAPIVersion) {\n\tif (!apiInstanceMap.has(`${baseUrl}--${version}`)) {\n\t\tapiInstanceMap.set(`${baseUrl}--${version}`, new ApiFetcher(baseUrl, version));\n\t}\n\treturn apiInstanceMap.get(`${baseUrl}--${version}`)!;\n}\n\nfunction transformBranchInfo(raw: RawBranchInfo): BranchInfo {\n\treturn {\n\t\tcursor: raw.cursor,\n\t\tname: raw.name,\n\t\theadSha: raw.head_sha,\n\t\tcreatedAt: raw.created_at,\n\t};\n}\n\nfunction transformListBranchesResult(raw: ListBranchesResponse): ListBranchesResult {\n\treturn {\n\t\tbranches: raw.branches.map(transformBranchInfo),\n\t\tnextCursor: raw.next_cursor ?? undefined,\n\t\thasMore: raw.has_more,\n\t};\n}\n\nfunction transformCommitInfo(raw: RawCommitInfo): CommitInfo {\n\tconst parsedDate = new Date(raw.date);\n\treturn {\n\t\tsha: raw.sha,\n\t\tmessage: raw.message,\n\t\tauthorName: raw.author_name,\n\t\tauthorEmail: raw.author_email,\n\t\tcommitterName: raw.committer_name,\n\t\tcommitterEmail: raw.committer_email,\n\t\tdate: parsedDate,\n\t\trawDate: raw.date,\n\t};\n}\n\nfunction transformListCommitsResult(raw: ListCommitsResponse): ListCommitsResult {\n\treturn {\n\t\tcommits: raw.commits.map(transformCommitInfo),\n\t\tnextCursor: raw.next_cursor ?? undefined,\n\t\thasMore: raw.has_more,\n\t};\n}\n\nfunction normalizeDiffState(rawState: string): DiffFileState {\n\tif (!rawState) {\n\t\treturn 'unknown';\n\t}\n\tconst leading = rawState.trim()[0]?.toUpperCase();\n\tswitch (leading) {\n\t\tcase 'A':\n\t\t\treturn 'added';\n\t\tcase 'M':\n\t\t\treturn 'modified';\n\t\tcase 'D':\n\t\t\treturn 'deleted';\n\t\tcase 'R':\n\t\t\treturn 'renamed';\n\t\tcase 'C':\n\t\t\treturn 'copied';\n\t\tcase 'T':\n\t\t\treturn 'type_changed';\n\t\tcase 'U':\n\t\t\treturn 'unmerged';\n\t\tdefault:\n\t\t\treturn 'unknown';\n\t}\n}\n\nfunction transformFileDiff(raw: RawFileDiff): FileDiff {\n\tconst normalizedState = normalizeDiffState(raw.state);\n\treturn {\n\t\tpath: raw.path,\n\t\tstate: normalizedState,\n\t\trawState: raw.state,\n\t\toldPath: raw.old_path ?? undefined,\n\t\traw: raw.raw,\n\t\tbytes: raw.bytes,\n\t\tisEof: raw.is_eof,\n\t};\n}\n\nfunction transformFilteredFile(raw: RawFilteredFile): FilteredFile {\n\tconst normalizedState = normalizeDiffState(raw.state);\n\treturn {\n\t\tpath: raw.path,\n\t\tstate: normalizedState,\n\t\trawState: raw.state,\n\t\toldPath: raw.old_path ?? undefined,\n\t\tbytes: raw.bytes,\n\t\tisEof: raw.is_eof,\n\t};\n}\n\nfunction transformBranchDiffResult(raw: GetBranchDiffResponse): GetBranchDiffResult {\n\treturn {\n\t\tbranch: raw.branch,\n\t\tbase: raw.base,\n\t\tstats: raw.stats,\n\t\tfiles: raw.files.map(transformFileDiff),\n\t\tfilteredFiles: raw.filtered_files.map(transformFilteredFile),\n\t};\n}\n\nfunction transformCommitDiffResult(raw: GetCommitDiffResponse): GetCommitDiffResult {\n\treturn {\n\t\tsha: raw.sha,\n\t\tstats: raw.stats,\n\t\tfiles: raw.files.map(transformFileDiff),\n\t\tfilteredFiles: raw.filtered_files.map(transformFilteredFile),\n\t};\n}\n\nfunction transformCreateBranchResult(raw: CreateBranchResponse): CreateBranchResult {\n\treturn {\n\t\tmessage: raw.message,\n\t\ttargetBranch: raw.target_branch,\n\t\ttargetIsEphemeral: raw.target_is_ephemeral,\n\t\tcommitSha: raw.commit_sha ?? undefined,\n\t};\n}\n\n/**\n * Implementation of the Repo interface\n */\nclass RepoImpl implements Repo {\n\tprivate readonly api: ApiFetcher;\n\n\tconstructor(\n\t\tpublic readonly id: string,\n\t\tprivate readonly options: GitStorageOptions,\n\t\tprivate readonly generateJWT: (\n\t\t\trepoId: string,\n\t\t\toptions?: GetRemoteURLOptions,\n\t\t) => Promise<string>,\n\t) {\n\t\tthis.api = getApiInstance(\n\t\t\tthis.options.apiBaseUrl ?? API_BASE_URL,\n\t\t\tthis.options.apiVersion ?? API_VERSION,\n\t\t);\n\t}\n\n\tasync getRemoteURL(urlOptions?: GetRemoteURLOptions): Promise<string> {\n\t\tconst storageBaseUrl = this.options.storageBaseUrl ?? STORAGE_BASE_URL;\n\t\tconst url = new URL(`https://${this.options.name}.${storageBaseUrl}/${this.id}.git`);\n\t\turl.username = `t`;\n\t\turl.password = await this.generateJWT(this.id, urlOptions);\n\t\treturn url.toString();\n\t}\n\n\tasync getEphemeralRemoteURL(urlOptions?: GetRemoteURLOptions): Promise<string> {\n\t\tconst storageBaseUrl = this.options.storageBaseUrl ?? STORAGE_BASE_URL;\n\t\tconst url = new URL(`https://${this.options.name}.${storageBaseUrl}/${this.id}+ephemeral.git`);\n\t\turl.username = `t`;\n\t\turl.password = await this.generateJWT(this.id, urlOptions);\n\t\treturn url.toString();\n\t}\n\n\tasync getFileStream(options: GetFileOptions): Promise<Response> {\n\t\tconst ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n\t\tconst jwt = await this.generateJWT(this.id, {\n\t\t\tpermissions: ['git:read'],\n\t\t\tttl,\n\t\t});\n\n\t\tconst params: Record<string, string> = {\n\t\t\tpath: options.path,\n\t\t};\n\n\t\tif (options.ref) {\n\t\t\tparams.ref = options.ref;\n\t\t}\n\t\tif (typeof options.ephemeral === 'boolean') {\n\t\t\tparams.ephemeral = String(options.ephemeral);\n\t\t}\n\n\t\t// Return the raw fetch Response for streaming\n\t\treturn this.api.get({ path: 'repos/file', params }, jwt);\n\t}\n\n\tasync listFiles(options?: ListFilesOptions): Promise<ListFilesResult> {\n\t\tconst ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n\t\tconst jwt = await this.generateJWT(this.id, {\n\t\t\tpermissions: ['git:read'],\n\t\t\tttl,\n\t\t});\n\n\t\tconst params: Record<string, string> = {};\n\t\tif (options?.ref) {\n\t\t\tparams.ref = options.ref;\n\t\t}\n\t\tif (typeof options?.ephemeral === 'boolean') {\n\t\t\tparams.ephemeral = String(options.ephemeral);\n\t\t}\n\t\tconst response = await this.api.get(\n\t\t\t{ path: 'repos/files', params: Object.keys(params).length ? params : undefined },\n\t\t\tjwt,\n\t\t);\n\n\t\tconst raw = listFilesResponseSchema.parse(await response.json());\n\t\treturn { paths: raw.paths, ref: raw.ref };\n\t}\n\n\tasync listBranches(options?: ListBranchesOptions): Promise<ListBranchesResult> {\n\t\tconst ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n\t\tconst jwt = await this.generateJWT(this.id, {\n\t\t\tpermissions: ['git:read'],\n\t\t\tttl,\n\t\t});\n\n\t\tconst cursor = options?.cursor;\n\t\tconst limit = options?.limit;\n\n\t\tlet params: Record<string, string> | undefined;\n\n\t\tif (typeof cursor === 'string' || typeof limit === 'number') {\n\t\t\tparams = {};\n\t\t\tif (typeof cursor === 'string') {\n\t\t\t\tparams.cursor = cursor;\n\t\t\t}\n\t\t\tif (typeof limit === 'number') {\n\t\t\t\tparams.limit = limit.toString();\n\t\t\t}\n\t\t}\n\n\t\tconst response = await this.api.get({ path: 'repos/branches', params }, jwt);\n\n\t\tconst raw = listBranchesResponseSchema.parse(await response.json());\n\t\treturn transformListBranchesResult({\n\t\t\t...raw,\n\t\t\tnext_cursor: raw.next_cursor ?? undefined,\n\t\t});\n\t}\n\n\tasync listCommits(options?: ListCommitsOptions): Promise<ListCommitsResult> {\n\t\tconst ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n\t\tconst jwt = await this.generateJWT(this.id, {\n\t\t\tpermissions: ['git:read'],\n\t\t\tttl,\n\t\t});\n\n\t\tlet params: Record<string, string> | undefined;\n\n\t\tif (options?.branch || options?.cursor || options?.limit) {\n\t\t\tparams = {};\n\t\t\tif (options?.branch) {\n\t\t\t\tparams.branch = options.branch;\n\t\t\t}\n\t\t\tif (options?.cursor) {\n\t\t\t\tparams.cursor = options.cursor;\n\t\t\t}\n\t\t\tif (typeof options?.limit == 'number') {\n\t\t\t\tparams.limit = options.limit.toString();\n\t\t\t}\n\t\t}\n\n\t\tconst response = await this.api.get({ path: 'repos/commits', params }, jwt);\n\n\t\tconst raw = listCommitsResponseSchema.parse(await response.json());\n\t\treturn transformListCommitsResult({\n\t\t\t...raw,\n\t\t\tnext_cursor: raw.next_cursor ?? undefined,\n\t\t});\n\t}\n\n\tasync getBranchDiff(options: GetBranchDiffOptions): Promise<GetBranchDiffResult> {\n\t\tconst ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n\t\tconst jwt = await this.generateJWT(this.id, {\n\t\t\tpermissions: ['git:read'],\n\t\t\tttl,\n\t\t});\n\n\t\tconst params: Record<string, string> = {\n\t\t\tbranch: options.branch,\n\t\t};\n\n\t\tif (options.base) {\n\t\t\tparams.base = options.base;\n\t\t}\n\n\t\tconst response = await this.api.get({ path: 'repos/branches/diff', params }, jwt);\n\n\t\tconst raw = branchDiffResponseSchema.parse(await response.json());\n\t\treturn transformBranchDiffResult(raw);\n\t}\n\n\tasync getCommitDiff(options: GetCommitDiffOptions): Promise<GetCommitDiffResult> {\n\t\tconst ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n\t\tconst jwt = await this.generateJWT(this.id, {\n\t\t\tpermissions: ['git:read'],\n\t\t\tttl,\n\t\t});\n\n\t\tconst params: Record<string, string> = {\n\t\t\tsha: options.sha,\n\t\t};\n\n\t\tconst response = await this.api.get({ path: 'repos/diff', params }, jwt);\n\n\t\tconst raw = commitDiffResponseSchema.parse(await response.json());\n\t\treturn transformCommitDiffResult(raw);\n\t}\n\n\tasync pullUpstream(options: PullUpstreamOptions = {}): Promise<void> {\n\t\tconst ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n\t\tconst jwt = await this.generateJWT(this.id, {\n\t\t\tpermissions: ['git:write'],\n\t\t\tttl,\n\t\t});\n\n\t\tconst body: Record<string, string> = {};\n\n\t\tif (options.ref) {\n\t\t\tbody.ref = options.ref;\n\t\t}\n\n\t\tconst response = await this.api.post({ path: 'repos/pull-upstream', body }, jwt);\n\n\t\tif (response.status !== 202) {\n\t\t\tthrow new Error(`Pull Upstream failed: ${response.status} ${await response.text()}`);\n\t\t}\n\n\t\treturn;\n\t}\n\n\tasync createBranch(options: CreateBranchOptions): Promise<CreateBranchResult> {\n\t\tconst baseBranch = options?.baseBranch?.trim();\n\t\tif (!baseBranch) {\n\t\t\tthrow new Error('createBranch baseBranch is required');\n\t\t}\n\t\tconst targetBranch = options?.targetBranch?.trim();\n\t\tif (!targetBranch) {\n\t\t\tthrow new Error('createBranch targetBranch is required');\n\t\t}\n\n\t\tconst ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n\t\tconst jwt = await this.generateJWT(this.id, {\n\t\t\tpermissions: ['git:write'],\n\t\t\tttl,\n\t\t});\n\n\t\tconst body: Record<string, unknown> = {\n\t\t\tbase_branch: baseBranch,\n\t\t\ttarget_branch: targetBranch,\n\t\t};\n\n\t\tif (options.baseIsEphemeral === true) {\n\t\t\tbody.base_is_ephemeral = true;\n\t\t}\n\t\tif (options.targetIsEphemeral === true) {\n\t\t\tbody.target_is_ephemeral = true;\n\t\t}\n\n\t\tconst response = await this.api.post({ path: 'repos/branches/create', body }, jwt);\n\t\tconst raw = createBranchResponseSchema.parse(await response.json());\n\t\treturn transformCreateBranchResult(raw);\n\t}\n\n\tasync restoreCommit(options: RestoreCommitOptions): Promise<RestoreCommitResult> {\n\t\tconst targetBranch = options?.targetBranch?.trim();\n\t\tif (!targetBranch) {\n\t\t\tthrow new Error('restoreCommit targetBranch is required');\n\t\t}\n\t\tif (targetBranch.startsWith('refs/')) {\n\t\t\tthrow new Error('restoreCommit targetBranch must not include refs/ prefix');\n\t\t}\n\n\t\tconst targetCommitSha = options?.targetCommitSha?.trim();\n\t\tif (!targetCommitSha) {\n\t\t\tthrow new Error('restoreCommit targetCommitSha is required');\n\t\t}\n\t\tconst commitMessage = options?.commitMessage?.trim();\n\n\t\tconst authorName = options.author?.name?.trim();\n\t\tconst authorEmail = options.author?.email?.trim();\n\t\tif (!authorName || !authorEmail) {\n\t\t\tthrow new Error('restoreCommit author name and email are required');\n\t\t}\n\n\t\tconst ttl = resolveCommitTtlSeconds(options);\n\t\tconst jwt = await this.generateJWT(this.id, {\n\t\t\tpermissions: ['git:write'],\n\t\t\tttl,\n\t\t});\n\n\t\tconst metadata: Record<string, unknown> = {\n\t\t\ttarget_branch: targetBranch,\n\t\t\ttarget_commit_sha: targetCommitSha,\n\t\t\tauthor: {\n\t\t\t\tname: authorName,\n\t\t\t\temail: authorEmail,\n\t\t\t},\n\t\t};\n\n\t\tif (commitMessage) {\n\t\t\tmetadata.commit_message = commitMessage;\n\t\t}\n\n\t\tconst expectedHeadSha = options.expectedHeadSha?.trim();\n\t\tif (expectedHeadSha) {\n\t\t\tmetadata.expected_head_sha = expectedHeadSha;\n\t\t}\n\n\t\tif (options.committer) {\n\t\t\tconst committerName = options.committer.name?.trim();\n\t\t\tconst committerEmail = options.committer.email?.trim();\n\t\t\tif (!committerName || !committerEmail) {\n\t\t\t\tthrow new Error('restoreCommit committer name and email are required when provided');\n\t\t\t}\n\t\t\tmetadata.committer = {\n\t\t\t\tname: committerName,\n\t\t\t\temail: committerEmail,\n\t\t\t};\n\t\t}\n\n\t\tconst response = await this.api.post(\n\t\t\t{ path: 'repos/restore-commit', body: { metadata } },\n\t\t\tjwt,\n\t\t\t{\n\t\t\t\tallowedStatus: [...RESTORE_COMMIT_ALLOWED_STATUS],\n\t\t\t},\n\t\t);\n\n\t\tconst payload = await response.json();\n\t\tconst parsed = parseRestoreCommitPayload(payload);\n\t\tif (parsed && 'ack' in parsed) {\n\t\t\treturn buildRestoreCommitResult(parsed.ack);\n\t\t}\n\n\t\tconst failure = parsed && 'failure' in parsed ? parsed.failure : undefined;\n\t\tconst status = failure?.status ?? httpStatusToRestoreStatus(response.status);\n\t\tconst message =\n\t\t\tfailure?.message ??\n\t\t\t`Restore commit failed with HTTP ${response.status}` +\n\t\t\t\t(response.statusText ? ` ${response.statusText}` : '');\n\n\t\tthrow new RefUpdateError(message, {\n\t\t\tstatus,\n\t\t\trefUpdate: failure?.refUpdate,\n\t\t});\n\t}\n\n\tcreateCommit(options: CreateCommitOptions): CommitBuilder {\n\t\tconst version = this.options.apiVersion ?? API_VERSION;\n\t\tconst baseUrl = this.options.apiBaseUrl ?? API_BASE_URL;\n\t\tconst transport = new FetchCommitTransport({ baseUrl, version });\n\t\tconst ttl = resolveCommitTtlSeconds(options);\n\t\tconst builderOptions: CreateCommitOptions = {\n\t\t\t...options,\n\t\t\tttl,\n\t\t};\n\t\tconst getAuthToken = () =>\n\t\t\tthis.generateJWT(this.id, {\n\t\t\t\tpermissions: ['git:write'],\n\t\t\t\tttl,\n\t\t\t});\n\n\t\treturn createCommitBuilder({\n\t\t\toptions: builderOptions,\n\t\t\tgetAuthToken,\n\t\t\ttransport,\n\t\t});\n\t}\n\n\tasync createCommitFromDiff(options: CreateCommitFromDiffOptions): Promise<CommitResult> {\n\t\tconst version = this.options.apiVersion ?? API_VERSION;\n\t\tconst baseUrl = this.options.apiBaseUrl ?? API_BASE_URL;\n\t\tconst transport = new FetchDiffCommitTransport({ baseUrl, version });\n\t\tconst ttl = resolveCommitTtlSeconds(options);\n\t\tconst requestOptions: CreateCommitFromDiffOptions = {\n\t\t\t...options,\n\t\t\tttl,\n\t\t};\n\t\tconst getAuthToken = () =>\n\t\t\tthis.generateJWT(this.id, {\n\t\t\t\tpermissions: ['git:write'],\n\t\t\t\tttl,\n\t\t\t});\n\n\t\treturn sendCommitFromDiff({\n\t\t\toptions: requestOptions,\n\t\t\tgetAuthToken,\n\t\t\ttransport,\n\t\t});\n\t}\n}\n\nexport class GitStorage {\n\tprivate static overrides: OverrideableGitStorageOptions = {};\n\tprivate options: GitStorageOptions;\n\tprivate api: ApiFetcher;\n\n\tconstructor(options: GitStorageOptions) {\n\t\tif (\n\t\t\t!options ||\n\t\t\toptions.name === undefined ||\n\t\t\toptions.key === undefined ||\n\t\t\toptions.name === null ||\n\t\t\toptions.key === null\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t'GitStorage requires a name and key. Please check your configuration and try again.',\n\t\t\t);\n\t\t}\n\n\t\tif (typeof options.name !== 'string' || options.name.trim() === '') {\n\t\t\tthrow new Error('GitStorage name must be a non-empty string.');\n\t\t}\n\n\t\tif (typeof options.key !== 'string' || options.key.trim() === '') {\n\t\t\tthrow new Error('GitStorage key must be a non-empty string.');\n\t\t}\n\n\t\tconst resolvedApiBaseUrl =\n\t\t\toptions.apiBaseUrl ?? GitStorage.overrides.apiBaseUrl ?? API_BASE_URL;\n\t\tconst resolvedApiVersion = options.apiVersion ?? GitStorage.overrides.apiVersion ?? API_VERSION;\n\t\tconst resolvedStorageBaseUrl =\n\t\t\toptions.storageBaseUrl ?? GitStorage.overrides.storageBaseUrl ?? STORAGE_BASE_URL;\n\t\tconst resolvedDefaultTtl = options.defaultTTL ?? GitStorage.overrides.defaultTTL;\n\n\t\tthis.api = getApiInstance(resolvedApiBaseUrl, resolvedApiVersion);\n\n\t\tthis.options = {\n\t\t\tkey: options.key,\n\t\t\tname: options.name,\n\t\t\tapiBaseUrl: resolvedApiBaseUrl,\n\t\t\tapiVersion: resolvedApiVersion,\n\t\t\tstorageBaseUrl: resolvedStorageBaseUrl,\n\t\t\tdefaultTTL: resolvedDefaultTtl,\n\t\t};\n\t}\n\n\tstatic override(options: OverrideableGitStorageOptions): void {\n\t\tthis.overrides = Object.assign({}, this.overrides, options);\n\t}\n\n\t/**\n\t * Create a new repository\n\t * @returns The created repository\n\t */\n\tasync createRepo(options?: CreateRepoOptions): Promise<Repo> {\n\t\tconst repoId = options?.id || crypto.randomUUID();\n\t\tconst ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n\t\tconst jwt = await this.generateJWT(repoId, {\n\t\t\tpermissions: ['repo:write'],\n\t\t\tttl,\n\t\t});\n\n\t\tconst baseRepoOptions = options?.baseRepo\n\t\t\t? {\n\t\t\t\t\tprovider: 'github',\n\t\t\t\t\t...snakecaseKeys(options.baseRepo as unknown as Record<string, unknown>),\n\t\t\t\t}\n\t\t\t: null;\n\n\t\t// Default defaultBranch to 'main' if not provided\n\t\tconst defaultBranch = options?.defaultBranch ?? 'main';\n\n\t\tconst createRepoPath =\n\t\t\tbaseRepoOptions || defaultBranch\n\t\t\t\t? {\n\t\t\t\t\t\tpath: 'repos',\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t...(baseRepoOptions && { base_repo: baseRepoOptions }),\n\t\t\t\t\t\t\tdefault_branch: defaultBranch,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: 'repos';\n\n\t\t// Allow 409 so we can map it to a clearer error message\n\t\tconst resp = await this.api.post(createRepoPath, jwt, { allowedStatus: [409] });\n\t\tif (resp.status === 409) {\n\t\t\tthrow new Error('Repository already exists');\n\t\t}\n\n\t\treturn new RepoImpl(repoId, this.options, this.generateJWT.bind(this));\n\t}\n\n\t/**\n\t * Find a repository by ID\n\t * @param options The search options\n\t * @returns The found repository\n\t */\n\tasync findOne(options: FindOneOptions): Promise<Repo | null> {\n\t\tconst jwt = await this.generateJWT(options.id, {\n\t\t\tpermissions: ['git:read'],\n\t\t\tttl: DEFAULT_TOKEN_TTL_SECONDS,\n\t\t});\n\n\t\t// Allow 404 to indicate \"not found\" without throwing\n\t\tconst resp = await this.api.get('repo', jwt, { allowedStatus: [404] });\n\t\tif (resp.status === 404) {\n\t\t\treturn null;\n\t\t}\n\t\t// On 200, we could validate response, but RepoImpl only needs the repo URL/id\n\t\t// const body = await resp.json(); // not required for now\n\t\treturn new RepoImpl(options.id, this.options, this.generateJWT.bind(this));\n\t}\n\n\t/**\n\t * Get the current configuration\n\t * @returns The client configuration\n\t */\n\tgetConfig(): GitStorageOptions {\n\t\treturn { ...this.options };\n\t}\n\n\t/**\n\t * Generate a JWT token for git storage URL authentication\n\t * @private\n\t */\n\tprivate async generateJWT(repoId: string, options?: GetRemoteURLOptions): Promise<string> {\n\t\t// Default permissions and TTL\n\t\tconst permissions = options?.permissions || ['git:write', 'git:read'];\n\t\tconst ttl = resolveInvocationTtlSeconds(options, this.options.defaultTTL ?? 365 * 24 * 60 * 60);\n\n\t\t// Create the JWT payload\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst payload = {\n\t\t\tiss: this.options.name,\n\t\t\tsub: '@pierre/storage',\n\t\t\trepo: repoId,\n\t\t\tscopes: permissions,\n\t\t\tiat: now,\n\t\t\texp: now + ttl,\n\t\t};\n\n\t\t// Sign the JWT with the key as the secret\n\t\t// Using HS256 for symmetric signing with the key\n\t\tconst key = await importPKCS8(this.options.key, 'ES256');\n\t\t// Sign the JWT with the key as the secret\n\t\tconst jwt = await new SignJWT(payload)\n\t\t\t.setProtectedHeader({ alg: 'ES256', typ: 'JWT' })\n\t\t\t.sign(key);\n\n\t\treturn jwt;\n\t}\n}\n\n// Export a default client factory\nexport function createClient(options: GitStorageOptions): GitStorage {\n\treturn new GitStorage(options);\n}\n\n// Type alias for backward compatibility\nexport type StorageOptions = GitStorageOptions;\n"]}