{"version":3,"sources":["../src/errors.ts","../src/schemas.ts","../src/commit-pack.ts","../src/stream-utils.ts","../package.json","../src/version.ts","../src/commit.ts","../src/diff-commit.ts","../src/fetch.ts","../src/types.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  status: string;\n  message?: string;\n  refUpdate?: Partial<RefUpdate>;\n  reason?: RefUpdateReason;\n}\n\nexport class RefUpdateError extends Error {\n  public readonly status: string;\n  public readonly reason: RefUpdateReason;\n  public readonly refUpdate?: Partial<RefUpdate>;\n\n  constructor(message: string, options: RefUpdateErrorOptions) {\n    super(message);\n    this.name = 'RefUpdateError';\n    this.status = options.status;\n    this.reason = options.reason ?? inferRefUpdateReason(options.status);\n    this.refUpdate = options.refUpdate;\n  }\n}\n\nconst REF_REASON_MAP: Record<string, RefUpdateReason> = {\n  precondition_failed: 'precondition_failed',\n  conflict: 'conflict',\n  not_found: 'not_found',\n  invalid: 'invalid',\n  timeout: 'timeout',\n  unauthorized: 'unauthorized',\n  forbidden: 'forbidden',\n  unavailable: 'unavailable',\n  internal: 'internal',\n  failed: 'failed',\n  ok: 'unknown',\n};\n\nexport function inferRefUpdateReason(status?: string): RefUpdateReason {\n  if (!status) {\n    return 'unknown';\n  }\n\n  const trimmed = status.trim();\n  if (trimmed === '') {\n    return 'unknown';\n  }\n\n  const label = trimmed.toLowerCase();\n  return REF_REASON_MAP[label] ?? 'unknown';\n}\n","import { z } from 'zod';\n\nexport const listFilesResponseSchema = z.object({\n  paths: z.array(z.string()),\n  ref: z.string(),\n});\n\nexport const fileWithMetadataRawSchema = z.object({\n  path: z.string(),\n  mode: z.string(),\n  size: z.number(),\n  last_commit_sha: z.string(),\n});\n\nexport const commitMetadataRawSchema = z.object({\n  author: z.string(),\n  date: z.string(),\n  message: z.string(),\n});\n\nexport const listFilesWithMetadataResponseSchema = z.object({\n  files: z.array(fileWithMetadataRawSchema),\n  commits: z.record(commitMetadataRawSchema),\n  ref: z.string(),\n});\n\nexport const branchInfoSchema = z.object({\n  cursor: z.string(),\n  name: z.string(),\n  head_sha: z.string(),\n  created_at: z.string(),\n});\n\nexport const listBranchesResponseSchema = z.object({\n  branches: z.array(branchInfoSchema),\n  next_cursor: z.string().nullable().optional(),\n  has_more: z.boolean(),\n});\n\nexport const commitInfoRawSchema = z.object({\n  sha: z.string(),\n  message: z.string(),\n  author_name: z.string(),\n  author_email: z.string(),\n  committer_name: z.string(),\n  committer_email: z.string(),\n  date: z.string(),\n});\n\nexport const listCommitsResponseSchema = z.object({\n  commits: z.array(commitInfoRawSchema),\n  next_cursor: z.string().nullable().optional(),\n  has_more: z.boolean(),\n});\n\nexport const repoBaseInfoSchema = z.object({\n  provider: z.string(),\n  owner: z.string(),\n  name: z.string(),\n});\n\nexport const repoInfoSchema = z.object({\n  repo_id: z.string(),\n  url: z.string(),\n  default_branch: z.string(),\n  created_at: z.string(),\n  base_repo: repoBaseInfoSchema.optional().nullable(),\n});\n\nexport const listReposResponseSchema = z.object({\n  repos: z.array(repoInfoSchema),\n  next_cursor: z.string().nullable().optional(),\n  has_more: z.boolean(),\n});\n\nexport const noteReadResponseSchema = z.object({\n  sha: z.string(),\n  note: z.string(),\n  ref_sha: z.string(),\n});\n\nexport const noteResultSchema = z.object({\n  success: z.boolean(),\n  status: z.string(),\n  message: z.string().optional(),\n});\n\nexport const noteWriteResponseSchema = z.object({\n  sha: z.string(),\n  target_ref: z.string(),\n  base_commit: z.string().optional(),\n  new_ref_sha: z.string(),\n  result: noteResultSchema,\n});\n\nexport const diffStatsSchema = z.object({\n  files: z.number(),\n  additions: z.number(),\n  deletions: z.number(),\n  changes: z.number(),\n});\n\nexport const diffFileRawSchema = z.object({\n  path: z.string(),\n  state: z.string(),\n  old_path: z.string().nullable().optional(),\n  raw: z.string(),\n  bytes: z.number(),\n  is_eof: z.boolean(),\n  additions: z.number().optional(),\n  deletions: z.number().optional(),\n});\n\nexport const filteredFileRawSchema = z.object({\n  path: z.string(),\n  state: z.string(),\n  old_path: z.string().nullable().optional(),\n  bytes: z.number(),\n  is_eof: z.boolean(),\n});\n\nexport const branchDiffResponseSchema = z.object({\n  branch: z.string(),\n  base: z.string(),\n  stats: diffStatsSchema,\n  files: z.array(diffFileRawSchema),\n  filtered_files: z.array(filteredFileRawSchema),\n});\n\nexport const commitDiffResponseSchema = z.object({\n  sha: z.string(),\n  stats: diffStatsSchema,\n  files: z.array(diffFileRawSchema),\n  filtered_files: z.array(filteredFileRawSchema),\n});\n\nexport const createBranchResponseSchema = z.object({\n  message: z.string(),\n  target_branch: z.string(),\n  target_is_ephemeral: z.boolean(),\n  commit_sha: z.string().nullable().optional(),\n});\n\nexport const tagInfoSchema = z.object({\n  cursor: z.string(),\n  name: z.string(),\n  sha: z.string(),\n});\n\nexport const listTagsResponseSchema = z.object({\n  tags: z.array(tagInfoSchema),\n  next_cursor: z.string().nullable().optional(),\n  has_more: z.boolean(),\n});\n\nexport const createTagResponseSchema = z.object({\n  name: z.string(),\n  sha: z.string(),\n  message: z.string(),\n});\n\nexport const deleteTagResponseSchema = z.object({\n  name: z.string(),\n  message: z.string(),\n});\n\nexport const refUpdateResultSchema = z.object({\n  branch: z.string(),\n  old_sha: z.string(),\n  new_sha: z.string(),\n  success: z.boolean(),\n  status: z.string(),\n  message: z.string().optional(),\n});\n\nexport const commitPackCommitSchema = z.object({\n  commit_sha: z.string(),\n  tree_sha: z.string(),\n  target_branch: z.string(),\n  pack_bytes: z.number(),\n  blob_count: z.number(),\n});\n\nexport const restoreCommitCommitSchema = commitPackCommitSchema.omit({\n  blob_count: true,\n});\n\nexport const refUpdateResultWithOptionalsSchema = z.object({\n  branch: z.string().optional(),\n  old_sha: z.string().optional(),\n  new_sha: z.string().optional(),\n  success: z.boolean().optional(),\n  status: z.string(),\n  message: z.string().optional(),\n});\n\nexport const commitPackAckSchema = z.object({\n  commit: commitPackCommitSchema,\n  result: refUpdateResultSchema,\n});\n\nexport const restoreCommitAckSchema = z.object({\n  commit: restoreCommitCommitSchema,\n  result: refUpdateResultSchema.extend({ success: z.literal(true) }),\n});\n\nexport const commitPackResponseSchema = z.object({\n  commit: commitPackCommitSchema.partial().optional().nullable(),\n  result: refUpdateResultWithOptionalsSchema,\n});\n\nexport const restoreCommitResponseSchema = z.object({\n  commit: restoreCommitCommitSchema.partial().optional().nullable(),\n  result: refUpdateResultWithOptionalsSchema,\n});\n\nexport const grepLineSchema = z.object({\n  line_number: z.number(),\n  text: z.string(),\n  type: z.string(),\n});\n\nexport const grepFileMatchSchema = z.object({\n  path: z.string(),\n  lines: z.array(grepLineSchema),\n});\n\nexport const grepResponseSchema = z.object({\n  query: z.object({\n    pattern: z.string(),\n    case_sensitive: z.boolean(),\n  }),\n  repo: z.object({\n    ref: z.string(),\n    commit: z.string(),\n  }),\n  matches: z.array(grepFileMatchSchema),\n  next_cursor: z.string().nullable().optional(),\n  has_more: z.boolean(),\n});\n\nexport const errorEnvelopeSchema = z.object({\n  error: z.string(),\n});\n\nexport type ListFilesResponseRaw = z.infer<typeof listFilesResponseSchema>;\nexport type RawFileWithMetadata = z.infer<typeof fileWithMetadataRawSchema>;\nexport type RawCommitMetadata = z.infer<typeof commitMetadataRawSchema>;\nexport type ListFilesWithMetadataResponseRaw = z.infer<\n  typeof listFilesWithMetadataResponseSchema\n>;\nexport type RawBranchInfo = z.infer<typeof branchInfoSchema>;\nexport type ListBranchesResponseRaw = z.infer<\n  typeof listBranchesResponseSchema\n>;\nexport type RawCommitInfo = z.infer<typeof commitInfoRawSchema>;\nexport type ListCommitsResponseRaw = z.infer<typeof listCommitsResponseSchema>;\nexport type RawRepoBaseInfo = z.infer<typeof repoBaseInfoSchema>;\nexport type RawRepoInfo = z.infer<typeof repoInfoSchema>;\nexport type ListReposResponseRaw = z.infer<typeof listReposResponseSchema>;\nexport type NoteReadResponseRaw = z.infer<typeof noteReadResponseSchema>;\nexport type NoteWriteResponseRaw = z.infer<typeof noteWriteResponseSchema>;\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<\n  typeof createBranchResponseSchema\n>;\nexport type RawTagInfo = z.infer<typeof tagInfoSchema>;\nexport type ListTagsResponseRaw = z.infer<typeof listTagsResponseSchema>;\nexport type CreateTagResponseRaw = z.infer<typeof createTagResponseSchema>;\nexport type DeleteTagResponseRaw = z.infer<typeof deleteTagResponseSchema>;\nexport type CommitPackAckRaw = z.infer<typeof commitPackAckSchema>;\nexport type RestoreCommitAckRaw = z.infer<typeof restoreCommitAckSchema>;\nexport type GrepResponseRaw = z.infer<typeof grepResponseSchema>;\n","import { RefUpdateError, inferRefUpdateReason } 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  const refUpdate = toRefUpdate(ack.result);\n  if (!ack.result.success) {\n    throw new RefUpdateError(\n      ack.result.message ?? `Commit failed with status ${ack.result.status}`,\n      {\n        status: ack.result.status,\n        message: ack.result.message,\n        refUpdate,\n      }\n    );\n  }\n  return {\n    commitSha: ack.commit.commit_sha,\n    treeSha: ack.commit.tree_sha,\n    targetBranch: ack.commit.target_branch,\n    packBytes: ack.commit.pack_bytes,\n    blobCount: ack.commit.blob_count,\n    refUpdate,\n  };\n}\n\nexport function toRefUpdate(result: CommitPackAckRaw['result']): RefUpdate {\n  return {\n    branch: result.branch,\n    oldSha: result.old_sha,\n    newSha: result.new_sha,\n  };\n}\n\nexport async function parseCommitPackError(\n  response: Response,\n  fallbackMessage: string\n): Promise<{\n  statusMessage: string;\n  statusLabel: string;\n  refUpdate?: Partial<RefUpdate>;\n}> {\n  const cloned = response.clone();\n  let jsonBody: unknown;\n  try {\n    jsonBody = await cloned.json();\n  } catch {\n    jsonBody = undefined;\n  }\n\n  let textBody: string | undefined;\n  if (jsonBody === undefined) {\n    try {\n      textBody = await response.text();\n    } catch {\n      textBody = undefined;\n    }\n  }\n\n  const defaultStatus = (() => {\n    const inferred = inferRefUpdateReason(String(response.status));\n    return inferred === 'unknown' ? 'failed' : inferred;\n  })();\n  let statusLabel = defaultStatus;\n  let refUpdate: Partial<RefUpdate> | undefined;\n  let message: string | undefined;\n\n  if (jsonBody !== undefined) {\n    const parsedResponse = commitPackResponseSchema.safeParse(jsonBody);\n    if (parsedResponse.success) {\n      const result = parsedResponse.data.result;\n      if (typeof result.status === 'string' && result.status.trim() !== '') {\n        statusLabel = result.status.trim() as typeof statusLabel;\n      }\n      refUpdate = toPartialRefUpdateFields(\n        result.branch,\n        result.old_sha,\n        result.new_sha\n      );\n      if (typeof result.message === 'string' && result.message.trim() !== '') {\n        message = result.message.trim();\n      }\n    }\n\n    if (!message) {\n      const parsedError = errorEnvelopeSchema.safeParse(jsonBody);\n      if (parsedError.success) {\n        const trimmed = parsedError.data.error.trim();\n        if (trimmed) {\n          message = trimmed;\n        }\n      }\n    }\n  }\n\n  if (!message && typeof jsonBody === 'string' && jsonBody.trim() !== '') {\n    message = jsonBody.trim();\n  }\n\n  if (!message && textBody && textBody.trim() !== '') {\n    message = textBody.trim();\n  }\n\n  return {\n    statusMessage: message ?? fallbackMessage,\n    statusLabel,\n    refUpdate,\n  };\n}\n\nfunction toPartialRefUpdateFields(\n  branch?: string | null,\n  oldSha?: string | null,\n  newSha?: string | null\n): Partial<RefUpdate> | undefined {\n  const refUpdate: Partial<RefUpdate> = {};\n\n  if (typeof branch === 'string' && branch.trim() !== '') {\n    refUpdate.branch = branch.trim();\n  }\n  if (typeof oldSha === 'string' && oldSha.trim() !== '') {\n    refUpdate.oldSha = oldSha.trim();\n  }\n  if (typeof newSha === 'string' && newSha.trim() !== '') {\n    refUpdate.newSha = newSha.trim();\n  }\n\n  return 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  from(data: Uint8Array): NodeBuffer;\n  from(data: string, encoding?: string): NodeBuffer;\n  isBuffer(value: unknown): value is NodeBuffer;\n}\n\nconst BufferCtor: NodeBufferConstructor | undefined = (\n  globalThis as { Buffer?: NodeBufferConstructor }\n).Buffer;\n\nexport const MAX_CHUNK_BYTES = 4 * 1024 * 1024;\n\nexport type ChunkSegment = {\n  chunk: Uint8Array;\n  eof: boolean;\n};\n\nexport async function* chunkify(\n  source: AsyncIterable<Uint8Array>\n): AsyncIterable<ChunkSegment> {\n  let pending: Uint8Array | null = null;\n  let produced = false;\n\n  for await (const value of source) {\n    const bytes = value;\n\n    if (pending && pending.byteLength === MAX_CHUNK_BYTES) {\n      yield { chunk: pending, eof: false };\n      produced = true;\n      pending = null;\n    }\n\n    const merged: Uint8Array = pending ? concatChunks(pending, bytes) : bytes;\n    pending = null;\n\n    let cursor: Uint8Array = merged;\n    while (cursor.byteLength > MAX_CHUNK_BYTES) {\n      const chunk: Uint8Array = cursor.slice(0, MAX_CHUNK_BYTES);\n      cursor = cursor.slice(MAX_CHUNK_BYTES);\n      yield { chunk, eof: false };\n      produced = true;\n    }\n\n    pending = cursor;\n  }\n\n  if (pending) {\n    yield { chunk: pending, eof: true };\n    produced = true;\n  }\n\n  if (!produced) {\n    yield { chunk: new Uint8Array(0), eof: true };\n  }\n}\n\nexport async function* toAsyncIterable(\n  source:\n    | string\n    | Uint8Array\n    | ArrayBuffer\n    | BlobLike\n    | FileLike\n    | ReadableStreamLike<Uint8Array | ArrayBuffer | ArrayBufferView | string>\n    | AsyncIterable<Uint8Array | ArrayBuffer | ArrayBufferView | string>\n    | Iterable<Uint8Array | ArrayBuffer | ArrayBufferView | string>\n): AsyncIterable<Uint8Array> {\n  if (typeof source === 'string') {\n    yield new TextEncoder().encode(source);\n    return;\n  }\n  if (source instanceof Uint8Array) {\n    yield source;\n    return;\n  }\n  if (source instanceof ArrayBuffer) {\n    yield new Uint8Array(source);\n    return;\n  }\n  if (ArrayBuffer.isView(source)) {\n    yield new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n    return;\n  }\n  if (isBlobLike(source)) {\n    const stream = source.stream();\n    if (isAsyncIterable(stream)) {\n      for await (const chunk of stream as AsyncIterable<unknown>) {\n        yield ensureUint8Array(chunk);\n      }\n      return;\n    }\n    if (isReadableStreamLike(stream)) {\n      yield* readReadableStream(stream);\n      return;\n    }\n  }\n  if (isReadableStreamLike(source)) {\n    yield* readReadableStream(source);\n    return;\n  }\n  if (isAsyncIterable(source)) {\n    for await (const chunk of source as AsyncIterable<unknown>) {\n      yield ensureUint8Array(chunk);\n    }\n    return;\n  }\n  if (isIterable(source)) {\n    for (const chunk of source as Iterable<unknown>) {\n      yield ensureUint8Array(chunk);\n    }\n    return;\n  }\n  throw new Error('Unsupported content source; expected binary data');\n}\n\nexport function base64Encode(bytes: Uint8Array): string {\n  if (BufferCtor) {\n    return BufferCtor.from(bytes).toString('base64');\n  }\n  let binary = '';\n  for (let i = 0; i < bytes.byteLength; i++) {\n    binary += String.fromCharCode(bytes[i]);\n  }\n  const btoaFn = (globalThis as { btoa?: (data: string) => string }).btoa;\n  if (typeof btoaFn === 'function') {\n    return btoaFn(binary);\n  }\n  throw new Error('Base64 encoding is not supported in this environment');\n}\n\nexport function requiresDuplex(body: unknown): boolean {\n  if (!body || typeof body !== 'object') {\n    return false;\n  }\n\n  if (\n    typeof (body as { [Symbol.asyncIterator]?: unknown })[\n      Symbol.asyncIterator\n    ] === 'function'\n  ) {\n    return true;\n  }\n\n  const readableStreamCtor = (\n    globalThis as {\n      ReadableStream?: new (...args: unknown[]) => unknown;\n    }\n  ).ReadableStream;\n  if (readableStreamCtor && body instanceof readableStreamCtor) {\n    return true;\n  }\n\n  return false;\n}\n\nexport function toRequestBody(iterable: AsyncIterable<Uint8Array>): unknown {\n  const readableStreamCtor = (\n    globalThis as {\n      ReadableStream?: new (underlyingSource: unknown) => unknown;\n    }\n  ).ReadableStream;\n  if (typeof readableStreamCtor === 'function') {\n    const iterator = iterable[Symbol.asyncIterator]();\n    return new readableStreamCtor({\n      async pull(controller: {\n        enqueue(chunk: Uint8Array): void;\n        close(): void;\n      }) {\n        const { value, done } = await iterator.next();\n        if (done) {\n          controller.close();\n          return;\n        }\n        controller.enqueue(value!);\n      },\n      async cancel(reason: unknown) {\n        if (typeof iterator.return === 'function') {\n          await iterator.return(reason);\n        }\n      },\n    });\n  }\n  return iterable;\n}\n\nasync function* readReadableStream(\n  stream: ReadableStreamLike<unknown>\n): AsyncIterable<Uint8Array> {\n  const reader = stream.getReader();\n  try {\n    while (true) {\n      const { value, done } = await reader.read();\n      if (done) {\n        break;\n      }\n      if (value !== undefined) {\n        yield ensureUint8Array(value);\n      }\n    }\n  } finally {\n    reader.releaseLock?.();\n  }\n}\n\nfunction ensureUint8Array(value: unknown): Uint8Array {\n  if (value instanceof Uint8Array) {\n    return value;\n  }\n  if (value instanceof ArrayBuffer) {\n    return new Uint8Array(value);\n  }\n  if (ArrayBuffer.isView(value)) {\n    return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n  }\n  if (typeof value === 'string') {\n    return new TextEncoder().encode(value);\n  }\n  if (BufferCtor && BufferCtor.isBuffer(value)) {\n    return value as Uint8Array;\n  }\n  throw new Error('Unsupported chunk type; expected binary data');\n}\n\nfunction isBlobLike(value: unknown): value is BlobLike {\n  return (\n    typeof value === 'object' &&\n    value !== null &&\n    typeof (value as BlobLike).stream === 'function'\n  );\n}\n\nfunction isReadableStreamLike<T>(\n  value: unknown\n): value is ReadableStreamLike<T> {\n  return (\n    typeof value === 'object' &&\n    value !== null &&\n    typeof (value as ReadableStreamLike<T>).getReader === 'function'\n  );\n}\n\nfunction isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n  return (\n    typeof value === 'object' &&\n    value !== null &&\n    Symbol.asyncIterator in (value as Record<string, unknown>)\n  );\n}\n\nfunction isIterable(value: unknown): value is Iterable<unknown> {\n  return (\n    typeof value === 'object' &&\n    value !== null &&\n    Symbol.iterator in (value as Record<string, unknown>)\n  );\n}\n\nfunction concatChunks(a: Uint8Array, b: Uint8Array): Uint8Array {\n  if (a.byteLength === 0) {\n    return b;\n  }\n  if (b.byteLength === 0) {\n    return a;\n  }\n  const merged = new Uint8Array(a.byteLength + b.byteLength);\n  merged.set(a, 0);\n  merged.set(b, a.byteLength);\n  return merged;\n}\n","{\n  \"name\": \"@pierre/storage\",\n  \"version\": \"1.4.1\",\n  \"description\": \"Pierre Git Storage SDK\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/pierrecomputer/sdk\"\n  },\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"main\": \"./dist/index.cjs\",\n  \"module\": \"./dist/index.js\",\n  \"types\": \"./dist/index.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.ts\",\n      \"import\": \"./dist/index.js\",\n      \"require\": \"./dist/index.cjs\",\n      \"default\": \"./dist/index.js\"\n    }\n  },\n  \"files\": [\n    \"dist\",\n    \"src\"\n  ],\n  \"scripts\": {\n    \"build\": \"tsup\",\n    \"dev\": \"tsup --watch\",\n    \"prepublishOnly\": \"pnpm build\"\n  },\n  \"dependencies\": {\n    \"jose\": \"^5.10.0\",\n    \"snakecase-keys\": \"^9.0.2\",\n    \"zod\": \"^3.23.8\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"^22.0.0\",\n    \"tsup\": \"8.5.0\",\n    \"typescript\": \"5.8.3\",\n    \"vitest\": \"3.2.4\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  }\n}\n","import packageJson from '../package.json';\n\nexport const PACKAGE_NAME = 'code-storage-sdk';\nexport const PACKAGE_VERSION = packageJson.version;\n\nexport function getUserAgent(): string {\n  return `${PACKAGE_NAME}/${PACKAGE_VERSION}`;\n}\n","import { buildCommitResult, parseCommitPackError } from './commit-pack';\nimport { RefUpdateError } from './errors';\nimport type { CommitPackAckRaw } from './schemas';\nimport { commitPackAckSchema } from './schemas';\nimport {\n  type ChunkSegment,\n  base64Encode,\n  chunkify,\n  requiresDuplex,\n  toAsyncIterable,\n  toRequestBody,\n} from './stream-utils';\nimport type {\n  CommitBuilder,\n  CommitFileOptions,\n  CommitFileSource,\n  CommitResult,\n  CommitSignature,\n  CommitTextFileOptions,\n  CreateCommitOptions,\n  LegacyCreateCommitOptions,\n} from './types';\nimport { getUserAgent } from './version';\n\nconst DEFAULT_TTL_SECONDS = 60 * 60;\nconst HEADS_REF_PREFIX = 'refs/heads/';\n\ntype NodeBuffer = Uint8Array & { toString(encoding?: string): string };\ninterface NodeBufferConstructor {\n  from(data: Uint8Array): NodeBuffer;\n  from(data: string, encoding?: string): NodeBuffer;\n  isBuffer(value: unknown): value is NodeBuffer;\n}\n\nconst BufferCtor: NodeBufferConstructor | undefined = (\n  globalThis as { Buffer?: NodeBufferConstructor }\n).Buffer;\n\ninterface CommitMetadataPayload {\n  target_branch: string;\n  expected_head_sha?: string;\n  base_branch?: string;\n  commit_message: string;\n  ephemeral?: boolean;\n  ephemeral_base?: boolean;\n  author: {\n    name: string;\n    email: string;\n  };\n  committer?: {\n    name: string;\n    email: string;\n  };\n  files: Array<{\n    path: string;\n    content_id: string;\n    operation?: 'upsert' | 'delete';\n    mode?: string;\n  }>;\n}\n\ninterface CommitTransportRequest {\n  authorization: string;\n  signal?: AbortSignal;\n  metadata: CommitMetadataPayload;\n  blobs: Array<{ contentId: string; chunks: AsyncIterable<ChunkSegment> }>;\n}\n\ninterface CommitTransport {\n  send(request: CommitTransportRequest): Promise<CommitPackAckRaw>;\n}\n\ntype NormalizedCommitOptions = {\n  targetBranch: string;\n  commitMessage: string;\n  expectedHeadSha?: string;\n  baseBranch?: string;\n  ephemeral?: boolean;\n  ephemeralBase?: boolean;\n  author: CommitSignature;\n  committer?: CommitSignature;\n  signal?: AbortSignal;\n  ttl?: number;\n};\n\ninterface CommitBuilderDeps {\n  options: CreateCommitOptions;\n  getAuthToken: () => Promise<string>;\n  transport: CommitTransport;\n}\n\ntype FileOperationState = {\n  path: string;\n  contentId: string;\n  mode?: string;\n  operation: 'upsert' | 'delete';\n  streamFactory?: () => AsyncIterable<Uint8Array>;\n};\n\nexport class CommitBuilderImpl implements CommitBuilder {\n  private readonly options: NormalizedCommitOptions;\n  private readonly getAuthToken: () => Promise<string>;\n  private readonly transport: CommitTransport;\n  private readonly operations: FileOperationState[] = [];\n  private sent = false;\n\n  constructor(deps: CommitBuilderDeps) {\n    this.options = normalizeCommitOptions(deps.options);\n    this.getAuthToken = deps.getAuthToken;\n    this.transport = deps.transport;\n\n    const trimmedMessage = this.options.commitMessage?.trim();\n    const trimmedAuthorName = this.options.author?.name?.trim();\n    const trimmedAuthorEmail = this.options.author?.email?.trim();\n\n    if (!trimmedMessage) {\n      throw new Error('createCommit commitMessage is required');\n    }\n    if (!trimmedAuthorName || !trimmedAuthorEmail) {\n      throw new Error('createCommit author name and email are required');\n    }\n    this.options.commitMessage = trimmedMessage;\n    this.options.author = {\n      name: trimmedAuthorName,\n      email: trimmedAuthorEmail,\n    };\n    if (typeof this.options.expectedHeadSha === 'string') {\n      this.options.expectedHeadSha = this.options.expectedHeadSha.trim();\n    }\n    if (typeof this.options.baseBranch === 'string') {\n      const trimmedBase = this.options.baseBranch.trim();\n      if (trimmedBase === '') {\n        delete this.options.baseBranch;\n      } else {\n        if (trimmedBase.startsWith('refs/')) {\n          throw new Error(\n            'createCommit baseBranch must not include refs/ prefix'\n          );\n        }\n        this.options.baseBranch = trimmedBase;\n      }\n    }\n\n    if (this.options.ephemeralBase && !this.options.baseBranch) {\n      throw new Error('createCommit ephemeralBase requires baseBranch');\n    }\n  }\n\n  addFile(\n    path: string,\n    source: CommitFileSource,\n    options?: CommitFileOptions\n  ): CommitBuilder {\n    this.ensureNotSent();\n    const normalizedPath = this.normalizePath(path);\n    const contentId = randomContentId();\n    const mode = options?.mode ?? '100644';\n\n    this.operations.push({\n      path: normalizedPath,\n      contentId,\n      mode,\n      operation: 'upsert',\n      streamFactory: () => toAsyncIterable(source),\n    });\n\n    return this;\n  }\n\n  addFileFromString(\n    path: string,\n    contents: string,\n    options?: CommitTextFileOptions\n  ): CommitBuilder {\n    const encoding = options?.encoding ?? 'utf8';\n    const normalizedEncoding = encoding === 'utf-8' ? 'utf8' : encoding;\n    let data: Uint8Array;\n    if (normalizedEncoding === 'utf8') {\n      data = new TextEncoder().encode(contents);\n    } else if (BufferCtor) {\n      data = BufferCtor.from(\n        contents,\n        normalizedEncoding as Parameters<NodeBufferConstructor['from']>[1]\n      );\n    } else {\n      throw new Error(\n        `Unsupported encoding \"${encoding}\" in this environment. Non-UTF encodings require Node.js Buffer support.`\n      );\n    }\n    return this.addFile(path, data, options);\n  }\n\n  deletePath(path: string): CommitBuilder {\n    this.ensureNotSent();\n    const normalizedPath = this.normalizePath(path);\n    this.operations.push({\n      path: normalizedPath,\n      contentId: randomContentId(),\n      operation: 'delete',\n    });\n    return this;\n  }\n\n  async send(): Promise<CommitResult> {\n    this.ensureNotSent();\n    this.sent = true;\n\n    const metadata = this.buildMetadata();\n    const blobEntries = this.operations\n      .filter((op) => op.operation === 'upsert' && op.streamFactory)\n      .map((op) => ({\n        contentId: op.contentId,\n        chunks: chunkify(op.streamFactory!()),\n      }));\n\n    const authorization = await this.getAuthToken();\n    const ack = await this.transport.send({\n      authorization,\n      signal: this.options.signal,\n      metadata,\n      blobs: blobEntries,\n    });\n    return buildCommitResult(ack);\n  }\n\n  private buildMetadata(): CommitMetadataPayload {\n    const files = this.operations.map((op) => {\n      const entry: CommitMetadataPayload['files'][number] = {\n        path: op.path,\n        content_id: op.contentId,\n        operation: op.operation,\n      };\n      if (op.mode) {\n        entry.mode = op.mode;\n      }\n      return entry;\n    });\n\n    const metadata: CommitMetadataPayload = {\n      target_branch: this.options.targetBranch,\n      commit_message: this.options.commitMessage,\n      author: {\n        name: this.options.author.name,\n        email: this.options.author.email,\n      },\n      files,\n    };\n\n    if (this.options.expectedHeadSha) {\n      metadata.expected_head_sha = this.options.expectedHeadSha;\n    }\n    if (this.options.baseBranch) {\n      metadata.base_branch = this.options.baseBranch;\n    }\n    if (this.options.committer) {\n      metadata.committer = {\n        name: this.options.committer.name,\n        email: this.options.committer.email,\n      };\n    }\n\n    if (this.options.ephemeral) {\n      metadata.ephemeral = true;\n    }\n    if (this.options.ephemeralBase) {\n      metadata.ephemeral_base = true;\n    }\n\n    return metadata;\n  }\n\n  private ensureNotSent(): void {\n    if (this.sent) {\n      throw new Error('createCommit builder cannot be reused after send()');\n    }\n  }\n\n  private normalizePath(path: string): string {\n    if (!path || typeof path !== 'string' || path.trim() === '') {\n      throw new Error('File path must be a non-empty string');\n    }\n    return path.replace(/^\\//, '');\n  }\n}\n\nexport class FetchCommitTransport implements CommitTransport {\n  private readonly url: string;\n\n  constructor(config: { baseUrl: string; version: number }) {\n    const trimmedBase = config.baseUrl.replace(/\\/+$/, '');\n    this.url = `${trimmedBase}/api/v${config.version}/repos/commit-pack`;\n  }\n\n  async send(request: CommitTransportRequest): Promise<CommitPackAckRaw> {\n    const bodyIterable = buildMessageIterable(request.metadata, request.blobs);\n    const body = toRequestBody(bodyIterable);\n\n    const init: RequestInit = {\n      method: 'POST',\n      headers: {\n        Authorization: `Bearer ${request.authorization}`,\n        'Content-Type': 'application/x-ndjson',\n        Accept: 'application/json',\n        'Code-Storage-Agent': getUserAgent(),\n      },\n      body: body as any,\n      signal: request.signal,\n    };\n\n    if (requiresDuplex(body)) {\n      (init as RequestInit & { duplex: 'half' }).duplex = 'half';\n    }\n\n    const response = await fetch(this.url, init);\n\n    if (!response.ok) {\n      const fallbackMessage = `createCommit request failed (${response.status} ${response.statusText})`;\n      const { statusMessage, statusLabel, refUpdate } =\n        await parseCommitPackError(response, fallbackMessage);\n      throw new RefUpdateError(statusMessage, {\n        status: statusLabel,\n        message: statusMessage,\n        refUpdate,\n      });\n    }\n\n    const ack = commitPackAckSchema.parse(await response.json());\n    return ack;\n  }\n}\n\nfunction buildMessageIterable(\n  metadata: CommitMetadataPayload,\n  blobs: Array<{ contentId: string; chunks: AsyncIterable<ChunkSegment> }>\n): AsyncIterable<Uint8Array> {\n  const encoder = new TextEncoder();\n  return {\n    async *[Symbol.asyncIterator]() {\n      yield encoder.encode(`${JSON.stringify({ metadata })}\\n`);\n      for (const blob of blobs) {\n        for await (const segment of blob.chunks) {\n          const payload = {\n            blob_chunk: {\n              content_id: blob.contentId,\n              data: base64Encode(segment.chunk),\n              eof: segment.eof,\n            },\n          };\n          yield encoder.encode(`${JSON.stringify(payload)}\\n`);\n        }\n      }\n    },\n  };\n}\n\nfunction randomContentId(): string {\n  const cryptoObj = globalThis.crypto;\n  if (cryptoObj && typeof cryptoObj.randomUUID === 'function') {\n    return cryptoObj.randomUUID();\n  }\n  const random = Math.random().toString(36).slice(2);\n  return `cid-${Date.now().toString(36)}-${random}`;\n}\n\nfunction normalizeCommitOptions(\n  options: CreateCommitOptions\n): NormalizedCommitOptions {\n  return {\n    targetBranch: resolveTargetBranch(options),\n    commitMessage: options.commitMessage,\n    expectedHeadSha: options.expectedHeadSha,\n    baseBranch: options.baseBranch,\n    ephemeral: options.ephemeral === true,\n    ephemeralBase: options.ephemeralBase === true,\n    author: options.author,\n    committer: options.committer,\n    signal: options.signal,\n    ttl: options.ttl,\n  };\n}\n\nfunction resolveTargetBranch(options: CreateCommitOptions): string {\n  const branchCandidate =\n    typeof options.targetBranch === 'string' ? options.targetBranch.trim() : '';\n  if (branchCandidate) {\n    return normalizeBranchName(branchCandidate);\n  }\n  if (hasLegacyTargetRef(options)) {\n    return normalizeLegacyTargetRef(options.targetRef);\n  }\n  throw new Error('createCommit targetBranch is required');\n}\n\nfunction normalizeBranchName(value: string): string {\n  const trimmed = value.trim();\n  if (!trimmed) {\n    throw new Error('createCommit targetBranch is required');\n  }\n  if (trimmed.startsWith(HEADS_REF_PREFIX)) {\n    const branch = trimmed.slice(HEADS_REF_PREFIX.length).trim();\n    if (!branch) {\n      throw new Error('createCommit targetBranch is required');\n    }\n    return branch;\n  }\n  if (trimmed.startsWith('refs/')) {\n    throw new Error('createCommit targetBranch must not include refs/ prefix');\n  }\n  return trimmed;\n}\n\nfunction normalizeLegacyTargetRef(ref: string): string {\n  const trimmed = ref.trim();\n  if (!trimmed) {\n    throw new Error('createCommit targetRef is required');\n  }\n  if (!trimmed.startsWith(HEADS_REF_PREFIX)) {\n    throw new Error('createCommit targetRef must start with refs/heads/');\n  }\n  const branch = trimmed.slice(HEADS_REF_PREFIX.length).trim();\n  if (!branch) {\n    throw new Error('createCommit targetRef must include a branch name');\n  }\n  return branch;\n}\n\nfunction hasLegacyTargetRef(\n  options: CreateCommitOptions\n): options is LegacyCreateCommitOptions {\n  return typeof (options as LegacyCreateCommitOptions).targetRef === 'string';\n}\n\nexport function createCommitBuilder(deps: CommitBuilderDeps): CommitBuilder {\n  return new CommitBuilderImpl(deps);\n}\n\nexport function resolveCommitTtlSeconds(options?: { ttl?: number }): number {\n  if (typeof options?.ttl === 'number' && options.ttl > 0) {\n    return options.ttl;\n  }\n  return 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  type ChunkSegment,\n  base64Encode,\n  chunkify,\n  requiresDuplex,\n  toAsyncIterable,\n  toRequestBody,\n} from './stream-utils';\nimport type {\n  CommitResult,\n  CommitSignature,\n  CreateCommitFromDiffOptions,\n  DiffSource,\n} from './types';\nimport { getUserAgent } from './version';\n\ninterface DiffCommitMetadataPayload {\n  target_branch: string;\n  expected_head_sha?: string;\n  base_branch?: string;\n  commit_message: string;\n  ephemeral?: boolean;\n  ephemeral_base?: boolean;\n  author: {\n    name: string;\n    email: string;\n  };\n  committer?: {\n    name: string;\n    email: string;\n  };\n}\n\ninterface DiffCommitTransportRequest {\n  authorization: string;\n  signal?: AbortSignal;\n  metadata: DiffCommitMetadataPayload;\n  diffChunks: AsyncIterable<ChunkSegment>;\n}\n\ninterface DiffCommitTransport {\n  send(request: DiffCommitTransportRequest): Promise<CommitPackAckRaw>;\n}\n\ntype NormalizedDiffCommitOptions = {\n  targetBranch: string;\n  commitMessage: string;\n  expectedHeadSha?: string;\n  baseBranch?: string;\n  ephemeral?: boolean;\n  ephemeralBase?: boolean;\n  author: CommitSignature;\n  committer?: CommitSignature;\n  signal?: AbortSignal;\n  ttl?: number;\n  initialDiff: DiffSource;\n};\n\ninterface CommitFromDiffSendDeps {\n  options: CreateCommitFromDiffOptions;\n  getAuthToken: () => Promise<string>;\n  transport: DiffCommitTransport;\n}\n\nclass DiffCommitExecutor {\n  private readonly options: NormalizedDiffCommitOptions;\n  private readonly getAuthToken: () => Promise<string>;\n  private readonly transport: DiffCommitTransport;\n  private readonly diffFactory: () => AsyncIterable<Uint8Array>;\n  private sent = false;\n\n  constructor(deps: CommitFromDiffSendDeps) {\n    this.options = normalizeDiffCommitOptions(deps.options);\n    this.getAuthToken = deps.getAuthToken;\n    this.transport = deps.transport;\n\n    const trimmedMessage = this.options.commitMessage?.trim();\n    const trimmedAuthorName = this.options.author?.name?.trim();\n    const trimmedAuthorEmail = this.options.author?.email?.trim();\n\n    if (!trimmedMessage) {\n      throw new Error('createCommitFromDiff commitMessage is required');\n    }\n    if (!trimmedAuthorName || !trimmedAuthorEmail) {\n      throw new Error(\n        'createCommitFromDiff author name and email are required'\n      );\n    }\n\n    this.options.commitMessage = trimmedMessage;\n    this.options.author = {\n      name: trimmedAuthorName,\n      email: trimmedAuthorEmail,\n    };\n\n    if (typeof this.options.expectedHeadSha === 'string') {\n      this.options.expectedHeadSha = this.options.expectedHeadSha.trim();\n    }\n    if (typeof this.options.baseBranch === 'string') {\n      const trimmedBase = this.options.baseBranch.trim();\n      if (trimmedBase === '') {\n        delete this.options.baseBranch;\n      } else {\n        if (trimmedBase.startsWith('refs/')) {\n          throw new Error(\n            'createCommitFromDiff baseBranch must not include refs/ prefix'\n          );\n        }\n        this.options.baseBranch = trimmedBase;\n      }\n    }\n    if (this.options.ephemeralBase && !this.options.baseBranch) {\n      throw new Error('createCommitFromDiff ephemeralBase requires baseBranch');\n    }\n\n    this.diffFactory = () => toAsyncIterable(this.options.initialDiff);\n  }\n\n  async send(): Promise<CommitResult> {\n    this.ensureNotSent();\n    this.sent = true;\n\n    const metadata = this.buildMetadata();\n    const diffIterable = chunkify(this.diffFactory());\n\n    const authorization = await this.getAuthToken();\n    const ack = await this.transport.send({\n      authorization,\n      signal: this.options.signal,\n      metadata,\n      diffChunks: diffIterable,\n    });\n\n    return buildCommitResult(ack);\n  }\n\n  private buildMetadata(): DiffCommitMetadataPayload {\n    const metadata: DiffCommitMetadataPayload = {\n      target_branch: this.options.targetBranch,\n      commit_message: this.options.commitMessage,\n      author: {\n        name: this.options.author.name,\n        email: this.options.author.email,\n      },\n    };\n\n    if (this.options.expectedHeadSha) {\n      metadata.expected_head_sha = this.options.expectedHeadSha;\n    }\n    if (this.options.baseBranch) {\n      metadata.base_branch = this.options.baseBranch;\n    }\n    if (this.options.committer) {\n      metadata.committer = {\n        name: this.options.committer.name,\n        email: this.options.committer.email,\n      };\n    }\n    if (this.options.ephemeral) {\n      metadata.ephemeral = true;\n    }\n    if (this.options.ephemeralBase) {\n      metadata.ephemeral_base = true;\n    }\n\n    return metadata;\n  }\n\n  private ensureNotSent(): void {\n    if (this.sent) {\n      throw new Error('createCommitFromDiff cannot be reused after send()');\n    }\n  }\n}\n\nexport class FetchDiffCommitTransport implements DiffCommitTransport {\n  private readonly url: string;\n\n  constructor(config: { baseUrl: string; version: number }) {\n    const trimmedBase = config.baseUrl.replace(/\\/+$/, '');\n    this.url = `${trimmedBase}/api/v${config.version}/repos/diff-commit`;\n  }\n\n  async send(request: DiffCommitTransportRequest): Promise<CommitPackAckRaw> {\n    const bodyIterable = buildMessageIterable(\n      request.metadata,\n      request.diffChunks\n    );\n    const body = toRequestBody(bodyIterable);\n\n    const init: RequestInit = {\n      method: 'POST',\n      headers: {\n        Authorization: `Bearer ${request.authorization}`,\n        'Content-Type': 'application/x-ndjson',\n        Accept: 'application/json',\n        'Code-Storage-Agent': getUserAgent(),\n      },\n      body: body as any,\n      signal: request.signal,\n    };\n\n    if (requiresDuplex(body)) {\n      (init as RequestInit & { duplex: 'half' }).duplex = 'half';\n    }\n\n    const response = await fetch(this.url, init);\n    if (!response.ok) {\n      const fallbackMessage = `createCommitFromDiff request failed (${response.status} ${response.statusText})`;\n      const { statusMessage, statusLabel, refUpdate } =\n        await parseCommitPackError(response, fallbackMessage);\n      throw new RefUpdateError(statusMessage, {\n        status: statusLabel,\n        message: statusMessage,\n        refUpdate,\n      });\n    }\n\n    return commitPackAckSchema.parse(await response.json());\n  }\n}\n\nfunction buildMessageIterable(\n  metadata: DiffCommitMetadataPayload,\n  diffChunks: AsyncIterable<ChunkSegment>\n): AsyncIterable<Uint8Array> {\n  const encoder = new TextEncoder();\n  return {\n    async *[Symbol.asyncIterator]() {\n      yield encoder.encode(`${JSON.stringify({ metadata })}\\n`);\n      for await (const segment of diffChunks) {\n        const payload = {\n          diff_chunk: {\n            data: base64Encode(segment.chunk),\n            eof: segment.eof,\n          },\n        };\n        yield encoder.encode(`${JSON.stringify(payload)}\\n`);\n      }\n    },\n  };\n}\n\nfunction normalizeDiffCommitOptions(\n  options: CreateCommitFromDiffOptions\n): NormalizedDiffCommitOptions {\n  if (!options || typeof options !== 'object') {\n    throw new Error('createCommitFromDiff options are required');\n  }\n\n  if (options.diff === undefined || options.diff === null) {\n    throw new Error('createCommitFromDiff diff is required');\n  }\n\n  const targetBranch = normalizeBranchName(options.targetBranch);\n\n  let committer: CommitSignature | undefined;\n  if (options.committer) {\n    const name = options.committer.name?.trim();\n    const email = options.committer.email?.trim();\n    if (!name || !email) {\n      throw new Error(\n        'createCommitFromDiff committer name and email are required when provided'\n      );\n    }\n    committer = { name, email };\n  }\n\n  return {\n    targetBranch,\n    commitMessage: options.commitMessage,\n    expectedHeadSha: options.expectedHeadSha,\n    baseBranch: options.baseBranch,\n    ephemeral: options.ephemeral === true,\n    ephemeralBase: options.ephemeralBase === true,\n    author: options.author,\n    committer,\n    signal: options.signal,\n    ttl: options.ttl,\n    initialDiff: options.diff,\n  };\n}\n\nfunction normalizeBranchName(value: string | undefined): string {\n  const trimmed = value?.trim();\n  if (!trimmed) {\n    throw new Error('createCommitFromDiff targetBranch is required');\n  }\n  if (trimmed.startsWith('refs/heads/')) {\n    const branch = trimmed.slice('refs/heads/'.length).trim();\n    if (!branch) {\n      throw new Error(\n        'createCommitFromDiff targetBranch must include a branch name'\n      );\n    }\n    return branch;\n  }\n  if (trimmed.startsWith('refs/')) {\n    throw new Error(\n      'createCommitFromDiff targetBranch must not include refs/ prefix'\n    );\n  }\n  return trimmed;\n}\n\nexport async function sendCommitFromDiff(\n  deps: CommitFromDiffSendDeps\n): Promise<CommitResult> {\n  const executor = new DiffCommitExecutor(deps);\n  return executor.send();\n}\n","import { errorEnvelopeSchema } from './schemas';\nimport type { ValidAPIVersion, ValidMethod, ValidPath } from './types';\nimport { getUserAgent } from './version';\n\ninterface RequestOptions {\n  allowedStatus?: number[];\n}\n\nexport class ApiError extends Error {\n  public readonly status: number;\n  public readonly statusText: string;\n  public readonly method: ValidMethod;\n  public readonly url: string;\n  public readonly body?: unknown;\n\n  constructor(params: {\n    message: string;\n    status: number;\n    statusText: string;\n    method: ValidMethod;\n    url: string;\n    body?: unknown;\n  }) {\n    super(params.message);\n    this.name = 'ApiError';\n    this.status = params.status;\n    this.statusText = params.statusText;\n    this.method = params.method;\n    this.url = params.url;\n    this.body = params.body;\n  }\n}\n\nexport class ApiFetcher {\n  constructor(\n    private readonly API_BASE_URL: string,\n    private readonly version: ValidAPIVersion\n  ) {}\n\n  private getBaseUrl() {\n    return `${this.API_BASE_URL}/api/v${this.version}`;\n  }\n\n  private getRequestUrl(path: ValidPath) {\n    if (typeof path === 'string') {\n      return `${this.getBaseUrl()}/${path}`;\n    } else if (path.params) {\n      const searchParams = new URLSearchParams();\n      for (const [key, value] of Object.entries(path.params)) {\n        if (Array.isArray(value)) {\n          for (const v of value) {\n            searchParams.append(key, v);\n          }\n        } else {\n          searchParams.append(key, value);\n        }\n      }\n      const paramStr = searchParams.toString();\n      return `${this.getBaseUrl()}/${path.path}${paramStr ? `?${paramStr}` : ''}`;\n    } else {\n      return `${this.getBaseUrl()}/${path.path}`;\n    }\n  }\n\n  private async fetch(\n    path: ValidPath,\n    method: ValidMethod,\n    jwt: string,\n    options?: RequestOptions\n  ) {\n    const requestUrl = this.getRequestUrl(path);\n\n    const requestOptions: RequestInit = {\n      method,\n      headers: {\n        Authorization: `Bearer ${jwt}`,\n        'Content-Type': 'application/json',\n        'Code-Storage-Agent': getUserAgent(),\n      },\n    };\n\n    if (method !== 'GET' && typeof path !== 'string' && path.body) {\n      requestOptions.body = JSON.stringify(path.body);\n    }\n\n    const response = await fetch(requestUrl, requestOptions);\n\n    if (!response.ok) {\n      const allowed = options?.allowedStatus ?? [];\n      if (allowed.includes(response.status)) {\n        return response;\n      }\n\n      let errorBody: unknown;\n      let message: string | undefined;\n      const contentType = response.headers.get('content-type') ?? '';\n\n      try {\n        if (contentType.includes('application/json')) {\n          errorBody = await response.json();\n        } else {\n          const text = await response.text();\n          errorBody = text;\n        }\n      } catch {\n        // Fallback to plain text if JSON parse failed after reading body\n        try {\n          errorBody = await response.text();\n        } catch {\n          errorBody = undefined;\n        }\n      }\n\n      if (typeof errorBody === 'string') {\n        const trimmed = errorBody.trim();\n        if (trimmed) {\n          message = trimmed;\n        }\n      } else if (errorBody && typeof errorBody === 'object') {\n        const parsedError = errorEnvelopeSchema.safeParse(errorBody);\n        if (parsedError.success) {\n          const trimmed = parsedError.data.error.trim();\n          if (trimmed) {\n            message = trimmed;\n          }\n        }\n      }\n\n      throw new ApiError({\n        message:\n          message ??\n          `Request ${method} ${requestUrl} failed with status ${response.status} ${response.statusText}`,\n        status: response.status,\n        statusText: response.statusText,\n        method,\n        url: requestUrl,\n        body: errorBody,\n      });\n    }\n    return response;\n  }\n\n  async get(path: ValidPath, jwt: string, options?: RequestOptions) {\n    return this.fetch(path, 'GET', jwt, options);\n  }\n\n  async post(path: ValidPath, jwt: string, options?: RequestOptions) {\n    return this.fetch(path, 'POST', jwt, options);\n  }\n\n  async put(path: ValidPath, jwt: string, options?: RequestOptions) {\n    return this.fetch(path, 'PUT', jwt, options);\n  }\n\n  async delete(path: ValidPath, jwt: string, options?: RequestOptions) {\n    return this.fetch(path, 'DELETE', jwt, options);\n  }\n}\n","/**\n * Type definitions for Pierre Git Storage SDK\n */\nimport type {\n  CreateBranchResponseRaw,\n  CreateTagResponseRaw,\n  DeleteTagResponseRaw,\n  GetBranchDiffResponseRaw,\n  GetCommitDiffResponseRaw,\n  ListBranchesResponseRaw,\n  ListCommitsResponseRaw,\n  ListFilesResponseRaw,\n  ListFilesWithMetadataResponseRaw,\n  ListReposResponseRaw,\n  ListTagsResponseRaw,\n  NoteReadResponseRaw,\n  NoteWriteResponseRaw,\n  RawBranchInfo as SchemaRawBranchInfo,\n  RawCommitMetadata as SchemaRawCommitMetadata,\n  RawCommitInfo as SchemaRawCommitInfo,\n  RawFileWithMetadata as SchemaRawFileWithMetadata,\n  RawFileDiff as SchemaRawFileDiff,\n  RawFilteredFile as SchemaRawFilteredFile,\n  RawRepoBaseInfo as SchemaRawRepoBaseInfo,\n  RawRepoInfo as SchemaRawRepoInfo,\n  RawTagInfo as SchemaRawTagInfo,\n} from './schemas';\n\nexport interface OverrideableGitStorageOptions {\n  apiBaseUrl?: string;\n  storageBaseUrl?: string;\n  apiVersion?: ValidAPIVersion;\n  defaultTTL?: number;\n}\n\nexport interface GitStorageOptions extends OverrideableGitStorageOptions {\n  key: string;\n  name: string;\n  defaultTTL?: number;\n}\n\nexport type ValidAPIVersion = 1;\n\n/** A policy operation included in the JWT. */\nexport type Op = string;\n\nexport const OP_NO_FORCE_PUSH: Op = 'no-force-push';\n\n/** A list of policy operations. */\nexport type Ops = Op[];\n\nexport interface GetRemoteURLOptions {\n  permissions?: ('git:write' | 'git:read' | 'repo:write' | 'org:read')[];\n  ttl?: number;\n  ops?: Ops;\n}\n\nexport interface Repo {\n  id: string;\n  defaultBranch: string;\n  createdAt: string;\n  getRemoteURL(options?: GetRemoteURLOptions): Promise<string>;\n  getEphemeralRemoteURL(options?: GetRemoteURLOptions): Promise<string>;\n  getImportRemoteURL(options?: GetRemoteURLOptions): Promise<string>;\n\n  getFileStream(options: GetFileOptions): Promise<Response>;\n  getArchiveStream(options?: ArchiveOptions): Promise<Response>;\n  listFiles(options?: ListFilesOptions): Promise<ListFilesResult>;\n  listFilesWithMetadata(\n    options?: ListFilesWithMetadataOptions\n  ): Promise<ListFilesWithMetadataResult>;\n  listBranches(options?: ListBranchesOptions): Promise<ListBranchesResult>;\n  listTags(options?: ListTagsOptions): Promise<ListTagsResult>;\n  listCommits(options?: ListCommitsOptions): Promise<ListCommitsResult>;\n  createTag(options: CreateTagOptions): Promise<CreateTagResult>;\n  deleteTag(options: DeleteTagOptions): Promise<DeleteTagResult>;\n  getNote(options: GetNoteOptions): Promise<GetNoteResult>;\n  createNote(options: CreateNoteOptions): Promise<NoteWriteResult>;\n  appendNote(options: AppendNoteOptions): Promise<NoteWriteResult>;\n  deleteNote(options: DeleteNoteOptions): Promise<NoteWriteResult>;\n  getBranchDiff(options: GetBranchDiffOptions): Promise<GetBranchDiffResult>;\n  getCommitDiff(options: GetCommitDiffOptions): Promise<GetCommitDiffResult>;\n  grep(options: GrepOptions): Promise<GrepResult>;\n  pullUpstream(options?: PullUpstreamOptions): Promise<void>;\n  restoreCommit(options: RestoreCommitOptions): Promise<RestoreCommitResult>;\n  createBranch(options: CreateBranchOptions): Promise<CreateBranchResult>;\n  createCommit(options: CreateCommitOptions): CommitBuilder;\n  createCommitFromDiff(\n    options: CreateCommitFromDiffOptions\n  ): Promise<CommitResult>;\n}\n\nexport type ValidMethod = 'GET' | 'POST' | 'PUT' | 'DELETE';\ntype SimplePath = string;\ntype ComplexPath = {\n  path: string;\n  params?: Record<string, string | string[]>;\n  body?: Record<string, any>;\n};\nexport type ValidPath = SimplePath | ComplexPath;\n\ninterface GitStorageInvocationOptions {\n  ttl?: number;\n}\n\nexport interface FindOneOptions {\n  id: string;\n}\n\nexport interface RepoOptions {\n  id: string;\n  defaultBranch?: string;\n  createdAt?: string;\n}\n\nexport type SupportedRepoProvider =\n  | 'github'\n  | 'gitlab'\n  | 'bitbucket'\n  | 'gitea'\n  | 'forgejo'\n  | 'codeberg'\n  | 'sr.ht';\n\nexport interface PublicGitHubBaseRepoAuth {\n  /**\n   * Force public GitHub mode (no GitHub App installation required).\n   */\n  authType: 'public';\n}\n\nexport interface GitHubBaseRepo {\n  /**\n   * @default github\n   */\n  provider?: 'github';\n  owner: string;\n  name: string;\n  defaultBranch?: string;\n  auth?: PublicGitHubBaseRepoAuth;\n}\n\nexport interface GenericGitBaseRepo {\n  /**\n   * The git host provider. Must be one of the supported generic git providers.\n   */\n  provider: Exclude<SupportedRepoProvider, 'github'>;\n  owner: string;\n  name: string;\n  defaultBranch?: string;\n  /**\n   * Bare hostname for self-hosted instances (e.g. \"gitlab.example.com\").\n   * Falls back to the provider's default host when omitted.\n   */\n  upstreamHost?: string;\n}\n\nexport interface ForkBaseRepo {\n  id: string;\n  ref?: string;\n  sha?: string;\n}\n\nexport type BaseRepo = GitHubBaseRepo | ForkBaseRepo | GenericGitBaseRepo;\n\nexport interface CreateGitCredentialOptions {\n  repoId: string;\n  username?: string;\n  password: string;\n  ttl?: number;\n}\n\nexport interface UpdateGitCredentialOptions {\n  id: string;\n  username?: string;\n  password: string;\n  ttl?: number;\n}\n\nexport interface DeleteGitCredentialOptions {\n  id: string;\n  ttl?: number;\n}\n\nexport interface GitCredential {\n  id: string;\n  createdAt?: string;\n}\n\nexport interface ListReposOptions extends GitStorageInvocationOptions {\n  cursor?: string;\n  limit?: number;\n}\n\nexport type RawRepoBaseInfo = SchemaRawRepoBaseInfo;\n\nexport interface RepoBaseInfo {\n  provider: string;\n  owner: string;\n  name: string;\n}\n\nexport type RawRepoInfo = SchemaRawRepoInfo;\n\nexport interface RepoInfo {\n  repoId: string;\n  url: string;\n  defaultBranch: string;\n  createdAt: string;\n  baseRepo?: RepoBaseInfo;\n}\n\nexport type ListReposResponse = ListReposResponseRaw;\n\nexport interface ListReposResult {\n  repos: RepoInfo[];\n  nextCursor?: string;\n  hasMore: boolean;\n}\n\nexport interface CreateRepoOptions extends GitStorageInvocationOptions {\n  id?: string;\n  baseRepo?: BaseRepo;\n  defaultBranch?: string;\n}\n\nexport interface DeleteRepoOptions extends GitStorageInvocationOptions {\n  id: string;\n}\n\nexport interface DeleteRepoResult {\n  repoId: string;\n  message: string;\n}\n\n// Get File API types\nexport interface GetFileOptions extends GitStorageInvocationOptions {\n  path: string;\n  ref?: string;\n  ephemeral?: boolean;\n  ephemeralBase?: boolean;\n}\n\nexport interface ArchiveOptions extends GitStorageInvocationOptions {\n  ref?: string;\n  includeGlobs?: string[];\n  excludeGlobs?: string[];\n  maxBlobSize?: number;\n  archivePrefix?: string;\n}\n\nexport interface PullUpstreamOptions extends GitStorageInvocationOptions {\n  ref?: string;\n}\n\n// List Files API types\nexport interface ListFilesOptions extends GitStorageInvocationOptions {\n  ref?: string;\n  ephemeral?: boolean;\n}\n\nexport type ListFilesResponse = ListFilesResponseRaw;\n\nexport interface ListFilesResult {\n  paths: string[];\n  ref: string;\n}\n\nexport interface ListFilesWithMetadataOptions extends GitStorageInvocationOptions {\n  ref?: string;\n  ephemeral?: boolean;\n}\n\nexport type RawFileWithMetadata = SchemaRawFileWithMetadata;\n\nexport interface FileWithMetadata {\n  path: string;\n  mode: string;\n  size: number;\n  lastCommitSha: string;\n}\n\nexport type RawCommitMetadata = SchemaRawCommitMetadata;\n\nexport interface CommitMetadata {\n  author: string;\n  date: Date;\n  rawDate: string;\n  message: string;\n}\n\nexport type ListFilesWithMetadataResponse = ListFilesWithMetadataResponseRaw;\n\nexport interface ListFilesWithMetadataResult {\n  files: FileWithMetadata[];\n  commits: Record<string, CommitMetadata>;\n  ref: string;\n}\n\n// List Branches API types\nexport interface ListBranchesOptions extends GitStorageInvocationOptions {\n  cursor?: string;\n  limit?: number;\n}\n\nexport type RawBranchInfo = SchemaRawBranchInfo;\n\nexport interface BranchInfo {\n  cursor: string;\n  name: string;\n  headSha: string;\n  createdAt: string;\n}\n\nexport type ListBranchesResponse = ListBranchesResponseRaw;\n\nexport interface ListBranchesResult {\n  branches: BranchInfo[];\n  nextCursor?: string;\n  hasMore: boolean;\n}\n\n// Create Branch API types\nexport interface CreateBranchOptions extends GitStorageInvocationOptions {\n  baseBranch: string;\n  targetBranch: string;\n  baseIsEphemeral?: boolean;\n  targetIsEphemeral?: boolean;\n}\n\nexport type CreateBranchResponse = CreateBranchResponseRaw;\n\nexport interface CreateBranchResult {\n  message: string;\n  targetBranch: string;\n  targetIsEphemeral: boolean;\n  commitSha?: string;\n}\n\nexport interface ListTagsOptions extends GitStorageInvocationOptions {\n  cursor?: string;\n  limit?: number;\n}\n\nexport type RawTagInfo = SchemaRawTagInfo;\n\nexport interface TagInfo {\n  cursor: string;\n  name: string;\n  sha: string;\n}\n\nexport type ListTagsResponse = ListTagsResponseRaw;\n\nexport interface ListTagsResult {\n  tags: TagInfo[];\n  nextCursor?: string;\n  hasMore: boolean;\n}\n\nexport interface CreateTagOptions extends GitStorageInvocationOptions {\n  name: string;\n  target: string;\n}\n\nexport type CreateTagResponse = CreateTagResponseRaw;\n\nexport interface CreateTagResult {\n  name: string;\n  sha: string;\n  message: string;\n}\n\nexport interface DeleteTagOptions extends GitStorageInvocationOptions {\n  name: string;\n}\n\nexport type DeleteTagResponse = DeleteTagResponseRaw;\n\nexport interface DeleteTagResult {\n  name: string;\n  message: string;\n}\n\n// List Commits API types\nexport interface ListCommitsOptions extends GitStorageInvocationOptions {\n  branch?: string;\n  cursor?: string;\n  limit?: number;\n}\n\nexport type RawCommitInfo = SchemaRawCommitInfo;\n\nexport interface CommitInfo {\n  sha: string;\n  message: string;\n  authorName: string;\n  authorEmail: string;\n  committerName: string;\n  committerEmail: string;\n  date: Date;\n  rawDate: string;\n}\n\nexport type ListCommitsResponse = ListCommitsResponseRaw;\n\nexport interface ListCommitsResult {\n  commits: CommitInfo[];\n  nextCursor?: string;\n  hasMore: boolean;\n}\n\n// Git notes API types\nexport interface GetNoteOptions extends GitStorageInvocationOptions {\n  sha: string;\n}\n\nexport type GetNoteResponse = NoteReadResponseRaw;\n\nexport interface GetNoteResult {\n  sha: string;\n  note: string;\n  refSha: string;\n}\n\ninterface NoteWriteBaseOptions extends GitStorageInvocationOptions {\n  sha: string;\n  note: string;\n  expectedRefSha?: string;\n  author?: CommitSignature;\n}\n\nexport type CreateNoteOptions = NoteWriteBaseOptions;\n\nexport type AppendNoteOptions = NoteWriteBaseOptions;\n\nexport interface DeleteNoteOptions extends GitStorageInvocationOptions {\n  sha: string;\n  expectedRefSha?: string;\n  author?: CommitSignature;\n}\n\nexport interface NoteWriteResultPayload {\n  success: boolean;\n  status: string;\n  message?: string;\n}\n\nexport type NoteWriteResponse = NoteWriteResponseRaw;\n\nexport interface NoteWriteResult {\n  sha: string;\n  targetRef: string;\n  baseCommit?: string;\n  newRefSha: string;\n  result: NoteWriteResultPayload;\n}\n\n// Branch Diff API types\nexport interface GetBranchDiffOptions extends GitStorageInvocationOptions {\n  branch: string;\n  base?: string;\n  ephemeral?: boolean;\n  ephemeralBase?: boolean;\n  /** Optional paths to filter the diff to specific files */\n  paths?: string[];\n}\n\nexport type GetBranchDiffResponse = GetBranchDiffResponseRaw;\n\nexport interface GetBranchDiffResult {\n  branch: string;\n  base: string;\n  stats: DiffStats;\n  files: FileDiff[];\n  filteredFiles: FilteredFile[];\n}\n\n// Commit Diff API types\nexport interface GetCommitDiffOptions extends GitStorageInvocationOptions {\n  sha: string;\n  baseSha?: string;\n  /** Optional paths to filter the diff to specific files */\n  paths?: string[];\n}\n\nexport type GetCommitDiffResponse = GetCommitDiffResponseRaw;\n\nexport interface GetCommitDiffResult {\n  sha: string;\n  stats: DiffStats;\n  files: FileDiff[];\n  filteredFiles: FilteredFile[];\n}\n\n// Grep API types\nexport interface GrepOptions extends GitStorageInvocationOptions {\n  ref?: string;\n  /**\n   * @deprecated Use ref instead.\n   */\n  rev?: string;\n  paths?: string[];\n  query: {\n    pattern: string;\n    /**\n     * Default is case-sensitive.\n     * When omitted, the server default is used.\n     */\n    caseSensitive?: boolean;\n  };\n  fileFilters?: {\n    includeGlobs?: string[];\n    excludeGlobs?: string[];\n    extensionFilters?: string[];\n  };\n  context?: {\n    before?: number;\n    after?: number;\n  };\n  limits?: {\n    maxLines?: number;\n    maxMatchesPerFile?: number;\n  };\n  pagination?: {\n    cursor?: string;\n    limit?: number;\n  };\n}\n\nexport interface GrepLine {\n  lineNumber: number;\n  text: string;\n  type: string;\n}\n\nexport interface GrepFileMatch {\n  path: string;\n  lines: GrepLine[];\n}\n\nexport interface GrepResult {\n  query: {\n    pattern: string;\n    caseSensitive: boolean;\n  };\n  repo: {\n    ref: string;\n    commit: string;\n  };\n  matches: GrepFileMatch[];\n  nextCursor?: string;\n  hasMore: boolean;\n}\n\n// Shared diff types\nexport interface DiffStats {\n  files: number;\n  additions: number;\n  deletions: number;\n  changes: number;\n}\n\nexport type RawFileDiff = SchemaRawFileDiff;\n\nexport type RawFilteredFile = SchemaRawFilteredFile;\n\nexport type DiffFileState =\n  | 'added'\n  | 'modified'\n  | 'deleted'\n  | 'renamed'\n  | 'copied'\n  | 'type_changed'\n  | 'unmerged'\n  | 'unknown';\n\nexport interface DiffFileBase {\n  path: string;\n  state: DiffFileState;\n  rawState: string;\n  oldPath?: string;\n  bytes: number;\n  isEof: boolean;\n}\n\nexport interface FileDiff extends DiffFileBase {\n  raw: string;\n  additions: number;\n  deletions: number;\n}\n\nexport interface FilteredFile extends DiffFileBase {}\n\ninterface CreateCommitBaseOptions extends GitStorageInvocationOptions {\n  commitMessage: string;\n  expectedHeadSha?: string;\n  baseBranch?: string;\n  ephemeral?: boolean;\n  ephemeralBase?: boolean;\n  author: CommitSignature;\n  committer?: CommitSignature;\n  signal?: AbortSignal;\n}\n\nexport interface CreateCommitBranchOptions extends CreateCommitBaseOptions {\n  targetBranch: string;\n  targetRef?: never;\n}\n\n/**\n * @deprecated Use {@link CreateCommitBranchOptions} instead.\n */\nexport interface LegacyCreateCommitOptions extends CreateCommitBaseOptions {\n  targetBranch?: never;\n  targetRef: string;\n}\n\nexport type CreateCommitOptions =\n  | CreateCommitBranchOptions\n  | LegacyCreateCommitOptions;\n\nexport interface CommitSignature {\n  name: string;\n  email: string;\n}\n\nexport interface ReadableStreamReaderLike<T> {\n  read(): Promise<{ value?: T; done: boolean }>;\n  releaseLock?(): void;\n}\n\nexport interface ReadableStreamLike<T> {\n  getReader(): ReadableStreamReaderLike<T>;\n}\n\nexport interface BlobLike {\n  stream(): unknown;\n}\n\nexport interface FileLike extends BlobLike {\n  name: string;\n  lastModified?: number;\n}\n\nexport type GitFileMode = '100644' | '100755' | '120000' | '160000';\n\nexport type TextEncoding =\n  | 'ascii'\n  | 'utf8'\n  | 'utf-8'\n  | 'utf16le'\n  | 'utf-16le'\n  | 'ucs2'\n  | 'ucs-2'\n  | 'base64'\n  | 'base64url'\n  | 'latin1'\n  | 'binary'\n  | 'hex';\n\nexport type CommitFileSource =\n  | string\n  | Uint8Array\n  | ArrayBuffer\n  | BlobLike\n  | FileLike\n  | ReadableStreamLike<Uint8Array | ArrayBuffer | ArrayBufferView | string>\n  | AsyncIterable<Uint8Array | ArrayBuffer | ArrayBufferView | string>\n  | Iterable<Uint8Array | ArrayBuffer | ArrayBufferView | string>;\n\nexport interface CommitFileOptions {\n  mode?: GitFileMode;\n}\n\nexport interface CommitTextFileOptions extends CommitFileOptions {\n  encoding?: TextEncoding;\n}\n\nexport interface CommitBuilder {\n  addFile(\n    path: string,\n    source: CommitFileSource,\n    options?: CommitFileOptions\n  ): CommitBuilder;\n  addFileFromString(\n    path: string,\n    contents: string,\n    options?: CommitTextFileOptions\n  ): CommitBuilder;\n  deletePath(path: string): CommitBuilder;\n  send(): Promise<CommitResult>;\n}\n\nexport type DiffSource = CommitFileSource;\n\nexport interface CreateCommitFromDiffOptions\n  extends GitStorageInvocationOptions {\n  targetBranch: string;\n  commitMessage: string;\n  diff: DiffSource;\n  expectedHeadSha?: string;\n  baseBranch?: string;\n  ephemeral?: boolean;\n  ephemeralBase?: boolean;\n  author: CommitSignature;\n  committer?: CommitSignature;\n  signal?: AbortSignal;\n}\n\nexport interface RefUpdate {\n  branch: string;\n  oldSha: string;\n  newSha: string;\n}\n\nexport type RefUpdateReason =\n  | 'precondition_failed'\n  | 'conflict'\n  | 'not_found'\n  | 'invalid'\n  | 'timeout'\n  | 'unauthorized'\n  | 'forbidden'\n  | 'unavailable'\n  | 'internal'\n  | 'failed'\n  | 'unknown';\n\nexport interface CommitResult {\n  commitSha: string;\n  treeSha: string;\n  targetBranch: string;\n  packBytes: number;\n  blobCount: number;\n  refUpdate: RefUpdate;\n}\n\nexport interface RestoreCommitOptions extends GitStorageInvocationOptions {\n  targetBranch: string;\n  targetCommitSha: string;\n  commitMessage?: string;\n  expectedHeadSha?: string;\n  author: CommitSignature;\n  committer?: CommitSignature;\n}\n\nexport interface RestoreCommitResult {\n  commitSha: string;\n  treeSha: string;\n  targetBranch: string;\n  packBytes: number;\n  refUpdate: RefUpdate;\n}\n\n// Webhook types\nexport interface WebhookValidationOptions {\n  /**\n   * Maximum age of webhook in seconds (default: 300 seconds / 5 minutes)\n   * Set to 0 to disable timestamp validation\n   */\n  maxAgeSeconds?: number;\n}\n\nexport interface WebhookValidationResult {\n  /**\n   * Whether the webhook signature and timestamp are valid\n   */\n  valid: boolean;\n  /**\n   * Error message if validation failed\n   */\n  error?: string;\n  /**\n   * The parsed webhook event type (e.g., \"push\")\n   */\n  eventType?: string;\n  /**\n   * The timestamp from the signature (Unix seconds)\n   */\n  timestamp?: number;\n}\n\n// Webhook event payloads\nexport interface RawWebhookPushEvent {\n  repository: {\n    id: string;\n    url: string;\n  };\n  ref: string;\n  before: string;\n  after: string;\n  customer_id: string;\n  pushed_at: string; // RFC3339 timestamp\n}\n\nexport interface WebhookPushEvent {\n  type: 'push';\n  repository: {\n    id: string;\n    url: string;\n  };\n  ref: string;\n  before: string;\n  after: string;\n  customerId: string;\n  pushedAt: Date;\n  rawPushedAt: string;\n}\n\nexport interface WebhookUnknownEvent {\n  type: string;\n  raw: unknown;\n}\n\nexport type WebhookEventPayload = WebhookPushEvent | WebhookUnknownEvent;\n\nexport interface ParsedWebhookSignature {\n  timestamp: string;\n  signature: string;\n}\n","export function timingSafeEqual(\n  a: string | Uint8Array,\n  b: string | Uint8Array\n): boolean {\n  const bufferA = typeof a === 'string' ? new TextEncoder().encode(a) : a;\n  const bufferB = typeof b === 'string' ? new TextEncoder().encode(b) : b;\n\n  if (bufferA.length !== bufferB.length) return false;\n\n  let result = 0;\n  for (let i = 0; i < bufferA.length; i++) {\n    result |= bufferA[i] ^ bufferB[i];\n  }\n  return result === 0;\n}\n\nexport async function getEnvironmentCrypto() {\n  if (!globalThis.crypto) {\n    const { webcrypto } = await import('node:crypto');\n    return webcrypto;\n  }\n  return globalThis.crypto;\n}\n\nexport async function createHmac(\n  algorithm: string,\n  secret: string,\n  data: string\n): Promise<string> {\n  if (algorithm !== 'sha256') {\n    throw new Error('Only sha256 algorithm is supported');\n  }\n  if (!secret || secret.length === 0) {\n    throw new Error('Secret is required');\n  }\n\n  const crypto = await getEnvironmentCrypto();\n  const encoder = new TextEncoder();\n  const key = await crypto.subtle.importKey(\n    'raw',\n    encoder.encode(secret),\n    { name: 'HMAC', hash: 'SHA-256' },\n    false,\n    ['sign']\n  );\n\n  const signature = await crypto.subtle.sign('HMAC', key, encoder.encode(data));\n  return Array.from(new Uint8Array(signature))\n    .map((b) => b.toString(16).padStart(2, '0'))\n    .join('');\n}\n","/**\n * Webhook validation utilities for Pierre Git Storage\n */\nimport type {\n  ParsedWebhookSignature,\n  RawWebhookPushEvent,\n  WebhookEventPayload,\n  WebhookPushEvent,\n  WebhookValidationOptions,\n  WebhookValidationResult,\n} from './types';\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(\n  header: string\n): ParsedWebhookSignature | null {\n  if (!header || typeof header !== 'string') {\n    return null;\n  }\n\n  let timestamp = '';\n  let signature = '';\n\n  // Split by comma and parse each element\n  const elements = header.split(',');\n  for (const element of elements) {\n    const trimmedElement = element.trim();\n    const parts = trimmedElement.split('=', 2);\n    if (parts.length !== 2) {\n      continue;\n    }\n\n    const [key, value] = parts;\n    switch (key) {\n      case 't':\n        timestamp = value;\n        break;\n      case 'sha256':\n        signature = value;\n        break;\n    }\n  }\n\n  if (!timestamp || !signature) {\n    return null;\n  }\n\n  return { 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  payload: string | Buffer,\n  signatureHeader: string,\n  secret: string,\n  options: WebhookValidationOptions = {}\n): Promise<WebhookValidationResult> {\n  if (!secret || secret.length === 0) {\n    return {\n      valid: false,\n      error: 'Empty secret is not allowed',\n    };\n  }\n\n  // Parse the signature header\n  const parsed = parseSignatureHeader(signatureHeader);\n  if (!parsed) {\n    return {\n      valid: false,\n      error: 'Invalid signature header format',\n    };\n  }\n\n  // Parse timestamp\n  const timestamp = Number.parseInt(parsed.timestamp, 10);\n  if (isNaN(timestamp)) {\n    return {\n      valid: false,\n      error: 'Invalid timestamp in signature',\n    };\n  }\n\n  // Validate timestamp age (prevent replay attacks)\n  const maxAge = options.maxAgeSeconds ?? DEFAULT_MAX_AGE_SECONDS;\n  if (maxAge > 0) {\n    const now = Math.floor(Date.now() / 1000);\n    const age = now - timestamp;\n\n    if (age > maxAge) {\n      return {\n        valid: false,\n        error: `Webhook timestamp too old (${age} seconds)`,\n        timestamp,\n      };\n    }\n\n    // Also reject timestamps from the future (clock skew tolerance of 60 seconds)\n    if (age < -60) {\n      return {\n        valid: false,\n        error: 'Webhook timestamp is in the future',\n        timestamp,\n      };\n    }\n  }\n\n  // Convert payload to string if it's a Buffer\n  const payloadStr =\n    typeof payload === 'string' ? payload : payload.toString('utf8');\n\n  // Compute expected signature\n  // Format: HMAC-SHA256(secret, timestamp + \".\" + payload)\n  const signedData = `${parsed.timestamp}.${payloadStr}`;\n  const expectedSignature = await createHmac('sha256', secret, signedData);\n\n  // Compare signatures using constant-time comparison\n  const expectedBuffer = Buffer.from(expectedSignature);\n  const actualBuffer = Buffer.from(parsed.signature);\n\n  // Ensure both buffers are the same length for timing-safe comparison\n  if (expectedBuffer.length !== actualBuffer.length) {\n    return {\n      valid: false,\n      error: 'Invalid signature',\n      timestamp,\n    };\n  }\n\n  const signaturesMatch = timingSafeEqual(expectedBuffer, actualBuffer);\n  if (!signaturesMatch) {\n    return {\n      valid: false,\n      error: 'Invalid signature',\n      timestamp,\n    };\n  }\n\n  return {\n    valid: true,\n    timestamp,\n  };\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  payload: string | Buffer,\n  headers: Record<string, string | string[] | undefined>,\n  secret: string,\n  options: WebhookValidationOptions = {}\n): Promise<WebhookValidationResult & { payload?: WebhookEventPayload }> {\n  // Get signature header\n  const signatureHeader =\n    headers['x-pierre-signature'] || headers['X-Pierre-Signature'];\n  if (!signatureHeader || Array.isArray(signatureHeader)) {\n    return {\n      valid: false,\n      error: 'Missing or invalid X-Pierre-Signature header',\n    };\n  }\n\n  // Get event type header\n  const eventType = headers['x-pierre-event'] || headers['X-Pierre-Event'];\n  if (!eventType || Array.isArray(eventType)) {\n    return {\n      valid: false,\n      error: 'Missing or invalid X-Pierre-Event header',\n    };\n  }\n\n  // Validate signature\n  const validationResult = await validateWebhookSignature(\n    payload,\n    signatureHeader,\n    secret,\n    options\n  );\n\n  if (!validationResult.valid) {\n    return validationResult;\n  }\n\n  // Parse payload\n  const payloadStr =\n    typeof payload === 'string' ? payload : payload.toString('utf8');\n  let parsedJson: unknown;\n  try {\n    parsedJson = JSON.parse(payloadStr);\n  } catch {\n    return {\n      valid: false,\n      error: 'Invalid JSON payload',\n      timestamp: validationResult.timestamp,\n    };\n  }\n\n  const conversion = convertWebhookPayload(String(eventType), parsedJson);\n  if (!conversion.valid) {\n    return {\n      valid: false,\n      error: conversion.error,\n      timestamp: validationResult.timestamp,\n    };\n  }\n\n  return {\n    valid: true,\n    eventType,\n    timestamp: validationResult.timestamp,\n    payload: conversion.payload,\n  };\n}\n\nfunction convertWebhookPayload(\n  eventType: string,\n  raw: unknown\n):\n  | { valid: true; payload: WebhookEventPayload }\n  | { valid: false; error: string } {\n  if (eventType === 'push') {\n    if (!isRawWebhookPushEvent(raw)) {\n      return {\n        valid: false,\n        error: 'Invalid push payload',\n      };\n    }\n    return {\n      valid: true,\n      payload: transformPushEvent(raw),\n    };\n  }\n  const fallbackPayload = { type: eventType, raw };\n  return {\n    valid: true,\n    payload: fallbackPayload,\n  };\n}\n\nfunction transformPushEvent(raw: RawWebhookPushEvent): WebhookPushEvent {\n  return {\n    type: 'push' as const,\n    repository: {\n      id: raw.repository.id,\n      url: raw.repository.url,\n    },\n    ref: raw.ref,\n    before: raw.before,\n    after: raw.after,\n    customerId: raw.customer_id,\n    pushedAt: new Date(raw.pushed_at),\n    rawPushedAt: raw.pushed_at,\n  };\n}\n\nfunction isRawWebhookPushEvent(value: unknown): value is RawWebhookPushEvent {\n  if (!isRecord(value)) {\n    return false;\n  }\n  if (!isRecord(value.repository)) {\n    return false;\n  }\n  return (\n    typeof value.repository.id === 'string' &&\n    typeof value.repository.url === 'string' &&\n    typeof value.ref === 'string' &&\n    typeof value.before === 'string' &&\n    typeof value.after === 'string' &&\n    typeof value.customer_id === 'string' &&\n    typeof value.pushed_at === 'string'\n  );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return 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 */\nimport { SignJWT, importPKCS8 } from 'jose';\nimport snakecaseKeys from 'snakecase-keys';\n\nimport {\n  FetchCommitTransport,\n  createCommitBuilder,\n  resolveCommitTtlSeconds,\n} from './commit';\nimport { FetchDiffCommitTransport, sendCommitFromDiff } from './diff-commit';\nimport { RefUpdateError } from './errors';\nimport { ApiError, ApiFetcher } from './fetch';\nimport type { RestoreCommitAckRaw } from './schemas';\nimport {\n  branchDiffResponseSchema,\n  commitDiffResponseSchema,\n  createBranchResponseSchema,\n  createTagResponseSchema,\n  deleteTagResponseSchema,\n  errorEnvelopeSchema,\n  grepResponseSchema,\n  listBranchesResponseSchema,\n  listCommitsResponseSchema,\n  listFilesResponseSchema,\n  listFilesWithMetadataResponseSchema,\n  listReposResponseSchema,\n  listTagsResponseSchema,\n  noteReadResponseSchema,\n  noteWriteResponseSchema,\n  restoreCommitAckSchema,\n  restoreCommitResponseSchema,\n} from './schemas';\nimport type {\n  AppendNoteOptions,\n  ArchiveOptions,\n  BranchInfo,\n  CommitBuilder,\n  CommitInfo,\n  CommitMetadata,\n  CommitResult,\n  CreateBranchOptions,\n  CreateBranchResponse,\n  CreateBranchResult,\n  CreateCommitFromDiffOptions,\n  CreateCommitOptions,\n  CreateTagOptions,\n  CreateTagResponse,\n  CreateTagResult,\n  CreateGitCredentialOptions,\n  CreateNoteOptions,\n  CreateRepoOptions,\n  DeleteTagOptions,\n  DeleteTagResponse,\n  DeleteTagResult,\n  DeleteGitCredentialOptions,\n  DeleteNoteOptions,\n  DeleteRepoOptions,\n  DeleteRepoResult,\n  DiffFileState,\n  FileWithMetadata,\n  FileDiff,\n  FilteredFile,\n  FindOneOptions,\n  GenericGitBaseRepo,\n  GetBranchDiffOptions,\n  GetBranchDiffResponse,\n  GetBranchDiffResult,\n  GetCommitDiffOptions,\n  GetCommitDiffResponse,\n  GetCommitDiffResult,\n  GetFileOptions,\n  GetNoteOptions,\n  GetNoteResult,\n  GetRemoteURLOptions,\n  GitCredential,\n  GitHubBaseRepo,\n  GitStorageOptions,\n  GrepFileMatch,\n  GrepLine,\n  GrepOptions,\n  GrepResult,\n  ListBranchesOptions,\n  ListBranchesResponse,\n  ListBranchesResult,\n  ListCommitsOptions,\n  ListCommitsResponse,\n  ListCommitsResult,\n  ListFilesOptions,\n  ListFilesResult,\n  ListFilesWithMetadataOptions,\n  ListFilesWithMetadataResponse,\n  ListFilesWithMetadataResult,\n  ListReposOptions,\n  ListReposResponse,\n  ListReposResult,\n  ListTagsOptions,\n  ListTagsResponse,\n  ListTagsResult,\n  NoteWriteResult,\n  PullUpstreamOptions,\n  RawBranchInfo,\n  RawCommitMetadata,\n  RawCommitInfo,\n  RawFileWithMetadata,\n  RawFileDiff,\n  RawFilteredFile,\n  RawTagInfo,\n  RefUpdate,\n  RepoOptions,\n  Repo,\n  RestoreCommitOptions,\n  RestoreCommitResult,\n  TagInfo,\n  UpdateGitCredentialOptions,\n  ValidAPIVersion,\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 {\n  parseSignatureHeader,\n  validateWebhook,\n  validateWebhookSignature,\n} 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  400, // Bad Request - validation errors\n  401, // Unauthorized - missing/invalid auth header\n  403, // Forbidden - missing git:write scope\n  404, // Not Found - repo lookup failures\n  408, // Request Timeout - client cancelled\n  409, // Conflict - concurrent ref updates\n  412, // Precondition Failed - optimistic concurrency\n  422, // Unprocessable Entity - metadata issues\n  429, // Too Many Requests - upstream throttling\n  499, // Client Closed Request - storage cancellation\n  500, // Internal Server Error - generic failure\n  502, // Bad Gateway - storage/gateway bridge issues\n  503, // Service Unavailable - storage selection failures\n  504, // Gateway Timeout - long-running storage operations\n] as const;\n\nconst NOTE_WRITE_ALLOWED_STATUS = [\n  400, // Bad Request - validation errors\n  401, // Unauthorized - missing/invalid auth header\n  403, // Forbidden - missing git:write scope\n  404, // Not Found - repo or note lookup failures\n  408, // Request Timeout - client cancelled\n  409, // Conflict - concurrent ref updates\n  412, // Precondition Failed - optimistic concurrency\n  422, // Unprocessable Entity - metadata issues\n  429, // Too Many Requests - upstream throttling\n  499, // Client Closed Request - storage cancellation\n  500, // Internal Server Error - generic failure\n  502, // Bad Gateway - storage/gateway bridge issues\n  503, // Service Unavailable - storage selection failures\n  504, // Gateway Timeout - long-running storage operations\n] as const;\n\nfunction resolveInvocationTtlSeconds(\n  options?: { ttl?: number },\n  defaultValue: number = DEFAULT_TOKEN_TTL_SECONDS\n): number {\n  if (typeof options?.ttl === 'number' && options.ttl > 0) {\n    return options.ttl;\n  }\n  return defaultValue;\n}\n\ntype RestoreCommitAck = RestoreCommitAckRaw;\n\nfunction toRefUpdate(result: RestoreCommitAck['result']): RefUpdate {\n  return {\n    branch: result.branch,\n    oldSha: result.old_sha,\n    newSha: result.new_sha,\n  };\n}\n\nfunction buildRestoreCommitResult(ack: RestoreCommitAck): RestoreCommitResult {\n  const refUpdate = toRefUpdate(ack.result);\n  if (!ack.result.success) {\n    throw new RefUpdateError(\n      ack.result.message ??\n        `Restore commit failed with status ${ack.result.status}`,\n      {\n        status: ack.result.status,\n        message: ack.result.message,\n        refUpdate,\n      }\n    );\n  }\n  return {\n    commitSha: ack.commit.commit_sha,\n    treeSha: ack.commit.tree_sha,\n    targetBranch: ack.commit.target_branch,\n    packBytes: ack.commit.pack_bytes,\n    refUpdate,\n  };\n}\n\ninterface RestoreCommitFailureInfo {\n  status?: string;\n  message?: string;\n  refUpdate?: Partial<RefUpdate>;\n}\n\nfunction toPartialRefUpdate(\n  branch?: unknown,\n  oldSha?: unknown,\n  newSha?: unknown\n): Partial<RefUpdate> | undefined {\n  const refUpdate: Partial<RefUpdate> = {};\n  if (typeof branch === 'string' && branch.trim() !== '') {\n    refUpdate.branch = branch;\n  }\n  if (typeof oldSha === 'string' && oldSha.trim() !== '') {\n    refUpdate.oldSha = oldSha;\n  }\n  if (typeof newSha === 'string' && newSha.trim() !== '') {\n    refUpdate.newSha = newSha;\n  }\n  return Object.keys(refUpdate).length > 0 ? refUpdate : undefined;\n}\n\nfunction parseRestoreCommitPayload(\n  payload: unknown\n): { ack: RestoreCommitAck } | { failure: RestoreCommitFailureInfo } | null {\n  const ack = restoreCommitAckSchema.safeParse(payload);\n  if (ack.success) {\n    return { ack: ack.data };\n  }\n\n  const failure = restoreCommitResponseSchema.safeParse(payload);\n  if (failure.success) {\n    const result = failure.data.result;\n    return {\n      failure: {\n        status: result.status,\n        message: result.message,\n        refUpdate: toPartialRefUpdate(\n          result.branch,\n          result.old_sha,\n          result.new_sha\n        ),\n      },\n    };\n  }\n\n  return null;\n}\n\nfunction httpStatusToRestoreStatus(status: number): string {\n  switch (status) {\n    case 409:\n      return 'conflict';\n    case 412:\n      return 'precondition_failed';\n    default:\n      return `${status}`;\n  }\n}\n\nfunction getApiInstance(baseUrl: string, version: ValidAPIVersion) {\n  if (!apiInstanceMap.has(`${baseUrl}--${version}`)) {\n    apiInstanceMap.set(\n      `${baseUrl}--${version}`,\n      new ApiFetcher(baseUrl, version)\n    );\n  }\n  return apiInstanceMap.get(`${baseUrl}--${version}`)!;\n}\n\nfunction transformBranchInfo(raw: RawBranchInfo): BranchInfo {\n  return {\n    cursor: raw.cursor,\n    name: raw.name,\n    headSha: raw.head_sha,\n    createdAt: raw.created_at,\n  };\n}\n\nfunction transformListBranchesResult(\n  raw: ListBranchesResponse\n): ListBranchesResult {\n  return {\n    branches: raw.branches.map(transformBranchInfo),\n    nextCursor: raw.next_cursor ?? undefined,\n    hasMore: raw.has_more,\n  };\n}\n\nfunction transformCommitInfo(raw: RawCommitInfo): CommitInfo {\n  const parsedDate = new Date(raw.date);\n  return {\n    sha: raw.sha,\n    message: raw.message,\n    authorName: raw.author_name,\n    authorEmail: raw.author_email,\n    committerName: raw.committer_name,\n    committerEmail: raw.committer_email,\n    date: parsedDate,\n    rawDate: raw.date,\n  };\n}\n\nfunction transformListCommitsResult(\n  raw: ListCommitsResponse\n): ListCommitsResult {\n  return {\n    commits: raw.commits.map(transformCommitInfo),\n    nextCursor: raw.next_cursor ?? undefined,\n    hasMore: raw.has_more,\n  };\n}\n\nfunction transformFileWithMetadata(raw: RawFileWithMetadata): FileWithMetadata {\n  return {\n    path: raw.path,\n    mode: raw.mode,\n    size: raw.size,\n    lastCommitSha: raw.last_commit_sha,\n  };\n}\n\nfunction transformCommitMetadata(raw: RawCommitMetadata): CommitMetadata {\n  return {\n    author: raw.author,\n    date: new Date(raw.date),\n    rawDate: raw.date,\n    message: raw.message,\n  };\n}\n\nfunction transformListFilesWithMetadataResult(\n  raw: ListFilesWithMetadataResponse\n): ListFilesWithMetadataResult {\n  const commits: Record<string, CommitMetadata> = {};\n  for (const [sha, commit] of Object.entries(raw.commits)) {\n    commits[sha] = transformCommitMetadata(commit);\n  }\n\n  return {\n    files: raw.files.map(transformFileWithMetadata),\n    commits,\n    ref: raw.ref,\n  };\n}\n\nfunction normalizeDiffState(rawState: string): DiffFileState {\n  if (!rawState) {\n    return 'unknown';\n  }\n  const leading = rawState.trim()[0]?.toUpperCase();\n  switch (leading) {\n    case 'A':\n      return 'added';\n    case 'M':\n      return 'modified';\n    case 'D':\n      return 'deleted';\n    case 'R':\n      return 'renamed';\n    case 'C':\n      return 'copied';\n    case 'T':\n      return 'type_changed';\n    case 'U':\n      return 'unmerged';\n    default:\n      return 'unknown';\n  }\n}\n\nfunction transformFileDiff(raw: RawFileDiff): FileDiff {\n  const normalizedState = normalizeDiffState(raw.state);\n  return {\n    path: raw.path,\n    state: normalizedState,\n    rawState: raw.state,\n    oldPath: raw.old_path ?? undefined,\n    raw: raw.raw,\n    bytes: raw.bytes,\n    isEof: raw.is_eof,\n    additions: raw.additions ?? 0,\n    deletions: raw.deletions ?? 0,\n  };\n}\n\nfunction transformFilteredFile(raw: RawFilteredFile): FilteredFile {\n  const normalizedState = normalizeDiffState(raw.state);\n  return {\n    path: raw.path,\n    state: normalizedState,\n    rawState: raw.state,\n    oldPath: raw.old_path ?? undefined,\n    bytes: raw.bytes,\n    isEof: raw.is_eof,\n  };\n}\n\nfunction transformBranchDiffResult(\n  raw: GetBranchDiffResponse\n): GetBranchDiffResult {\n  return {\n    branch: raw.branch,\n    base: raw.base,\n    stats: raw.stats,\n    files: raw.files.map(transformFileDiff),\n    filteredFiles: raw.filtered_files.map(transformFilteredFile),\n  };\n}\n\nfunction transformCommitDiffResult(\n  raw: GetCommitDiffResponse\n): GetCommitDiffResult {\n  return {\n    sha: raw.sha,\n    stats: raw.stats,\n    files: raw.files.map(transformFileDiff),\n    filteredFiles: raw.filtered_files.map(transformFilteredFile),\n  };\n}\n\nfunction transformCreateBranchResult(\n  raw: CreateBranchResponse\n): CreateBranchResult {\n  return {\n    message: raw.message,\n    targetBranch: raw.target_branch,\n    targetIsEphemeral: raw.target_is_ephemeral,\n    commitSha: raw.commit_sha ?? undefined,\n  };\n}\n\nfunction transformTagInfo(raw: RawTagInfo): TagInfo {\n  return {\n    cursor: raw.cursor,\n    name: raw.name,\n    sha: raw.sha,\n  };\n}\n\nfunction transformListTagsResult(raw: ListTagsResponse): ListTagsResult {\n  return {\n    tags: raw.tags.map(transformTagInfo),\n    nextCursor: raw.next_cursor ?? undefined,\n    hasMore: raw.has_more,\n  };\n}\n\nfunction transformCreateTagResult(raw: CreateTagResponse): CreateTagResult {\n  return {\n    name: raw.name,\n    sha: raw.sha,\n    message: raw.message,\n  };\n}\n\nfunction transformDeleteTagResult(raw: DeleteTagResponse): DeleteTagResult {\n  return {\n    name: raw.name,\n    message: raw.message,\n  };\n}\n\nfunction transformListReposResult(raw: ListReposResponse): ListReposResult {\n  return {\n    repos: raw.repos.map((repo) => ({\n      repoId: repo.repo_id,\n      url: repo.url,\n      defaultBranch: repo.default_branch,\n      createdAt: repo.created_at,\n      baseRepo: repo.base_repo\n        ? {\n            provider: repo.base_repo.provider,\n            owner: repo.base_repo.owner,\n            name: repo.base_repo.name,\n          }\n        : undefined,\n    })),\n    nextCursor: raw.next_cursor ?? undefined,\n    hasMore: raw.has_more,\n  };\n}\n\nfunction transformGrepLine(raw: {\n  line_number: number;\n  text: string;\n  type: string;\n}): GrepLine {\n  return {\n    lineNumber: raw.line_number,\n    text: raw.text,\n    type: raw.type,\n  };\n}\n\nfunction transformGrepFileMatch(raw: {\n  path: string;\n  lines: { line_number: number; text: string; type: string }[];\n}): GrepFileMatch {\n  return {\n    path: raw.path,\n    lines: raw.lines.map(transformGrepLine),\n  };\n}\n\nfunction transformNoteReadResult(raw: {\n  sha: string;\n  note: string;\n  ref_sha: string;\n}): GetNoteResult {\n  return {\n    sha: raw.sha,\n    note: raw.note,\n    refSha: raw.ref_sha,\n  };\n}\n\nfunction transformNoteWriteResult(raw: {\n  sha: string;\n  target_ref: string;\n  base_commit?: string;\n  new_ref_sha: string;\n  result: { success: boolean; status: string; message?: string };\n}): NoteWriteResult {\n  return {\n    sha: raw.sha,\n    targetRef: raw.target_ref,\n    baseCommit: raw.base_commit,\n    newRefSha: raw.new_ref_sha,\n    result: {\n      success: raw.result.success,\n      status: raw.result.status,\n      message: raw.result.message,\n    },\n  };\n}\n\nfunction buildNoteWriteBody(\n  sha: string,\n  note: string,\n  action: 'add' | 'append',\n  options: { expectedRefSha?: string; author?: { name: string; email: string } }\n): Record<string, unknown> {\n  const body: Record<string, unknown> = {\n    sha,\n    action,\n    note,\n  };\n\n  const expectedRefSha = options.expectedRefSha?.trim();\n  if (expectedRefSha) {\n    body.expected_ref_sha = expectedRefSha;\n  }\n\n  if (options.author) {\n    const authorName = options.author.name?.trim();\n    const authorEmail = options.author.email?.trim();\n    if (!authorName || !authorEmail) {\n      throw new Error('note author name and email are required when provided');\n    }\n    body.author = {\n      name: authorName,\n      email: authorEmail,\n    };\n  }\n\n  return body;\n}\n\nasync function parseNoteWriteResponse(\n  response: Response,\n  method: 'POST' | 'DELETE'\n): Promise<NoteWriteResult> {\n  let jsonBody: unknown;\n  const contentType = response.headers.get('content-type') ?? '';\n  try {\n    if (contentType.includes('application/json')) {\n      jsonBody = await response.json();\n    } else {\n      jsonBody = await response.text();\n    }\n  } catch {\n    jsonBody = undefined;\n  }\n\n  if (jsonBody && typeof jsonBody === 'object') {\n    const parsed = noteWriteResponseSchema.safeParse(jsonBody);\n    if (parsed.success) {\n      return transformNoteWriteResult(parsed.data);\n    }\n    const parsedError = errorEnvelopeSchema.safeParse(jsonBody);\n    if (parsedError.success) {\n      throw new ApiError({\n        message: parsedError.data.error,\n        status: response.status,\n        statusText: response.statusText,\n        method,\n        url: response.url,\n        body: jsonBody,\n      });\n    }\n  }\n\n  const fallbackMessage =\n    typeof jsonBody === 'string' && jsonBody.trim() !== ''\n      ? jsonBody.trim()\n      : `Request ${method} ${response.url} failed with status ${response.status} ${response.statusText}`;\n\n  throw new ApiError({\n    message: fallbackMessage,\n    status: response.status,\n    statusText: response.statusText,\n    method,\n    url: response.url,\n    body: jsonBody,\n  });\n}\n\n/**\n * Implementation of the Repo interface\n */\nclass RepoImpl implements Repo {\n  private readonly api: ApiFetcher;\n\n  constructor(\n    public readonly id: string,\n    public readonly defaultBranch: string,\n    public readonly createdAt: string,\n    private readonly options: GitStorageOptions,\n    private readonly generateJWT: (\n      repoId: string,\n      options?: GetRemoteURLOptions\n    ) => Promise<string>\n  ) {\n    this.api = getApiInstance(\n      this.options.apiBaseUrl ?? GitStorage.getDefaultAPIBaseUrl(options.name),\n      this.options.apiVersion ?? API_VERSION\n    );\n  }\n\n  async getRemoteURL(urlOptions?: GetRemoteURLOptions): Promise<string> {\n    const url = new URL(\n      `https://${this.options.storageBaseUrl}/${this.id}.git`\n    );\n    url.username = `t`;\n    url.password = await this.generateJWT(this.id, urlOptions);\n    return url.toString();\n  }\n\n  async getEphemeralRemoteURL(\n    urlOptions?: GetRemoteURLOptions\n  ): Promise<string> {\n    const url = new URL(\n      `https://${this.options.storageBaseUrl}/${this.id}+ephemeral.git`\n    );\n    url.username = `t`;\n    url.password = await this.generateJWT(this.id, urlOptions);\n    return url.toString();\n  }\n\n  async getImportRemoteURL(urlOptions?: GetRemoteURLOptions): Promise<string> {\n    const url = new URL(\n      `https://${this.options.storageBaseUrl}/${this.id}+import.git`\n    );\n    url.username = `t`;\n    url.password = await this.generateJWT(this.id, urlOptions);\n    return url.toString();\n  }\n\n  async getFileStream(options: GetFileOptions): Promise<Response> {\n    const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n    const jwt = await this.generateJWT(this.id, {\n      permissions: ['git:read'],\n      ttl,\n    });\n\n    const params: Record<string, string> = {\n      path: options.path,\n    };\n\n    if (options.ref) {\n      params.ref = options.ref;\n    }\n    if (typeof options.ephemeral === 'boolean') {\n      params.ephemeral = String(options.ephemeral);\n    }\n    if (typeof options.ephemeralBase === 'boolean') {\n      params.ephemeral_base = String(options.ephemeralBase);\n    }\n\n    // Return the raw fetch Response for streaming\n    return this.api.get({ path: 'repos/file', params }, jwt);\n  }\n\n  async getArchiveStream(options: ArchiveOptions = {}): Promise<Response> {\n    const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n    const jwt = await this.generateJWT(this.id, {\n      permissions: ['git:read'],\n      ttl,\n    });\n\n    const body: Record<string, unknown> = {};\n    const ref = options.ref?.trim();\n    if (ref) {\n      body.ref = ref;\n    }\n    if (Array.isArray(options.includeGlobs) && options.includeGlobs.length > 0) {\n      body.include_globs = options.includeGlobs;\n    }\n    if (Array.isArray(options.excludeGlobs) && options.excludeGlobs.length > 0) {\n      body.exclude_globs = options.excludeGlobs;\n    }\n    if (typeof options.maxBlobSize === 'number' && Number.isFinite(options.maxBlobSize)) {\n      body.max_blob_size = options.maxBlobSize;\n    }\n    if (typeof options.archivePrefix === 'string') {\n      const prefix = options.archivePrefix.trim();\n      if (prefix) {\n        body.archive = { prefix };\n      }\n    }\n\n    const path =\n      Object.keys(body).length > 0 ? { path: 'repos/archive', body } : 'repos/archive';\n\n    return this.api.post(path, jwt);\n  }\n\n  async listFiles(options?: ListFilesOptions): Promise<ListFilesResult> {\n    const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n    const jwt = await this.generateJWT(this.id, {\n      permissions: ['git:read'],\n      ttl,\n    });\n\n    const params: Record<string, string> = {};\n    if (options?.ref) {\n      params.ref = options.ref;\n    }\n    if (typeof options?.ephemeral === 'boolean') {\n      params.ephemeral = String(options.ephemeral);\n    }\n    const response = await this.api.get(\n      {\n        path: 'repos/files',\n        params: Object.keys(params).length ? params : undefined,\n      },\n      jwt\n    );\n\n    const raw = listFilesResponseSchema.parse(await response.json());\n    return { paths: raw.paths, ref: raw.ref };\n  }\n\n  async listFilesWithMetadata(\n    options?: ListFilesWithMetadataOptions\n  ): Promise<ListFilesWithMetadataResult> {\n    const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n    const jwt = await this.generateJWT(this.id, {\n      permissions: ['git:read'],\n      ttl,\n    });\n\n    const params: Record<string, string> = {};\n    if (options?.ref) {\n      params.ref = options.ref;\n    }\n    if (typeof options?.ephemeral === 'boolean') {\n      params.ephemeral = String(options.ephemeral);\n    }\n    const response = await this.api.get(\n      {\n        path: 'repos/files/metadata',\n        params: Object.keys(params).length ? params : undefined,\n      },\n      jwt\n    );\n\n    const raw = listFilesWithMetadataResponseSchema.parse(await response.json());\n    return transformListFilesWithMetadataResult(raw);\n  }\n\n  async listBranches(\n    options?: ListBranchesOptions\n  ): Promise<ListBranchesResult> {\n    const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n    const jwt = await this.generateJWT(this.id, {\n      permissions: ['git:read'],\n      ttl,\n    });\n\n    const cursor = options?.cursor;\n    const limit = options?.limit;\n\n    let params: Record<string, string> | undefined;\n\n    if (typeof cursor === 'string' || typeof limit === 'number') {\n      params = {};\n      if (typeof cursor === 'string') {\n        params.cursor = cursor;\n      }\n      if (typeof limit === 'number') {\n        params.limit = limit.toString();\n      }\n    }\n\n    const response = await this.api.get(\n      { path: 'repos/branches', params },\n      jwt\n    );\n\n    const raw = listBranchesResponseSchema.parse(await response.json());\n    return transformListBranchesResult({\n      ...raw,\n      next_cursor: raw.next_cursor ?? undefined,\n    });\n  }\n\n  async listTags(options?: ListTagsOptions): Promise<ListTagsResult> {\n    const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n    const jwt = await this.generateJWT(this.id, {\n      permissions: ['git:read'],\n      ttl,\n    });\n\n    const cursor = options?.cursor;\n    const limit = options?.limit;\n\n    let params: Record<string, string> | undefined;\n\n    if (typeof cursor === 'string' || typeof limit === 'number') {\n      params = {};\n      if (typeof cursor === 'string') {\n        params.cursor = cursor;\n      }\n      if (typeof limit === 'number') {\n        params.limit = limit.toString();\n      }\n    }\n\n    const response = await this.api.get({ path: 'repos/tags', params }, jwt);\n    const raw = listTagsResponseSchema.parse(await response.json());\n    return transformListTagsResult({\n      ...raw,\n      next_cursor: raw.next_cursor ?? undefined,\n    });\n  }\n\n  async listCommits(options?: ListCommitsOptions): Promise<ListCommitsResult> {\n    const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n    const jwt = await this.generateJWT(this.id, {\n      permissions: ['git:read'],\n      ttl,\n    });\n\n    let params: Record<string, string> | undefined;\n\n    if (options?.branch || options?.cursor || options?.limit) {\n      params = {};\n      if (options?.branch) {\n        params.branch = options.branch;\n      }\n      if (options?.cursor) {\n        params.cursor = options.cursor;\n      }\n      if (typeof options?.limit == 'number') {\n        params.limit = options.limit.toString();\n      }\n    }\n\n    const response = await this.api.get({ path: 'repos/commits', params }, jwt);\n\n    const raw = listCommitsResponseSchema.parse(await response.json());\n    return transformListCommitsResult({\n      ...raw,\n      next_cursor: raw.next_cursor ?? undefined,\n    });\n  }\n\n  async getNote(options: GetNoteOptions): Promise<GetNoteResult> {\n    const sha = options?.sha?.trim();\n    if (!sha) {\n      throw new Error('getNote sha is required');\n    }\n\n    const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n    const jwt = await this.generateJWT(this.id, {\n      permissions: ['git:read'],\n      ttl,\n    });\n\n    const response = await this.api.get(\n      { path: 'repos/notes', params: { sha } },\n      jwt\n    );\n    const raw = noteReadResponseSchema.parse(await response.json());\n    return transformNoteReadResult(raw);\n  }\n\n  async createNote(options: CreateNoteOptions): Promise<NoteWriteResult> {\n    const sha = options?.sha?.trim();\n    if (!sha) {\n      throw new Error('createNote sha is required');\n    }\n\n    const note = options?.note?.trim();\n    if (!note) {\n      throw new Error('createNote note is required');\n    }\n\n    const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n    const jwt = await this.generateJWT(this.id, {\n      permissions: ['git:write'],\n      ttl,\n    });\n\n    const body = buildNoteWriteBody(sha, note, 'add', {\n      expectedRefSha: options.expectedRefSha,\n      author: options.author,\n    });\n\n    const response = await this.api.post({ path: 'repos/notes', body }, jwt, {\n      allowedStatus: [...NOTE_WRITE_ALLOWED_STATUS],\n    });\n\n    const result = await parseNoteWriteResponse(response, 'POST');\n    if (!result.result.success) {\n      throw new RefUpdateError(\n        result.result.message ??\n          `createNote failed with status ${result.result.status}`,\n        {\n          status: result.result.status,\n          message: result.result.message,\n          refUpdate: toPartialRefUpdate(\n            result.targetRef,\n            result.baseCommit,\n            result.newRefSha\n          ),\n        }\n      );\n    }\n    return result;\n  }\n\n  async appendNote(options: AppendNoteOptions): Promise<NoteWriteResult> {\n    const sha = options?.sha?.trim();\n    if (!sha) {\n      throw new Error('appendNote sha is required');\n    }\n\n    const note = options?.note?.trim();\n    if (!note) {\n      throw new Error('appendNote note is required');\n    }\n\n    const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n    const jwt = await this.generateJWT(this.id, {\n      permissions: ['git:write'],\n      ttl,\n    });\n\n    const body = buildNoteWriteBody(sha, note, 'append', {\n      expectedRefSha: options.expectedRefSha,\n      author: options.author,\n    });\n\n    const response = await this.api.post({ path: 'repos/notes', body }, jwt, {\n      allowedStatus: [...NOTE_WRITE_ALLOWED_STATUS],\n    });\n\n    const result = await parseNoteWriteResponse(response, 'POST');\n    if (!result.result.success) {\n      throw new RefUpdateError(\n        result.result.message ??\n          `appendNote failed with status ${result.result.status}`,\n        {\n          status: result.result.status,\n          message: result.result.message,\n          refUpdate: toPartialRefUpdate(\n            result.targetRef,\n            result.baseCommit,\n            result.newRefSha\n          ),\n        }\n      );\n    }\n    return result;\n  }\n\n  async deleteNote(options: DeleteNoteOptions): Promise<NoteWriteResult> {\n    const sha = options?.sha?.trim();\n    if (!sha) {\n      throw new Error('deleteNote sha is required');\n    }\n\n    const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n    const jwt = await this.generateJWT(this.id, {\n      permissions: ['git:write'],\n      ttl,\n    });\n\n    const body: Record<string, unknown> = {\n      sha,\n    };\n\n    const expectedRefSha = options.expectedRefSha?.trim();\n    if (expectedRefSha) {\n      body.expected_ref_sha = expectedRefSha;\n    }\n\n    if (options.author) {\n      const authorName = options.author.name?.trim();\n      const authorEmail = options.author.email?.trim();\n      if (!authorName || !authorEmail) {\n        throw new Error(\n          'deleteNote author name and email are required when provided'\n        );\n      }\n      body.author = {\n        name: authorName,\n        email: authorEmail,\n      };\n    }\n\n    const response = await this.api.delete({ path: 'repos/notes', body }, jwt, {\n      allowedStatus: [...NOTE_WRITE_ALLOWED_STATUS],\n    });\n\n    const result = await parseNoteWriteResponse(response, 'DELETE');\n    if (!result.result.success) {\n      throw new RefUpdateError(\n        result.result.message ??\n          `deleteNote failed with status ${result.result.status}`,\n        {\n          status: result.result.status,\n          message: result.result.message,\n          refUpdate: toPartialRefUpdate(\n            result.targetRef,\n            result.baseCommit,\n            result.newRefSha\n          ),\n        }\n      );\n    }\n    return result;\n  }\n\n  async getBranchDiff(\n    options: GetBranchDiffOptions\n  ): Promise<GetBranchDiffResult> {\n    const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n    const jwt = await this.generateJWT(this.id, {\n      permissions: ['git:read'],\n      ttl,\n    });\n\n    const params: Record<string, string | string[]> = {\n      branch: options.branch,\n    };\n\n    if (options.base) {\n      params.base = options.base;\n    }\n    if (typeof options.ephemeral === 'boolean') {\n      params.ephemeral = String(options.ephemeral);\n    }\n    if (typeof options.ephemeralBase === 'boolean') {\n      params.ephemeral_base = String(options.ephemeralBase);\n    }\n    if (options.paths && options.paths.length > 0) {\n      params.path = options.paths;\n    }\n\n    const response = await this.api.get(\n      { path: 'repos/branches/diff', params },\n      jwt\n    );\n\n    const raw = branchDiffResponseSchema.parse(await response.json());\n    return transformBranchDiffResult(raw);\n  }\n\n  async getCommitDiff(\n    options: GetCommitDiffOptions\n  ): Promise<GetCommitDiffResult> {\n    const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n    const jwt = await this.generateJWT(this.id, {\n      permissions: ['git:read'],\n      ttl,\n    });\n\n    const params: Record<string, string | string[]> = {\n      sha: options.sha,\n    };\n\n    if (options.baseSha) {\n      params.baseSha = options.baseSha;\n    }\n    if (options.paths && options.paths.length > 0) {\n      params.path = options.paths;\n    }\n\n    const response = await this.api.get({ path: 'repos/diff', params }, jwt);\n\n    const raw = commitDiffResponseSchema.parse(await response.json());\n    return transformCommitDiffResult(raw);\n  }\n\n  async grep(options: GrepOptions): Promise<GrepResult> {\n    const pattern = options?.query?.pattern?.trim();\n    if (!pattern) {\n      throw new Error('grep query.pattern is required');\n    }\n\n    const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n    const jwt = await this.generateJWT(this.id, {\n      permissions: ['git:read'],\n      ttl,\n    });\n\n    const body: Record<string, unknown> = {\n      query: {\n        pattern,\n        ...(typeof options.query.caseSensitive === 'boolean'\n          ? { case_sensitive: options.query.caseSensitive }\n          : {}),\n      },\n    };\n\n    const ref = options.ref?.trim() || options.rev?.trim();\n    if (ref) {\n      body.ref = ref;\n    }\n    if (Array.isArray(options.paths) && options.paths.length > 0) {\n      body.paths = options.paths;\n    }\n    if (options.fileFilters) {\n      body.file_filters = {\n        ...(options.fileFilters.includeGlobs\n          ? { include_globs: options.fileFilters.includeGlobs }\n          : {}),\n        ...(options.fileFilters.excludeGlobs\n          ? { exclude_globs: options.fileFilters.excludeGlobs }\n          : {}),\n        ...(options.fileFilters.extensionFilters\n          ? { extension_filters: options.fileFilters.extensionFilters }\n          : {}),\n      };\n    }\n    if (options.context) {\n      body.context = {\n        ...(typeof options.context.before === 'number'\n          ? { before: options.context.before }\n          : {}),\n        ...(typeof options.context.after === 'number'\n          ? { after: options.context.after }\n          : {}),\n      };\n    }\n    if (options.limits) {\n      body.limits = {\n        ...(typeof options.limits.maxLines === 'number'\n          ? { max_lines: options.limits.maxLines }\n          : {}),\n        ...(typeof options.limits.maxMatchesPerFile === 'number'\n          ? { max_matches_per_file: options.limits.maxMatchesPerFile }\n          : {}),\n      };\n    }\n    if (options.pagination) {\n      body.pagination = {\n        ...(typeof options.pagination.cursor === 'string' &&\n        options.pagination.cursor.trim() !== ''\n          ? { cursor: options.pagination.cursor }\n          : {}),\n        ...(typeof options.pagination.limit === 'number'\n          ? { limit: options.pagination.limit }\n          : {}),\n      };\n    }\n\n    const response = await this.api.post({ path: 'repos/grep', body }, jwt);\n    const raw = grepResponseSchema.parse(await response.json());\n\n    return {\n      query: {\n        pattern: raw.query.pattern,\n        caseSensitive: raw.query.case_sensitive,\n      },\n      repo: {\n        ref: raw.repo.ref,\n        commit: raw.repo.commit,\n      },\n      matches: raw.matches.map(transformGrepFileMatch),\n      nextCursor: raw.next_cursor ?? undefined,\n      hasMore: raw.has_more,\n    };\n  }\n\n  async pullUpstream(options: PullUpstreamOptions = {}): Promise<void> {\n    const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n    const jwt = await this.generateJWT(this.id, {\n      permissions: ['git:write'],\n      ttl,\n    });\n\n    const body: Record<string, string> = {};\n\n    if (options.ref) {\n      body.ref = options.ref;\n    }\n\n    const response = await this.api.post(\n      { path: 'repos/pull-upstream', body },\n      jwt\n    );\n\n    if (response.status !== 202) {\n      throw new Error(\n        `Pull Upstream failed: ${response.status} ${await response.text()}`\n      );\n    }\n\n    return;\n  }\n\n  async createBranch(\n    options: CreateBranchOptions\n  ): Promise<CreateBranchResult> {\n    const baseBranch = options?.baseBranch?.trim();\n    if (!baseBranch) {\n      throw new Error('createBranch baseBranch is required');\n    }\n    const targetBranch = options?.targetBranch?.trim();\n    if (!targetBranch) {\n      throw new Error('createBranch targetBranch is required');\n    }\n\n    const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n    const jwt = await this.generateJWT(this.id, {\n      permissions: ['git:write'],\n      ttl,\n    });\n\n    const body: Record<string, unknown> = {\n      base_branch: baseBranch,\n      target_branch: targetBranch,\n    };\n\n    if (options.baseIsEphemeral === true) {\n      body.base_is_ephemeral = true;\n    }\n    if (options.targetIsEphemeral === true) {\n      body.target_is_ephemeral = true;\n    }\n\n    const response = await this.api.post(\n      { path: 'repos/branches/create', body },\n      jwt\n    );\n    const raw = createBranchResponseSchema.parse(await response.json());\n    return transformCreateBranchResult(raw);\n  }\n\n  async createTag(options: CreateTagOptions): Promise<CreateTagResult> {\n    const name = options?.name?.trim();\n    if (!name) {\n      throw new Error('createTag name is required');\n    }\n    if (name.startsWith('refs/')) {\n      throw new Error('createTag name must not start with refs/');\n    }\n\n    const target = options?.target?.trim();\n    if (!target) {\n      throw new Error('createTag target is required');\n    }\n\n    const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n    const jwt = await this.generateJWT(this.id, {\n      permissions: ['git:write'],\n      ttl,\n    });\n\n    const response = await this.api.post(\n      { path: 'repos/tags', body: { name, target } },\n      jwt\n    );\n    const raw = createTagResponseSchema.parse(await response.json());\n    return transformCreateTagResult(raw);\n  }\n\n  async deleteTag(options: DeleteTagOptions): Promise<DeleteTagResult> {\n    const name = options?.name?.trim();\n    if (!name) {\n      throw new Error('deleteTag name is required');\n    }\n    if (name.startsWith('refs/')) {\n      throw new Error('deleteTag name must not start with refs/');\n    }\n\n    const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n    const jwt = await this.generateJWT(this.id, {\n      permissions: ['git:read', 'git:write'],\n      ttl,\n    });\n\n    const response = await this.api.delete(\n      { path: 'repos/tags', body: { name } },\n      jwt\n    );\n    const raw = deleteTagResponseSchema.parse(await response.json());\n    return transformDeleteTagResult(raw);\n  }\n\n  async restoreCommit(\n    options: RestoreCommitOptions\n  ): Promise<RestoreCommitResult> {\n    const targetBranch = options?.targetBranch?.trim();\n    if (!targetBranch) {\n      throw new Error('restoreCommit targetBranch is required');\n    }\n    if (targetBranch.startsWith('refs/')) {\n      throw new Error(\n        'restoreCommit targetBranch must not include refs/ prefix'\n      );\n    }\n\n    const targetCommitSha = options?.targetCommitSha?.trim();\n    if (!targetCommitSha) {\n      throw new Error('restoreCommit targetCommitSha is required');\n    }\n    const commitMessage = options?.commitMessage?.trim();\n\n    const authorName = options.author?.name?.trim();\n    const authorEmail = options.author?.email?.trim();\n    if (!authorName || !authorEmail) {\n      throw new Error('restoreCommit author name and email are required');\n    }\n\n    const ttl = resolveCommitTtlSeconds(options);\n    const jwt = await this.generateJWT(this.id, {\n      permissions: ['git:write'],\n      ttl,\n    });\n\n    const metadata: Record<string, unknown> = {\n      target_branch: targetBranch,\n      target_commit_sha: targetCommitSha,\n      author: {\n        name: authorName,\n        email: authorEmail,\n      },\n    };\n\n    if (commitMessage) {\n      metadata.commit_message = commitMessage;\n    }\n\n    const expectedHeadSha = options.expectedHeadSha?.trim();\n    if (expectedHeadSha) {\n      metadata.expected_head_sha = expectedHeadSha;\n    }\n\n    if (options.committer) {\n      const committerName = options.committer.name?.trim();\n      const committerEmail = options.committer.email?.trim();\n      if (!committerName || !committerEmail) {\n        throw new Error(\n          'restoreCommit committer name and email are required when provided'\n        );\n      }\n      metadata.committer = {\n        name: committerName,\n        email: committerEmail,\n      };\n    }\n\n    const response = await this.api.post(\n      { path: 'repos/restore-commit', body: { metadata } },\n      jwt,\n      {\n        allowedStatus: [...RESTORE_COMMIT_ALLOWED_STATUS],\n      }\n    );\n\n    const payload = await response.json();\n    const parsed = parseRestoreCommitPayload(payload);\n    if (parsed && 'ack' in parsed) {\n      return buildRestoreCommitResult(parsed.ack);\n    }\n\n    const failure = parsed && 'failure' in parsed ? parsed.failure : undefined;\n    const status =\n      failure?.status ?? httpStatusToRestoreStatus(response.status);\n    const message =\n      failure?.message ??\n      `Restore commit failed with HTTP ${response.status}` +\n        (response.statusText ? ` ${response.statusText}` : '');\n\n    throw new RefUpdateError(message, {\n      status,\n      refUpdate: failure?.refUpdate,\n    });\n  }\n\n  createCommit(options: CreateCommitOptions): CommitBuilder {\n    const version = this.options.apiVersion ?? API_VERSION;\n    const baseUrl =\n      this.options.apiBaseUrl ??\n      GitStorage.getDefaultAPIBaseUrl(this.options.name);\n    const transport = new FetchCommitTransport({ baseUrl, version });\n    const ttl = resolveCommitTtlSeconds(options);\n    const builderOptions: CreateCommitOptions = {\n      ...options,\n      ttl,\n    };\n    const getAuthToken = () =>\n      this.generateJWT(this.id, {\n        permissions: ['git:write'],\n        ttl,\n      });\n\n    return createCommitBuilder({\n      options: builderOptions,\n      getAuthToken,\n      transport,\n    });\n  }\n\n  async createCommitFromDiff(\n    options: CreateCommitFromDiffOptions\n  ): Promise<CommitResult> {\n    const version = this.options.apiVersion ?? API_VERSION;\n    const baseUrl =\n      this.options.apiBaseUrl ??\n      GitStorage.getDefaultAPIBaseUrl(this.options.name);\n    const transport = new FetchDiffCommitTransport({ baseUrl, version });\n    const ttl = resolveCommitTtlSeconds(options);\n    const requestOptions: CreateCommitFromDiffOptions = {\n      ...options,\n      ttl,\n    };\n    const getAuthToken = () =>\n      this.generateJWT(this.id, {\n        permissions: ['git:write'],\n        ttl,\n      });\n\n    return sendCommitFromDiff({\n      options: requestOptions,\n      getAuthToken,\n      transport,\n    });\n  }\n}\n\nexport class GitStorage {\n  private options: GitStorageOptions;\n  private api: ApiFetcher;\n\n  constructor(options: GitStorageOptions) {\n    if (\n      !options ||\n      options.name === undefined ||\n      options.key === undefined ||\n      options.name === null ||\n      options.key === null\n    ) {\n      throw new Error(\n        'GitStorage requires a name and key. Please check your configuration and try again.'\n      );\n    }\n\n    if (typeof options.name !== 'string' || options.name.trim() === '') {\n      throw new Error('GitStorage name must be a non-empty string.');\n    }\n\n    if (typeof options.key !== 'string' || options.key.trim() === '') {\n      throw new Error('GitStorage key must be a non-empty string.');\n    }\n\n    const resolvedApiBaseUrl =\n      options.apiBaseUrl ?? GitStorage.getDefaultAPIBaseUrl(options.name);\n    const resolvedApiVersion = options.apiVersion ?? API_VERSION;\n    const resolvedStorageBaseUrl =\n      options.storageBaseUrl ??\n      GitStorage.getDefaultStorageBaseUrl(options.name);\n    const resolvedDefaultTtl = options.defaultTTL;\n\n    this.api = getApiInstance(resolvedApiBaseUrl, resolvedApiVersion);\n\n    this.options = {\n      key: options.key,\n      name: options.name,\n      apiBaseUrl: resolvedApiBaseUrl,\n      apiVersion: resolvedApiVersion,\n      storageBaseUrl: resolvedStorageBaseUrl,\n      defaultTTL: resolvedDefaultTtl,\n    };\n  }\n\n  static getDefaultAPIBaseUrl(name: string): string {\n    return API_BASE_URL.replace('{{org}}', name);\n  }\n\n  static getDefaultStorageBaseUrl(name: string): string {\n    return STORAGE_BASE_URL.replace('{{org}}', name);\n  }\n\n  /**\n   * Create a new repository\n   * @returns The created repository\n   */\n  async createRepo(options?: CreateRepoOptions): Promise<Repo> {\n    const repoId = options?.id || crypto.randomUUID();\n    const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n    const jwt = await this.generateJWT(repoId, {\n      permissions: ['repo:write'],\n      ttl,\n    });\n\n    const baseRepo = options?.baseRepo;\n    const isFork = baseRepo ? 'id' in baseRepo : false;\n    let baseRepoOptions: Record<string, unknown> | null = null;\n    let resolvedDefaultBranch: string | undefined;\n\n    if (baseRepo) {\n      if ('id' in baseRepo) {\n        const baseRepoToken = await this.generateJWT(baseRepo.id, {\n          permissions: ['git:read'],\n          ttl,\n        });\n        baseRepoOptions = {\n          provider: 'code',\n          owner: this.options.name,\n          name: baseRepo.id,\n          operation: 'fork',\n          auth: { token: baseRepoToken },\n          ...(baseRepo.ref ? { ref: baseRepo.ref } : {}),\n          ...(baseRepo.sha ? { sha: baseRepo.sha } : {}),\n        };\n      } else {\n        // Sync base repo: GitHub or generic git provider (gitlab, bitbucket, etc.)\n        const syncRepo = baseRepo as GitHubBaseRepo | GenericGitBaseRepo;\n        const { provider: _p, ...restSnakecased } = snakecaseKeys(\n          baseRepo as unknown as Record<string, unknown>\n        ) as Record<string, unknown>;\n        baseRepoOptions = {\n          provider: syncRepo.provider ?? 'github',\n          ...restSnakecased,\n        };\n        resolvedDefaultBranch = syncRepo.defaultBranch;\n      }\n    }\n\n    // Match backend priority: baseRepo.defaultBranch > options.defaultBranch > 'main'\n    if (!resolvedDefaultBranch) {\n      if (options?.defaultBranch) {\n        resolvedDefaultBranch = options.defaultBranch;\n      } else if (!isFork) {\n        resolvedDefaultBranch = 'main';\n      }\n    }\n\n    const createRepoPath =\n      baseRepoOptions || resolvedDefaultBranch\n        ? {\n            path: 'repos',\n            body: {\n              ...(baseRepoOptions && { base_repo: baseRepoOptions }),\n              ...(resolvedDefaultBranch && {\n                default_branch: resolvedDefaultBranch,\n              }),\n            },\n          }\n        : 'repos';\n\n    // Allow 409 so we can map it to a clearer error message\n    const resp = await this.api.post(createRepoPath, jwt, {\n      allowedStatus: [409],\n    });\n    if (resp.status === 409) {\n      throw new Error('Repository already exists');\n    }\n\n    return this.repo({\n      id: repoId,\n      defaultBranch: resolvedDefaultBranch ?? 'main',\n      createdAt: new Date().toISOString(),\n    });\n  }\n\n  /**\n   * List repositories for the authenticated organization\n   * @returns Paginated repositories list\n   */\n  async listRepos(options?: ListReposOptions): Promise<ListReposResult> {\n    const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n    const jwt = await this.generateJWT('org', {\n      permissions: ['org:read'],\n      ttl,\n    });\n\n    let params: Record<string, string> | undefined;\n    if (options?.cursor || typeof options?.limit === 'number') {\n      params = {};\n      if (options.cursor) {\n        params.cursor = options.cursor;\n      }\n      if (typeof options.limit === 'number') {\n        params.limit = options.limit.toString();\n      }\n    }\n\n    const response = await this.api.get({ path: 'repos', params }, jwt);\n    const raw = listReposResponseSchema.parse(await response.json());\n    return transformListReposResult({\n      ...raw,\n      next_cursor: raw.next_cursor ?? undefined,\n    });\n  }\n\n  /**\n   * Find a repository by ID\n   * @param options The search options\n   * @returns The found repository\n   */\n  async findOne(options: FindOneOptions): Promise<Repo | null> {\n    const jwt = await this.generateJWT(options.id, {\n      permissions: ['git:read'],\n      ttl: DEFAULT_TOKEN_TTL_SECONDS,\n    });\n\n    // Allow 404 to indicate \"not found\" without throwing\n    const resp = await this.api.get('repo', jwt, { allowedStatus: [404] });\n    if (resp.status === 404) {\n      return null;\n    }\n\n    const body = (await resp.json()) as {\n      default_branch?: string;\n      created_at?: string;\n    };\n    const defaultBranch = body.default_branch ?? 'main';\n    const createdAt = body.created_at ?? '';\n\n    return this.repo({\n      id: options.id,\n      defaultBranch,\n      createdAt,\n    });\n  }\n\n  /**\n   * Create a Repo handle from known metadata without making an HTTP request.\n   */\n  repo(options: RepoOptions): Repo {\n    if (!options || typeof options.id !== 'string' || options.id.trim() === '') {\n      throw new Error('repo requires a non-empty repository id.');\n    }\n\n    return new RepoImpl(\n      options.id,\n      options.defaultBranch ?? 'main',\n      options.createdAt ?? '',\n      this.options,\n      this.generateJWT.bind(this)\n    );\n  }\n\n  /**\n   * Delete a repository by ID\n   * @param options The delete options containing the repo ID\n   * @returns The deletion result\n   */\n  async deleteRepo(options: DeleteRepoOptions): Promise<DeleteRepoResult> {\n    const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n    const jwt = await this.generateJWT(options.id, {\n      permissions: ['repo:write'],\n      ttl,\n    });\n\n    // Allow 404 and 409 for clearer error handling\n    const resp = await this.api.delete('repos/delete', jwt, {\n      allowedStatus: [404, 409],\n    });\n    if (resp.status === 404) {\n      throw new Error('Repository not found');\n    }\n    if (resp.status === 409) {\n      throw new Error('Repository already deleted');\n    }\n\n    const body = (await resp.json()) as { repo_id: string; message: string };\n    return {\n      repoId: body.repo_id,\n      message: body.message,\n    };\n  }\n\n  /**\n   * Create a generic git credential for a repository.\n   * Used to authenticate sync operations for non-GitHub providers (GitLab, Bitbucket, etc.)\n   */\n  async createGitCredential(\n    options: CreateGitCredentialOptions\n  ): Promise<GitCredential> {\n    const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n    const jwt = await this.generateJWT(options.repoId, {\n      permissions: ['repo:write'],\n      ttl,\n    });\n\n    const body: Record<string, unknown> = {\n      repo_id: options.repoId,\n      password: options.password,\n    };\n    if (options.username !== undefined) {\n      body.username = options.username;\n    }\n\n    const resp = await this.api.post(\n      { path: 'repos/git-credentials', body },\n      jwt,\n      { allowedStatus: [409] }\n    );\n    if (resp.status === 409) {\n      throw new Error('A credential already exists for this repository');\n    }\n\n    const data = (await resp.json()) as { id: string };\n    return { id: data.id };\n  }\n\n  /**\n   * Update an existing generic git credential.\n   */\n  async updateGitCredential(\n    options: UpdateGitCredentialOptions\n  ): Promise<GitCredential> {\n    const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n    const jwt = await this.generateJWT('org', {\n      permissions: ['repo:write'],\n      ttl,\n    });\n\n    const body: Record<string, unknown> = {\n      id: options.id,\n      password: options.password,\n    };\n    if (options.username !== undefined) {\n      body.username = options.username;\n    }\n\n    const resp = await this.api.put(\n      { path: 'repos/git-credentials', body },\n      jwt,\n      { allowedStatus: [404] }\n    );\n    if (resp.status === 404) {\n      throw new Error('Credential not found');\n    }\n\n    const data = (await resp.json()) as { id: string; created_at?: string };\n    return {\n      id: data.id,\n      ...(data.created_at ? { createdAt: data.created_at } : {}),\n    };\n  }\n\n  /**\n   * Delete a generic git credential.\n   */\n  async deleteGitCredential(options: DeleteGitCredentialOptions): Promise<void> {\n    const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n    const jwt = await this.generateJWT('org', {\n      permissions: ['repo:write'],\n      ttl,\n    });\n\n    const resp = await this.api.delete(\n      { path: 'repos/git-credentials', body: { id: options.id } },\n      jwt,\n      { allowedStatus: [404] }\n    );\n    if (resp.status === 404) {\n      throw new Error('Credential not found');\n    }\n  }\n\n  /**\n   * Get the current configuration\n   * @returns The client configuration\n   */\n  getConfig(): GitStorageOptions {\n    return { ...this.options };\n  }\n\n  /**\n   * Generate a JWT token for git storage URL authentication\n   * @private\n   */\n  private async generateJWT(\n    repoId: string,\n    options?: GetRemoteURLOptions\n  ): Promise<string> {\n    // Default permissions and TTL\n    const permissions = options?.permissions || ['git:write', 'git:read'];\n    const ttl = resolveInvocationTtlSeconds(\n      options,\n      this.options.defaultTTL ?? 365 * 24 * 60 * 60\n    );\n\n    // Create the JWT payload\n    const now = Math.floor(Date.now() / 1000);\n    const payload = {\n      iss: this.options.name,\n      sub: '@pierre/storage',\n      repo: repoId,\n      scopes: permissions,\n      iat: now,\n      exp: now + ttl,\n      ...(options?.ops && options.ops.length > 0 ? { ops: options.ops } : {}),\n    };\n\n    // Sign the JWT with the key as the secret\n    // Using HS256 for symmetric signing with the key\n    const key = await importPKCS8(this.options.key, 'ES256');\n    // Sign the JWT with the key as the secret\n    const jwt = await new SignJWT(payload)\n      .setProtectedHeader({ alg: 'ES256', typ: 'JWT' })\n      .sign(key);\n\n    return jwt;\n  }\n}\n\n// Export a default client factory\nexport function createClient(options: GitStorageOptions): GitStorage {\n  return new GitStorage(options);\n}\n\n// Export CodeStorage as an alias for GitStorage\nexport { GitStorage as CodeStorage };\n\n// Type alias for backward compatibility\nexport type StorageOptions = GitStorageOptions;\n"]}