{"version":3,"sources":["../../src/errors/errors.ts","../../src/client/baseClient.ts","../../src/utils/authenticationMethodInfo.ts","../../src/api/activeSessionsClient.ts","../../src/api/authClient.ts","../../src/api/certificatesClient.ts","../../src/utils/crc8.ts","../../src/utils/ksefNumber.ts","../../src/utils/collectiveIdentifier.ts","../../src/api/collectiveIdentifiersClient.ts","../../src/types/invoices.ts","../../src/api/invoicesClient.ts","../../src/api/lighthouseClient.ts","../../src/api/limitsClient.ts","../../src/api/peppolClient.ts","../../src/api/permissionsClient.ts","../../src/api/securityClient.ts","../../src/api/sessionsClient.ts","../../src/utils/certificateSerial.ts","../../src/api/testdataClient.ts","../../src/api/tokensClient.ts","../../src/utils/base64url.ts","../../src/crypto/cryptographyService.ts","../../src/services/authXml.ts","../../src/services/xades.ts","../../src/services/authCoordinator.ts","../../src/xml/xml.ts","../../src/xml/pef.ts","../../src/xml/invoice.ts","../../src/xml/upo.ts","../../src/utils/zip.ts","../../src/utils/buffer.ts","../../src/services/batchSessionWorkflow.ts","../../src/services/hwmCoordinator.ts","../../src/services/incrementalExportWorkflow.ts","../../src/services/invoiceExportWorkflow.ts","../../src/services/offlineInvoiceWorkflow.ts","../../src/services/onlineSessionWorkflow.ts","../../src/services/personTokenService.ts","../../src/services/qrCodeService.ts","../../src/services/verificationLinkService.ts","../../src/client/presignedUrlPolicy.ts","../../src/client/httpClient.ts","../../src/utils/jwt.ts","../../src/client/authManager.ts","../../src/types/common.ts","../../src/client/ksefClient.ts","../../src/cli/args.ts","../../src/cli/configStore.ts","../../src/cli/formCodes.ts","../../src/cli/sessionStore.ts","../../src/cli/tokenStore.ts","../../src/cli/index.ts"],"names":["year","month","day","path","crypto","xmlCrypto","DOMParser","xpath","XMLParser","XMLBuilder","document","DEFAULT_NAMESPACE","ZipFile","fromBuffer","gunzipSync","validateEncryptionData","isIP","isPlainObject","Headers","fetch","ProxyAgent","trimTrailingSlash","key","os","readFile","mkdir","writeFile","randomUUID","rename","unlink","stat","readdir","zipBytes","pathToFileURL"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n  BadRequestProblemDetails,\n  ExceptionResponse,\n  ForbiddenProblemDetails,\n  GoneProblemDetails,\n  TooManyRequestsProblemDetails,\n  TooManyRequestsResponse,\n  UnauthorizedProblemDetails,\n} from \"../types/openapi.generated\";\n\nexport interface UnknownApiProblem {\n  detail?: string;\n  raw: Record<string, unknown>;\n  status: number;\n  title: string;\n}\n\nexport type KsefApiProblem =\n  | BadRequestProblemDetails\n  | ExceptionResponse\n  | ForbiddenProblemDetails\n  | GoneProblemDetails\n  | TooManyRequestsProblemDetails\n  | TooManyRequestsResponse\n  | UnauthorizedProblemDetails\n  | UnknownApiProblem;\n\nexport class KsefError extends Error {\n  override name = \"KsefError\";\n\n  constructor(message: string) {\n    super(message);\n  }\n}\n\nexport class KsefHttpError extends KsefError {\n  override name = \"KsefHttpError\";\n  readonly problem: KsefApiProblem | undefined;\n  readonly statusCode: number;\n  readonly responseBody: string | undefined;\n\n  constructor(\n    statusCode: number,\n    message: string,\n    responseBody?: string,\n    problem?: KsefApiProblem,\n  ) {\n    super(message);\n    this.problem = problem;\n    this.statusCode = statusCode;\n    this.responseBody = responseBody;\n  }\n}\n\nexport class KsefApiError extends KsefError {\n  override name = \"KsefApiError\";\n  readonly problem: KsefApiProblem | undefined;\n  readonly statusCode: number;\n  readonly responseBody: unknown | undefined;\n\n  constructor(\n    statusCode: number,\n    message: string,\n    responseBody: unknown,\n    problem?: KsefApiProblem,\n  ) {\n    super(message);\n    this.problem = problem;\n    this.statusCode = statusCode;\n    this.responseBody = responseBody;\n  }\n}\n\nexport class KsefRateLimitError extends KsefApiError {\n  override name = \"KsefRateLimitError\";\n  readonly retryAfter: string | undefined;\n  readonly retryAfterSeconds: number | undefined;\n\n  constructor(\n    statusCode: number,\n    message: string,\n    responseBody: unknown,\n    retryAfter?: string,\n    retryAfterSeconds?: number,\n    problem?: KsefApiProblem,\n  ) {\n    super(statusCode, message, responseBody, problem);\n    this.retryAfter = retryAfter;\n    this.retryAfterSeconds = retryAfterSeconds;\n  }\n}\n\nexport class KsefAuthStatusError extends KsefApiError {\n  override name = \"KsefAuthStatusError\";\n  readonly statusDetails: string[] | undefined;\n\n  constructor(\n    statusCode: number,\n    message: string,\n    responseBody: unknown,\n    statusDetails?: string[],\n    problem?: KsefApiProblem,\n  ) {\n    super(statusCode, message, responseBody, problem);\n    this.statusDetails = statusDetails;\n  }\n}\n\nexport class KsefSessionExpiredError extends KsefError {\n  override name = \"KsefSessionExpiredError\";\n}\n\nexport class KsefValidationError extends KsefError {\n  override name = \"KsefValidationError\";\n  readonly details: string[] | undefined;\n\n  constructor(message: string, details?: string[]) {\n    super(message);\n    this.details = details;\n  }\n}\n","import { KsefSessionExpiredError } from \"../errors/errors\";\nimport { HttpClient } from \"./httpClient\";\n\nexport class BaseClient {\n  protected readonly http: HttpClient;\n  protected readonly accessTokenProvider: (() => Promise<string | null>) | undefined;\n\n  constructor(http: HttpClient, accessTokenProvider?: () => Promise<string | null>) {\n    this.http = http;\n    this.accessTokenProvider = accessTokenProvider;\n  }\n\n  protected async getAccessToken(): Promise<string> {\n    if (!this.accessTokenProvider) {\n      throw new KsefSessionExpiredError(\"Access token provider is missing.\");\n    }\n    const token = await this.accessTokenProvider();\n    if (!token) {\n      throw new KsefSessionExpiredError(\"Access token is missing.\");\n    }\n    return token;\n  }\n}\n","import {\n  AuthenticationListItem,\n  AuthenticationListResponse,\n  AuthenticationMethod,\n  AuthenticationMethodCategory,\n  AuthenticationMethodInfo,\n  AuthenticationOperationStatusResponse,\n} from \"../types/common\";\n\nconst AUTHENTICATION_METHOD_CATEGORIES: ReadonlySet<AuthenticationMethodCategory> = new Set([\n  \"XadesSignature\",\n  \"NationalNode\",\n  \"Token\",\n  \"Other\",\n]);\n\nconst LEGACY_METHOD_INFO_FALLBACKS: Record<AuthenticationMethod, AuthenticationMethodInfo> = {\n  Token: {\n    category: \"Token\",\n    code: \"Token\",\n    displayName: \"Token KSeF\",\n  },\n  TrustedProfile: {\n    category: \"NationalNode\",\n    code: \"TrustedProfile\",\n    displayName: \"Profil Zaufany / Węzeł Krajowy\",\n  },\n  InternalCertificate: {\n    category: \"Other\",\n    code: \"InternalCertificate\",\n    displayName: \"Certyfikat KSeF\",\n  },\n  QualifiedSignature: {\n    category: \"Other\",\n    code: \"QualifiedSignature\",\n    displayName: \"Podpis kwalifikowany\",\n  },\n  QualifiedSeal: {\n    category: \"Other\",\n    code: \"QualifiedSeal\",\n    displayName: \"Pieczęć kwalifikowana\",\n  },\n  PersonalSignature: {\n    category: \"Other\",\n    code: \"PersonalSignature\",\n    displayName: \"Podpis osobisty\",\n  },\n  PeppolSignature: {\n    category: \"Other\",\n    code: \"PeppolSignature\",\n    displayName: \"Podpis dostawcy usług Peppol\",\n  },\n};\n\nexport function normalizeAuthenticationOperationStatusResponse(\n  response: AuthenticationOperationStatusResponse,\n): AuthenticationOperationStatusResponse {\n  return {\n    ...response,\n    authenticationMethodInfo: ensureAuthenticationMethodInfo(\n      response.authenticationMethodInfo,\n      response.authenticationMethod,\n    ),\n  };\n}\n\nexport function normalizeAuthenticationListResponse(\n  response: AuthenticationListResponse,\n): AuthenticationListResponse {\n  const items = Array.isArray(response.items) ? response.items : [];\n  return {\n    ...response,\n    items: items.map(normalizeAuthenticationListItem),\n  };\n}\n\nfunction normalizeAuthenticationListItem(item: AuthenticationListItem): AuthenticationListItem {\n  return {\n    ...item,\n    authenticationMethodInfo: ensureAuthenticationMethodInfo(\n      item.authenticationMethodInfo,\n      item.authenticationMethod,\n    ),\n  };\n}\n\nfunction ensureAuthenticationMethodInfo(\n  value: AuthenticationMethodInfo | null | undefined,\n  authenticationMethod: AuthenticationMethod | string | undefined,\n): AuthenticationMethodInfo {\n  const fallback = getFallbackForMethod(authenticationMethod);\n  const category = resolveCategory(value?.category, fallback.category);\n  const code = resolveString(value?.code, fallback.code);\n  const displayName = resolveString(value?.displayName, fallback.displayName);\n  return { category, code, displayName };\n}\n\nfunction getFallbackForMethod(\n  authenticationMethod: AuthenticationMethod | string | undefined,\n): AuthenticationMethodInfo {\n  if (\n    authenticationMethod &&\n    Object.prototype.hasOwnProperty.call(LEGACY_METHOD_INFO_FALLBACKS, authenticationMethod)\n  ) {\n    return LEGACY_METHOD_INFO_FALLBACKS[authenticationMethod as AuthenticationMethod];\n  }\n  const fallbackCode = resolveString(authenticationMethod, \"Unknown\");\n  return {\n    category: \"Other\",\n    code: fallbackCode,\n    displayName: fallbackCode,\n  };\n}\n\nfunction resolveCategory(\n  value: AuthenticationMethodCategory | undefined,\n  fallback: AuthenticationMethodCategory,\n): AuthenticationMethodCategory {\n  if (value && AUTHENTICATION_METHOD_CATEGORIES.has(value)) {\n    return value;\n  }\n  return fallback;\n}\n\nfunction resolveString(value: string | undefined, fallback: string): string {\n  if (typeof value === \"string\" && value.trim().length > 0) {\n    return value;\n  }\n  return fallback;\n}\n","import { BaseClient } from \"../client/baseClient\";\nimport { AuthenticationListResponse } from \"../types/common\";\nimport { normalizeAuthenticationListResponse } from \"../utils/authenticationMethodInfo\";\n\nexport class ActiveSessionsClient extends BaseClient {\n  async listActiveSessions(\n    pageSize?: number,\n    continuationToken?: string,\n  ): Promise<AuthenticationListResponse> {\n    const token = await this.getAccessToken();\n    const headers =\n      continuationToken !== undefined ? { \"x-continuation-token\": continuationToken } : undefined;\n    const response = await this.http.request<AuthenticationListResponse>({\n      method: \"GET\",\n      path: \"/auth/sessions\",\n      ...(headers ? { headers } : {}),\n      query: {\n        pageSize,\n      },\n      authToken: token,\n    });\n    return normalizeAuthenticationListResponse(response);\n  }\n\n  async revokeCurrentSession(): Promise<void> {\n    const token = await this.getAccessToken();\n    await this.http.request<void>({\n      method: \"DELETE\",\n      path: \"/auth/sessions/current\",\n      authToken: token,\n    });\n  }\n\n  async revokeSession(referenceNumber: string): Promise<void> {\n    const token = await this.getAccessToken();\n    await this.http.request<void>({\n      method: \"DELETE\",\n      path: `/auth/sessions/${encodeURIComponent(referenceNumber)}`,\n      authToken: token,\n    });\n  }\n}\n","import { BaseClient } from \"../client/baseClient\";\nimport {\n  AuthChallengeResponse,\n  AuthTokenRedeemResponse,\n  InitTokenAuthenticationRequest,\n  RefreshTokenResponse,\n} from \"../types/auth\";\nimport { AuthenticationInitResponse, AuthenticationOperationStatusResponse } from \"../types/common\";\nimport { normalizeAuthenticationOperationStatusResponse } from \"../utils/authenticationMethodInfo\";\n\nexport class AuthClient extends BaseClient {\n  async getChallenge(): Promise<AuthChallengeResponse> {\n    return this.http.request<AuthChallengeResponse>({\n      method: \"POST\",\n      path: \"/auth/challenge\",\n    });\n  }\n\n  async authenticateWithKsefToken(\n    request: InitTokenAuthenticationRequest,\n  ): Promise<AuthenticationInitResponse> {\n    return this.http.request<AuthenticationInitResponse>({\n      method: \"POST\",\n      path: \"/auth/ksef-token\",\n      body: request,\n    });\n  }\n\n  async authenticateWithXadesSignature(\n    signedXml: string,\n    verifyCertificateChain?: boolean,\n    enforceXadesCompliance?: boolean,\n  ): Promise<AuthenticationInitResponse> {\n    return this.http.request<AuthenticationInitResponse>({\n      method: \"POST\",\n      path: \"/auth/xades-signature\",\n      ...(verifyCertificateChain !== undefined && {\n        query: { verifyCertificateChain },\n      }),\n      body: signedXml,\n      headers: {\n        \"Content-Type\": \"application/xml\",\n        Accept: \"application/json\",\n        ...(enforceXadesCompliance && {\n          \"X-KSeF-Feature\": \"enforce-xades-compliance\",\n        }),\n      },\n    });\n  }\n\n  async getAuthStatus(\n    referenceNumber: string,\n    authenticationToken: string,\n  ): Promise<AuthenticationOperationStatusResponse> {\n    const response = await this.http.request<AuthenticationOperationStatusResponse>({\n      method: \"GET\",\n      path: `/auth/${encodeURIComponent(referenceNumber)}`,\n      authToken: authenticationToken,\n    });\n    return normalizeAuthenticationOperationStatusResponse(response);\n  }\n\n  async redeemToken(authenticationToken: string): Promise<AuthTokenRedeemResponse> {\n    return this.http.request<AuthTokenRedeemResponse>({\n      method: \"POST\",\n      path: \"/auth/token/redeem\",\n      authToken: authenticationToken,\n    });\n  }\n\n  async refreshAccessToken(refreshToken: string): Promise<RefreshTokenResponse> {\n    return this.http.request<RefreshTokenResponse>({\n      method: \"POST\",\n      path: \"/auth/token/refresh\",\n      authToken: refreshToken,\n    });\n  }\n}\n","import { BaseClient } from \"../client/baseClient\";\nimport {\n  CertificateEnrollmentRequest,\n  CertificateEnrollmentResponse,\n  CertificateEnrollmentStatusResponse,\n  CertificateLimitsResponse,\n  CertificateRevokeRequest,\n  CertificatesQueryRequest,\n  CertificatesQueryResponse,\n  CertificatesRetrieveRequest,\n  CertificatesRetrieveResponse,\n} from \"../types/certificates\";\n\nexport class CertificatesClient extends BaseClient {\n  async getCertificateLimits(): Promise<CertificateLimitsResponse> {\n    const token = await this.getAccessToken();\n    return this.http.request<CertificateLimitsResponse>({\n      method: \"GET\",\n      path: \"/certificates/limits\",\n      authToken: token,\n    });\n  }\n\n  async getEnrollmentData(): Promise<Record<string, unknown>> {\n    const token = await this.getAccessToken();\n    return this.http.request<Record<string, unknown>>({\n      method: \"GET\",\n      path: \"/certificates/enrollments/data\",\n      authToken: token,\n    });\n  }\n\n  async createEnrollment(\n    request: CertificateEnrollmentRequest,\n  ): Promise<CertificateEnrollmentResponse> {\n    const token = await this.getAccessToken();\n    return this.http.request<CertificateEnrollmentResponse>({\n      method: \"POST\",\n      path: \"/certificates/enrollments\",\n      body: request,\n      authToken: token,\n    });\n  }\n\n  async getEnrollmentStatus(referenceNumber: string): Promise<CertificateEnrollmentStatusResponse> {\n    const token = await this.getAccessToken();\n    return this.http.request<CertificateEnrollmentStatusResponse>({\n      method: \"GET\",\n      path: `/certificates/enrollments/${encodeURIComponent(referenceNumber)}`,\n      authToken: token,\n    });\n  }\n\n  async queryCertificates(\n    request: CertificatesQueryRequest,\n    pageOffset?: number,\n    pageSize?: number,\n  ): Promise<CertificatesQueryResponse> {\n    const token = await this.getAccessToken();\n    const query =\n      pageOffset !== undefined || pageSize !== undefined ? { pageOffset, pageSize } : undefined;\n    return this.http.request<CertificatesQueryResponse>({\n      method: \"POST\",\n      path: \"/certificates/query\",\n      ...(query ? { query } : {}),\n      body: request,\n      authToken: token,\n    });\n  }\n\n  async retrieveCertificates(\n    request: CertificatesRetrieveRequest,\n  ): Promise<CertificatesRetrieveResponse> {\n    const token = await this.getAccessToken();\n    return this.http.request<CertificatesRetrieveResponse>({\n      method: \"POST\",\n      path: \"/certificates/retrieve\",\n      body: request,\n      authToken: token,\n    });\n  }\n\n  async revokeCertificate(\n    certificateSerialNumber: string,\n    request?: CertificateRevokeRequest,\n  ): Promise<void> {\n    const token = await this.getAccessToken();\n    await this.http.request<void>({\n      method: \"POST\",\n      path: `/certificates/${encodeURIComponent(certificateSerialNumber)}/revoke`,\n      body: request ?? {},\n      authToken: token,\n    });\n  }\n}\n","const CRC8_POLY = 0x07;\n\nexport function crc8(input: string): number {\n  let crc = 0x00;\n  const bytes = Buffer.from(input, \"utf8\");\n  for (const byte of bytes) {\n    crc ^= byte;\n    for (let i = 0; i < 8; i += 1) {\n      if ((crc & 0x80) !== 0) {\n        crc = ((crc << 1) ^ CRC8_POLY) & 0xff;\n      } else {\n        crc = (crc << 1) & 0xff;\n      }\n    }\n  }\n  return crc & 0xff;\n}\n\nexport function crc8Hex(input: string): string {\n  return crc8(input).toString(16).toUpperCase().padStart(2, \"0\");\n}\n","import { crc8Hex } from \"./crc8\";\n\nexport interface KsefNumberValidationResult {\n  isValid: boolean;\n  message?: string;\n}\n\ntype NormalizeResult =\n  | { ok: true; value: string }\n  | { ok: false; message: string };\n\nfunction normalizeAndValidateKsefNumber(ksefNumber: string): NormalizeResult {\n  if (!ksefNumber) {\n    return { ok: false, message: \"KSeF number is empty.\" };\n  }\n\n  let normalized = ksefNumber;\n  if (normalized.length === 36) {\n    const parts = normalized.split(\"-\");\n    if (parts.length === 5) {\n      const [part0, part1, part2, part3, part4] = parts;\n      if (!part0 || !part1 || !part2 || !part3 || !part4) {\n        return { ok: false, message: \"Invalid KSeF number format.\" };\n      }\n      normalized = [part0, part1, part2 + part3, part4].join(\"-\");\n    } else {\n      return { ok: false, message: \"Invalid KSeF number format.\" };\n    }\n  }\n\n  if (normalized.length !== 35) {\n    return { ok: false, message: \"KSeF number must be 35 characters long.\" };\n  }\n  const main = normalized.slice(0, 32);\n  const checksum = normalized.slice(-2);\n  const computed = crc8Hex(main);\n  if (computed !== checksum) {\n    return {\n      ok: false,\n      message: `Invalid checksum. Expected ${computed}, got ${checksum}.`,\n    };\n  }\n  return { ok: true, value: normalized };\n}\n\nexport function validateKsefNumber(ksefNumber: string): KsefNumberValidationResult {\n  const result = normalizeAndValidateKsefNumber(ksefNumber);\n  if (!result.ok) {\n    return { isValid: false, message: result.message };\n  }\n  return { isValid: true };\n}\n\nexport function isValidKsefNumber(ksefNumber: string): boolean {\n  return validateKsefNumber(ksefNumber).isValid;\n}\n\nexport function requireKsefNumber(ksefNumber: string): string {\n  const result = normalizeAndValidateKsefNumber(ksefNumber);\n  if (!result.ok) {\n    throw new Error(`Invalid KSeF number: ${result.message}`);\n  }\n  return result.value;\n}\n","import {\n  CollectiveIdentifierInvoice,\n  CollectiveIdentifierInvoicePayment,\n  CurrencyCode,\n} from \"../types/openapi.generated\";\nimport { requireKsefNumber } from \"./ksefNumber\";\nimport { crc8Hex } from \"./crc8\";\n\nconst COLLECTIVE_IDENTIFIER_PATTERN =\n  /^(\\d{10})-IZ(\\d{4})(0[1-9]|1[0-2])-([0-9A-F]{12})-([0-9A-F]{2})$/;\nconst DATE_ONLY_RE = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nexport const COLLECTIVE_IDENTIFIER_LENGTH = 35;\nexport const MAX_INVOICES_PER_IDENTIFIER = 500;\nexport const MIN_INVOICES_PER_IDENTIFIER = 2;\nexport const MAX_IDENTIFIERS_PER_INVOICE = 132;\nexport const MAX_IDENTIFIERS_PER_INVOICES_QUERY = 10;\nexport const MAX_QUERY_RANGE_DAYS = 100;\nexport const MAX_INVOICE_DESCRIPTION_LENGTH = 512;\nexport const PAGE_SIZE_MIN = 10;\nexport const PAGE_SIZE_MAX = 200;\nexport const PAGE_SIZE_INVOICES_MAX = 500;\n\nexport const COLLECTIVE_IDENTIFIER_EXCEPTION_CODES: Record<number, string> = {\n  71001: \"Invoice cannot be assigned to a collective identifier\",\n  71002: \"Invoice is already assigned to the maximum number of collective identifiers\",\n};\n\nexport interface CollectiveIdentifierValidationResult {\n  isValid: boolean;\n  message?: string;\n}\n\nexport function validateCollectiveIdentifierNumber(\n  collectiveIdentifierNumber: string,\n): CollectiveIdentifierValidationResult {\n  if (!collectiveIdentifierNumber) {\n    return { isValid: false, message: \"empty value\" };\n  }\n\n  if (collectiveIdentifierNumber.length !== COLLECTIVE_IDENTIFIER_LENGTH) {\n    return { isValid: false, message: \"invalid length\" };\n  }\n\n  if (!COLLECTIVE_IDENTIFIER_PATTERN.test(collectiveIdentifierNumber)) {\n    return { isValid: false, message: \"invalid format\" };\n  }\n\n  const dataPart = collectiveIdentifierNumber.slice(0, 32);\n  const checksum = collectiveIdentifierNumber.slice(-2);\n  const expected = crc8Hex(dataPart);\n  if (expected !== checksum) {\n    return { isValid: false, message: `checksum mismatch (expected ${expected})` };\n  }\n\n  return { isValid: true, message: \"ok\" };\n}\n\nexport function isValidCollectiveIdentifierNumber(collectiveIdentifierNumber: string): boolean {\n  return validateCollectiveIdentifierNumber(collectiveIdentifierNumber).isValid;\n}\n\nexport function requireCollectiveIdentifierNumber(collectiveIdentifierNumber: string): string {\n  const result = validateCollectiveIdentifierNumber(collectiveIdentifierNumber);\n  if (!result.isValid) {\n    throw new Error(`Invalid collective identifier number: ${result.message}`);\n  }\n  return collectiveIdentifierNumber;\n}\n\nexport function requirePageSize(value: number, maximum: number = PAGE_SIZE_MAX): number {\n  if (PAGE_SIZE_MIN <= value && value <= maximum) {\n    return value;\n  }\n  throw new Error(`page_size must be between ${PAGE_SIZE_MIN} and ${maximum}`);\n}\n\nexport function requireInvoicesQueryIdentifiers(\n  collectiveIdentifierNumbers: string | readonly string[],\n): string[] {\n  const numbers =\n    typeof collectiveIdentifierNumbers === \"string\"\n      ? [collectiveIdentifierNumbers]\n      : [...collectiveIdentifierNumbers];\n  if (numbers.length === 0) {\n    throw new Error(\"At least one collective identifier number is required\");\n  }\n  if (numbers.length > MAX_IDENTIFIERS_PER_INVOICES_QUERY) {\n    throw new Error(\n      `Cannot query more than ${MAX_IDENTIFIERS_PER_INVOICES_QUERY} collective identifiers at once`,\n    );\n  }\n  const seen = new Set<string>();\n  const normalized: string[] = [];\n  for (const number of numbers) {\n    const validated = requireCollectiveIdentifierNumber(number);\n    if (seen.has(validated)) {\n      throw new Error(`Duplicate collective identifier number in invoices query: ${validated}`);\n    }\n    seen.add(validated);\n    normalized.push(validated);\n  }\n  return normalized;\n}\n\nexport function requireQueryDateRange(dateFrom: string, dateTo: string): [string, string] {\n  const parsedFrom = parseQueryDatetime(dateFrom, \"dateCreatedFrom\");\n  const parsedTo = parseQueryDatetime(dateTo, \"dateCreatedTo\");\n  if (parsedFrom.getTime() > parsedTo.getTime()) {\n    throw new Error(\"dateCreatedFrom must be earlier than or equal to dateCreatedTo\");\n  }\n  const spanDays = utcDateOnlyMs(parsedTo) - utcDateOnlyMs(parsedFrom);\n  const spanDaysCount = spanDays / 86_400_000;\n  if (spanDaysCount > MAX_QUERY_RANGE_DAYS) {\n    throw new Error(`Collective identifier query range cannot exceed ${MAX_QUERY_RANGE_DAYS} days`);\n  }\n  return [dateFrom, dateTo];\n}\n\nexport function expandQueryDateBound(value: string, endOfDay: boolean): string {\n  if (DATE_ONLY_RE.test(value)) {\n    return `${value}${endOfDay ? \"T23:59:59Z\" : \"T00:00:00Z\"}`;\n  }\n  return value;\n}\n\nexport function makeCollectiveIdentifierInvoice(\n  ksefNumber: string,\n  options: {\n    description?: string | null;\n    amount?: number | string | null;\n    currency?: CurrencyCode | string | null;\n  } = {},\n): CollectiveIdentifierInvoice {\n  const validatedNumber = requireKsefNumber(ksefNumber);\n  if (\n    options.description !== undefined &&\n    options.description !== null &&\n    options.description.length > MAX_INVOICE_DESCRIPTION_LENGTH\n  ) {\n    throw new Error(\n      `Invoice description cannot exceed ${MAX_INVOICE_DESCRIPTION_LENGTH} characters`,\n    );\n  }\n  const payment = buildPayment(options.amount, options.currency);\n  return {\n    ksefNumber: validatedNumber,\n    ...(options.description !== undefined ? { description: options.description } : {}),\n    ...(payment ? { payment } : {}),\n  };\n}\n\nexport function requireGenerateInvoices(\n  invoices: readonly CollectiveIdentifierInvoice[],\n  options: { minInvoices?: number } = {},\n): CollectiveIdentifierInvoice[] {\n  const items = [...invoices];\n  const minInvoices = options.minInvoices ?? MIN_INVOICES_PER_IDENTIFIER;\n  if (items.length < minInvoices) {\n    throw new Error(`Collective identifier requires at least ${minInvoices} invoices`);\n  }\n  if (items.length > MAX_INVOICES_PER_IDENTIFIER) {\n    throw new Error(\n      `Collective identifier cannot contain more than ${MAX_INVOICES_PER_IDENTIFIER} invoices`,\n    );\n  }\n\n  const seen = new Set<string>();\n  for (const invoice of items) {\n    const ksefNumber = requireKsefNumber(String(invoice.ksefNumber));\n    if (seen.has(ksefNumber)) {\n      throw new Error(`Duplicate KSeF number in collective identifier request: ${ksefNumber}`);\n    }\n    seen.add(ksefNumber);\n    if (\n      invoice.description !== undefined &&\n      invoice.description !== null &&\n      invoice.description.length > MAX_INVOICE_DESCRIPTION_LENGTH\n    ) {\n      throw new Error(\n        `Invoice description cannot exceed ${MAX_INVOICE_DESCRIPTION_LENGTH} characters`,\n      );\n    }\n  }\n  return items;\n}\n\nfunction buildPayment(\n  amount: number | string | null | undefined,\n  currency: CurrencyCode | string | null | undefined,\n): CollectiveIdentifierInvoicePayment | undefined {\n  if (amount === undefined || amount === null) {\n    if (currency === undefined || currency === null) {\n      return undefined;\n    }\n    throw new Error(\"payment amount and currency must be provided together\");\n  }\n  if (currency === undefined || currency === null) {\n    throw new Error(\"payment amount and currency must be provided together\");\n  }\n  const parsedAmount = typeof amount === \"number\" ? amount : Number(amount);\n  if (!Number.isFinite(parsedAmount)) {\n    throw new Error(\"Invalid payment amount\");\n  }\n  const currencyCode = String(currency);\n  if (!/^[A-Z]{3}$/.test(currencyCode)) {\n    throw new Error(\"Invalid payment currency\");\n  }\n  return {\n    amount: parsedAmount,\n    currency: currencyCode as CurrencyCode,\n  };\n}\n\nfunction parseQueryDatetime(value: string, fieldName: string): Date {\n  if (!value) {\n    throw new Error(`${fieldName} is required`);\n  }\n  const normalized = expandQueryDateBound(value, fieldName === \"dateCreatedTo\").replace(\n    \"Z\",\n    \"+00:00\",\n  );\n  const parsed = new Date(normalized);\n  if (Number.isNaN(parsed.getTime())) {\n    throw new Error(`Invalid ${fieldName} datetime: ${value}`);\n  }\n  return parsed;\n}\n\nfunction utcDateOnlyMs(value: Date): number {\n  return Date.UTC(value.getUTCFullYear(), value.getUTCMonth(), value.getUTCDate());\n}\n","import { BaseClient } from \"../client/baseClient\";\nimport {\n  CollectiveIdentifierInvoice,\n  CollectiveIdentifierInvoicesQueryRequest,\n  CollectiveIdentifierInvoicesQueryResponse,\n  CollectiveIdentifierInvoicesQueryResponseItem,\n  CollectiveIdentifiersByKsefNumberQueryResponse,\n  CollectiveIdentifiersByKsefNumberQueryResponseItem,\n  CollectiveIdentifiersGenerateForNumbersOptions,\n  CollectiveIdentifiersIterateOptions,\n  CollectiveIdentifiersPagingOptions,\n  CollectiveIdentifiersQueryByCreatedRangeOptions,\n  CollectiveIdentifiersQueryRequest,\n  CollectiveIdentifiersQueryResponse,\n  CollectiveIdentifiersQueryResponseItem,\n  GenerateCollectiveIdentifierRequest,\n  GenerateCollectiveIdentifierResponse,\n} from \"../types/collectiveIdentifiers\";\nimport {\n  expandQueryDateBound,\n  makeCollectiveIdentifierInvoice,\n  PAGE_SIZE_INVOICES_MAX,\n  PAGE_SIZE_MAX,\n  requireCollectiveIdentifierNumber,\n  requireGenerateInvoices,\n  requireInvoicesQueryIdentifiers,\n  requirePageSize,\n  requireQueryDateRange,\n} from \"../utils/collectiveIdentifier\";\nimport { requireKsefNumber } from \"../utils/ksefNumber\";\n\nfunction buildPaging(\n  options: CollectiveIdentifiersPagingOptions,\n  pageSizeMax: number,\n): {\n  headers?: Record<string, string>;\n  query?: { pageSize: number };\n} {\n  const pageSize =\n    options.pageSize !== undefined ? requirePageSize(options.pageSize, pageSizeMax) : undefined;\n  const headers =\n    options.continuationToken !== undefined\n      ? { \"x-continuation-token\": options.continuationToken }\n      : undefined;\n  const query = pageSize !== undefined ? { pageSize } : undefined;\n  return {\n    ...(headers ? { headers } : {}),\n    ...(query ? { query } : {}),\n  };\n}\n\nfunction validateQueryRequest(\n  request: CollectiveIdentifiersQueryRequest,\n): CollectiveIdentifiersQueryRequest {\n  requireQueryDateRange(request.dateCreatedFrom, request.dateCreatedTo);\n  if (request.collectiveIdentifierNumber) {\n    requireCollectiveIdentifierNumber(request.collectiveIdentifierNumber);\n  }\n  return request;\n}\n\nfunction buildQueryRequest(\n  dateFrom: string,\n  dateTo: string,\n  options: CollectiveIdentifiersQueryByCreatedRangeOptions = {},\n): CollectiveIdentifiersQueryRequest {\n  const expandedFrom = expandQueryDateBound(dateFrom, false);\n  const expandedTo = expandQueryDateBound(dateTo, true);\n  const collectiveIdentifierNumber = options.collectiveIdentifierNumber\n    ? requireCollectiveIdentifierNumber(options.collectiveIdentifierNumber)\n    : undefined;\n  requireQueryDateRange(expandedFrom, expandedTo);\n  return {\n    dateCreatedFrom: expandedFrom,\n    dateCreatedTo: expandedTo,\n    ...(collectiveIdentifierNumber ? { collectiveIdentifierNumber } : {}),\n    ...(options.createdInCurrentContext !== undefined\n      ? { createdInCurrentContext: options.createdInCurrentContext }\n      : {}),\n    ...(options.invoiceCountFrom !== undefined\n      ? { invoiceCountFrom: options.invoiceCountFrom }\n      : {}),\n    ...(options.invoiceCountTo !== undefined ? { invoiceCountTo: options.invoiceCountTo } : {}),\n  };\n}\n\nfunction buildGenerateRequest(\n  ksefNumbers: readonly string[],\n  descriptions?: Array<string | null | undefined>,\n): GenerateCollectiveIdentifierRequest {\n  const numbers = [...ksefNumbers];\n  if (descriptions !== undefined && descriptions.length !== numbers.length) {\n    throw new Error(\"descriptions length must match ksef_numbers\");\n  }\n  const invoices: CollectiveIdentifierInvoice[] = numbers.map((ksefNumber, index) => {\n    const description = descriptions === undefined ? undefined : descriptions[index];\n    return makeCollectiveIdentifierInvoice(ksefNumber, {\n      ...(description !== undefined ? { description } : {}),\n    });\n  });\n  return { invoices: requireGenerateInvoices(invoices) };\n}\n\nfunction toPagingOptions(\n  pageSize: number | undefined,\n  continuationToken: string | undefined,\n): CollectiveIdentifiersPagingOptions {\n  return {\n    ...(pageSize !== undefined ? { pageSize } : {}),\n    ...(continuationToken !== undefined ? { continuationToken } : {}),\n  };\n}\n\nfunction toIteratePage<TItem>(\n  items: TItem[] | undefined,\n  continuationToken: string | null | undefined,\n): { items: TItem[]; continuationToken?: string | null } {\n  return {\n    items: items ?? [],\n    ...(continuationToken !== undefined ? { continuationToken } : {}),\n  };\n}\n\nasync function* iteratePages<TItem>(\n  fetchPage: (\n    continuationToken: string | undefined,\n  ) => Promise<{ items: TItem[]; continuationToken?: string | null }>,\n): AsyncGenerator<TItem> {\n  let continuationToken: string | undefined;\n  const seenTokens = new Set<string>();\n  while (true) {\n    const response = await fetchPage(continuationToken);\n    for (const item of response.items) {\n      yield item;\n    }\n    const nextToken = response.continuationToken ?? undefined;\n    if (!nextToken || seenTokens.has(nextToken)) {\n      return;\n    }\n    seenTokens.add(nextToken);\n    continuationToken = nextToken;\n  }\n}\n\nexport class CollectiveIdentifiersClient extends BaseClient {\n  async generate(\n    request: GenerateCollectiveIdentifierRequest,\n  ): Promise<GenerateCollectiveIdentifierResponse> {\n    requireGenerateInvoices(request.invoices);\n    const token = await this.getAccessToken();\n    return this.http.request<GenerateCollectiveIdentifierResponse>({\n      method: \"POST\",\n      path: \"/collective-identifiers\",\n      body: request,\n      authToken: token,\n    });\n  }\n\n  async generateForKsefNumbers(\n    ksefNumbers: readonly string[],\n    options: CollectiveIdentifiersGenerateForNumbersOptions = {},\n  ): Promise<GenerateCollectiveIdentifierResponse> {\n    return this.generate(buildGenerateRequest(ksefNumbers, options.descriptions));\n  }\n\n  async query(\n    request: CollectiveIdentifiersQueryRequest,\n    options: CollectiveIdentifiersPagingOptions = {},\n  ): Promise<CollectiveIdentifiersQueryResponse> {\n    validateQueryRequest(request);\n    const token = await this.getAccessToken();\n    const paging = buildPaging(options, PAGE_SIZE_MAX);\n    return this.http.request<CollectiveIdentifiersQueryResponse>({\n      method: \"POST\",\n      path: \"/collective-identifiers/query\",\n      body: request,\n      ...paging,\n      authToken: token,\n    });\n  }\n\n  async queryByCreatedRange(\n    dateFrom: string,\n    dateTo: string,\n    options: CollectiveIdentifiersQueryByCreatedRangeOptions = {},\n  ): Promise<CollectiveIdentifiersQueryResponse> {\n    return this.query(\n      buildQueryRequest(dateFrom, dateTo, options),\n      toPagingOptions(options.pageSize, options.continuationToken),\n    );\n  }\n\n  async *iterQuery(\n    request: CollectiveIdentifiersQueryRequest,\n    options: CollectiveIdentifiersIterateOptions = {},\n  ): AsyncGenerator<CollectiveIdentifiersQueryResponseItem> {\n    yield* iteratePages(async (continuationToken) => {\n      const response = await this.query(\n        request,\n        toPagingOptions(options.pageSize, continuationToken),\n      );\n      return toIteratePage(response.collectiveIdentifiers, response.continuationToken);\n    });\n  }\n\n  async listInvoices(\n    collectiveIdentifierNumbers: string | readonly string[],\n    options: CollectiveIdentifiersPagingOptions = {},\n  ): Promise<CollectiveIdentifierInvoicesQueryResponse> {\n    const numbers = requireInvoicesQueryIdentifiers(collectiveIdentifierNumbers);\n    const token = await this.getAccessToken();\n    const paging = buildPaging(options, PAGE_SIZE_INVOICES_MAX);\n    const body: CollectiveIdentifierInvoicesQueryRequest = {\n      collectiveIdentifierNumbers: numbers,\n    };\n    return this.http.request<CollectiveIdentifierInvoicesQueryResponse>({\n      method: \"POST\",\n      path: \"/collective-identifiers/invoices\",\n      body,\n      ...paging,\n      authToken: token,\n    });\n  }\n\n  async *iterInvoices(\n    collectiveIdentifierNumbers: string | readonly string[],\n    options: CollectiveIdentifiersIterateOptions = {},\n  ): AsyncGenerator<CollectiveIdentifierInvoicesQueryResponseItem> {\n    yield* iteratePages(async (continuationToken) => {\n      const response = await this.listInvoices(\n        collectiveIdentifierNumbers,\n        toPagingOptions(options.pageSize, continuationToken),\n      );\n      return toIteratePage(response.invoices, response.continuationToken);\n    });\n  }\n\n  async listByKsefNumber(\n    ksefNumber: string,\n    options: CollectiveIdentifiersPagingOptions = {},\n  ): Promise<CollectiveIdentifiersByKsefNumberQueryResponse> {\n    const validated = requireKsefNumber(ksefNumber);\n    const token = await this.getAccessToken();\n    const paging = buildPaging(options, PAGE_SIZE_MAX);\n    return this.http.request<CollectiveIdentifiersByKsefNumberQueryResponse>({\n      method: \"GET\",\n      path: `/collective-identifiers/ksef/${encodeURIComponent(validated)}`,\n      ...paging,\n      authToken: token,\n    });\n  }\n\n  async *iterByKsefNumber(\n    ksefNumber: string,\n    options: CollectiveIdentifiersIterateOptions = {},\n  ): AsyncGenerator<CollectiveIdentifiersByKsefNumberQueryResponseItem> {\n    yield* iteratePages(async (continuationToken) => {\n      const response = await this.listByKsefNumber(\n        ksefNumber,\n        toPagingOptions(options.pageSize, continuationToken),\n      );\n      return toIteratePage(response.collectiveIdentifiers, response.continuationToken);\n    });\n  }\n}\n","import { KsefValidationError } from \"../errors/errors\";\nimport { EncryptionInfo, JsonObject, StatusInfo } from \"./common\";\n\nexport type IsoDateString = `${number}-${number}-${number}`;\nexport type IsoDateTimeString = `${number}-${number}-${number}T${string}`;\nexport type IsoDateInput = IsoDateString | IsoDateTimeString;\n\nexport interface InvoiceDateRangeFilter extends JsonObject {\n  dateType: string;\n  from: IsoDateInput;\n  to?: IsoDateInput | null;\n  restrictToPermanentStorageHwmDate?: boolean | null;\n}\n\nexport interface InvoiceQueryFilters extends JsonObject {\n  subjectType: string;\n  dateRange: InvoiceDateRangeFilter;\n}\n\nexport interface InvoiceExportRequest {\n  encryption: EncryptionInfo;\n  filters: InvoiceQueryFilters;\n  onlyMetadata?: boolean;\n  compressionType?: \"Zip\" | \"TarGz\" | null;\n  /**\n   * @deprecated Use `onlyMetadata` instead.\n   */\n  includeMetadata?: boolean;\n}\n\nexport interface InvoiceExportInitResponse {\n  referenceNumber: string;\n}\n\nexport interface InvoiceExportStatusResponse {\n  status: StatusInfo;\n  completedDate?: string | null;\n  packageExpirationDate?: string | null;\n  package?: InvoicePackage | null;\n}\n\nexport interface InvoicePackage {\n  invoiceCount: number;\n  size: number;\n  parts: InvoicePackagePart[];\n  isTruncated: boolean;\n  compressionType?: \"Zip\" | \"TarGz\" | null;\n  lastIssueDate?: string | null;\n  lastInvoicingDate?: string | null;\n  lastPermanentStorageDate?: string | null;\n  permanentStorageHwmDate?: string | null;\n}\n\nexport interface InvoicePackagePart {\n  ordinalNumber: number;\n  partName: string;\n  method: string;\n  url: string;\n  partSize: number;\n  partHash: string;\n  encryptedPartSize: number;\n  encryptedPartHash: string;\n  expirationDate: string;\n}\n\nexport type InvoiceMetadataResponse = JsonObject;\n\nconst ISO_DATE_PATTERN = /^\\d{4}-\\d{2}-\\d{2}$/;\nconst ISO_DATE_TIME_PATTERN =\n  /^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d{1,9})?)?(?:Z|[+-](?:[01]\\d|2[0-3]):?[0-5]\\d)?$/;\nconst ISO_DATE_TIME_WITHOUT_OFFSET_PATTERN =\n  /^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d{1,9})?)?$/;\nconst ISO_DATE_TIME_CAPTURE_PATTERN =\n  /^(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})T(?<hour>[01]\\d|2[0-3]):(?<minute>[0-5]\\d)(?::(?<second>[0-5]\\d)(?:\\.(?<fraction>\\d{1,9}))?)?$/;\nexport const INVOICE_QUERY_MAX_RANGE_DAYS = 100;\nconst WARSAW_TIME_ZONE = \"Europe/Warsaw\";\n\nexport function normalizeInvoiceQueryFilters(filters: InvoiceQueryFilters): InvoiceQueryFilters {\n  if (!isPlainObject(filters)) {\n    return filters;\n  }\n  const dateRange = (filters as Record<string, unknown>).dateRange;\n  if (!isPlainObject(dateRange)) {\n    return filters;\n  }\n\n  const normalizedDateRange: Record<string, unknown> = { ...dateRange };\n  if (typeof normalizedDateRange.from === \"string\") {\n    normalizedDateRange.from = normalizeDateTimeWithoutOffset(normalizedDateRange.from);\n  }\n  if (typeof normalizedDateRange.to === \"string\") {\n    normalizedDateRange.to = normalizeDateTimeWithoutOffset(normalizedDateRange.to);\n  }\n\n  return {\n    ...(filters as Record<string, unknown>),\n    dateRange: normalizedDateRange,\n  } as InvoiceQueryFilters;\n}\n\nexport function validateInvoiceQueryFilters(filters: InvoiceQueryFilters): void {\n  if (!isPlainObject(filters)) {\n    throw new KsefValidationError(\"Invoice query filters must be an object.\");\n  }\n\n  const subjectType = (filters as Record<string, unknown>).subjectType;\n  if (typeof subjectType !== \"string\" || subjectType.trim().length === 0) {\n    throw new KsefValidationError(\"Invoice query filters.subjectType must be a non-empty string.\");\n  }\n\n  const dateRange = (filters as Record<string, unknown>).dateRange;\n  if (dateRange === undefined || dateRange === null) {\n    throw new KsefValidationError(\"Invoice query filters.dateRange is required.\");\n  }\n  if (!isPlainObject(dateRange)) {\n    throw new KsefValidationError(\"Invoice query filters.dateRange must be an object.\");\n  }\n\n  const dateType = dateRange.dateType;\n  if (typeof dateType !== \"string\" || dateType.trim().length === 0) {\n    throw new KsefValidationError(\n      \"Invoice query filters.dateRange.dateType must be a non-empty string.\",\n    );\n  }\n  const normalizedDateType = dateType.trim();\n  const restrictToPermanentStorageHwmDate = dateRange.restrictToPermanentStorageHwmDate;\n  if (\n    restrictToPermanentStorageHwmDate === true &&\n    normalizedDateType.toLowerCase() !== \"permanentstorage\"\n  ) {\n    throw new KsefValidationError(\n      \"Invoice query filters.dateRange.restrictToPermanentStorageHwmDate requires dateType PermanentStorage.\",\n    );\n  }\n\n  const fromValue = dateRange.from;\n  const toValue = dateRange.to;\n  if (typeof fromValue !== \"string\" || fromValue.trim().length === 0) {\n    throw new KsefValidationError(\n      \"Invoice query filters.dateRange.from must be a non-empty ISO date or ISO date-time string.\",\n    );\n  }\n  if (\n    toValue !== undefined &&\n    toValue !== null &&\n    (typeof toValue !== \"string\" || toValue.trim().length === 0)\n  ) {\n    throw new KsefValidationError(\n      \"Invoice query filters.dateRange.to must be a valid ISO date/date-time string when provided.\",\n    );\n  }\n\n  const fromText = fromValue.trim();\n  const normalizedFromText = normalizeDateTimeWithoutOffset(fromText);\n  const fromDate = parseIsoDateInput(normalizedFromText, \"dateRange.from\");\n  const toText =\n    typeof toValue === \"string\" && toValue.trim().length > 0\n      ? toValue.trim()\n      : new Date().toISOString();\n  const normalizedToText =\n    typeof toValue === \"string\" && toValue.trim().length > 0\n      ? normalizeDateTimeWithoutOffset(toText)\n      : toText;\n  const toDate =\n    typeof toValue === \"string\" && toValue.trim().length > 0\n      ? parseIsoDateInput(normalizedToText, \"dateRange.to\")\n      : new Date(toText);\n\n  if (toDate.getTime() < fromDate.getTime()) {\n    throw new KsefValidationError(\n      \"Invoice query filters.dateRange.to must be greater than or equal to dateRange.from.\",\n    );\n  }\n\n  const fromUtcDay = Date.UTC(\n    fromDate.getUTCFullYear(),\n    fromDate.getUTCMonth(),\n    fromDate.getUTCDate(),\n  );\n  const toUtcDay = Date.UTC(toDate.getUTCFullYear(), toDate.getUTCMonth(), toDate.getUTCDate());\n  const spanDays = (toUtcDay - fromUtcDay) / 86_400_000;\n  if (spanDays > INVOICE_QUERY_MAX_RANGE_DAYS) {\n    throw new KsefValidationError(\n      `Invoice query filters.dateRange cannot exceed ${INVOICE_QUERY_MAX_RANGE_DAYS} days (UTC).`,\n      [`dateRange.from: ${normalizedFromText}`, `dateRange.to: ${normalizedToText}`],\n    );\n  }\n}\n\nfunction normalizeDateTimeWithoutOffset(value: string): string {\n  const text = value.trim();\n  if (!ISO_DATE_TIME_WITHOUT_OFFSET_PATTERN.test(text)) {\n    return text;\n  }\n  const match = ISO_DATE_TIME_CAPTURE_PATTERN.exec(text);\n  if (!match?.groups) {\n    return text;\n  }\n  const year = Number(match.groups.year);\n  const month = Number(match.groups.month);\n  const day = Number(match.groups.day);\n  const hour = Number(match.groups.hour);\n  const minute = Number(match.groups.minute);\n  const second = Number(match.groups.second ?? \"0\");\n  const fraction = match.groups.fraction ?? \"\";\n  const millisecond = Number((fraction + \"000\").slice(0, 3));\n\n  if (!isValidCalendarDate(year, month, day)) {\n    return text;\n  }\n\n  const utcGuess = Date.UTC(year, month - 1, day, hour, minute, second, millisecond);\n  const offsetMinutes = resolveWarsawOffsetMinutes(utcGuess);\n  return `${text}${formatOffset(offsetMinutes)}`;\n}\n\nfunction parseIsoDateInput(value: string, fieldPath: string): Date {\n  if (ISO_DATE_PATTERN.test(value)) {\n    const year = Number(value.slice(0, 4));\n    const month = Number(value.slice(5, 7));\n    const day = Number(value.slice(8, 10));\n    if (!isValidCalendarDate(year, month, day)) {\n      throw new KsefValidationError(\n        `Invoice query filters.${fieldPath} must be a valid calendar date in YYYY-MM-DD format.`,\n      );\n    }\n    return new Date(Date.UTC(year, month - 1, day));\n  }\n\n  if (!ISO_DATE_TIME_PATTERN.test(value)) {\n    throw new KsefValidationError(\n      `Invoice query filters.${fieldPath} must be a valid ISO date-time or date string.`,\n    );\n  }\n\n  const year = Number(value.slice(0, 4));\n  const month = Number(value.slice(5, 7));\n  const day = Number(value.slice(8, 10));\n  if (!isValidCalendarDate(year, month, day)) {\n    throw new KsefValidationError(\n      `Invoice query filters.${fieldPath} contains an invalid calendar date.`,\n    );\n  }\n\n  const parsed = new Date(value);\n  if (Number.isNaN(parsed.getTime())) {\n    throw new KsefValidationError(\n      `Invoice query filters.${fieldPath} must be a valid ISO date-time string.`,\n    );\n  }\n  return parsed;\n}\n\nfunction isValidCalendarDate(year: number, month: number, day: number): boolean {\n  if (!Number.isInteger(year) || !Number.isInteger(month) || !Number.isInteger(day)) {\n    return false;\n  }\n  if (month < 1 || month > 12 || day < 1) {\n    return false;\n  }\n  const daysInMonth = new Date(Date.UTC(year, month, 0)).getUTCDate();\n  return day <= daysInMonth;\n}\n\nfunction resolveWarsawOffsetMinutes(utcGuessMs: number): number {\n  let offset = getOffsetMinutesForTimezone(new Date(utcGuessMs), WARSAW_TIME_ZONE);\n  let adjustedUtcMs = utcGuessMs - offset * 60_000;\n  const recalculated = getOffsetMinutesForTimezone(new Date(adjustedUtcMs), WARSAW_TIME_ZONE);\n  if (recalculated !== offset) {\n    offset = recalculated;\n  }\n  return offset;\n}\n\nfunction getOffsetMinutesForTimezone(date: Date, timeZone: string): number {\n  const parts = new Intl.DateTimeFormat(\"en-US\", {\n    timeZone,\n    timeZoneName: \"shortOffset\",\n    hour: \"2-digit\",\n    minute: \"2-digit\",\n    hour12: false,\n  }).formatToParts(date);\n  const zonePart = parts.find((part) => part.type === \"timeZoneName\")?.value ?? \"\";\n  const match = /^GMT(?<sign>[+-])(?<hours>\\d{1,2})(?::?(?<minutes>\\d{2}))?$/.exec(zonePart);\n  if (!match?.groups) {\n    throw new KsefValidationError(\n      `Unsupported timezone offset format for ${timeZone}: ${zonePart}`,\n    );\n  }\n  const sign = match.groups.sign === \"-\" ? -1 : 1;\n  const hours = Number(match.groups.hours);\n  const minutes = Number(match.groups.minutes ?? \"0\");\n  return sign * (hours * 60 + minutes);\n}\n\nfunction formatOffset(offsetMinutes: number): string {\n  const sign = offsetMinutes < 0 ? \"-\" : \"+\";\n  const abs = Math.abs(offsetMinutes);\n  const hours = Math.floor(abs / 60)\n    .toString()\n    .padStart(2, \"0\");\n  const minutes = (abs % 60).toString().padStart(2, \"0\");\n  return `${sign}${hours}:${minutes}`;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import { BaseClient } from \"../client/baseClient\";\nimport {\n  InvoiceExportInitResponse,\n  InvoiceExportRequest,\n  InvoiceExportStatusResponse,\n  InvoiceMetadataResponse,\n  InvoiceQueryFilters,\n  normalizeInvoiceQueryFilters,\n  validateInvoiceQueryFilters,\n} from \"../types/invoices\";\n\nexport class InvoicesClient extends BaseClient {\n  async getInvoice(ksefNumber: string): Promise<string> {\n    const token = await this.getAccessToken();\n    return this.http.request<string>({\n      method: \"GET\",\n      path: `/invoices/ksef/${encodeURIComponent(ksefNumber)}`,\n      authToken: token,\n      responseType: \"text\",\n      headers: {\n        Accept: \"application/xml\",\n      },\n    });\n  }\n\n  async queryInvoiceMetadata(\n    filters: InvoiceQueryFilters,\n    pageOffset?: number,\n    pageSize?: number,\n    sortOrder?: \"Asc\" | \"Desc\",\n  ): Promise<InvoiceMetadataResponse> {\n    const normalizedFilters = normalizeInvoiceQueryFilters(filters);\n    validateInvoiceQueryFilters(normalizedFilters);\n    const token = await this.getAccessToken();\n    return this.http.request<InvoiceMetadataResponse>({\n      method: \"POST\",\n      path: \"/invoices/query/metadata\",\n      query: {\n        pageOffset,\n        pageSize,\n        sortOrder,\n      },\n      body: normalizedFilters,\n      authToken: token,\n    });\n  }\n\n  async exportInvoices(request: InvoiceExportRequest): Promise<InvoiceExportInitResponse> {\n    const { onlyMetadata, includeMetadata, ...body } = request;\n    const normalizedFilters = normalizeInvoiceQueryFilters(body.filters);\n    validateInvoiceQueryFilters(normalizedFilters);\n    const token = await this.getAccessToken();\n    return this.http.request<InvoiceExportInitResponse>({\n      method: \"POST\",\n      path: \"/invoices/exports\",\n      body: {\n        ...body,\n        ...((onlyMetadata ?? includeMetadata) !== undefined\n          ? { onlyMetadata: onlyMetadata ?? includeMetadata }\n          : {}),\n        filters: normalizedFilters,\n      },\n      authToken: token,\n    });\n  }\n\n  async getInvoiceExportStatus(referenceNumber: string): Promise<InvoiceExportStatusResponse> {\n    const token = await this.getAccessToken();\n    return this.http.request<InvoiceExportStatusResponse>({\n      method: \"GET\",\n      path: `/invoices/exports/${encodeURIComponent(referenceNumber)}`,\n      authToken: token,\n    });\n  }\n}\n","import { BaseClient } from \"../client/baseClient\";\nimport { HttpClient } from \"../client/httpClient\";\nimport { LighthouseMessage, LighthouseStatusResponse } from \"../types/lighthouse\";\n\nfunction trimTrailingSlash(value: string): string {\n  return value.replace(/\\/+$/, \"\");\n}\n\nexport class LighthouseClient extends BaseClient {\n  private readonly baseUrl: string;\n\n  constructor(http: HttpClient, baseUrl: string) {\n    super(http);\n    this.baseUrl = trimTrailingSlash(baseUrl);\n  }\n\n  async getStatus(): Promise<LighthouseStatusResponse> {\n    return this.http.request<LighthouseStatusResponse>({\n      method: \"GET\",\n      path: `${this.requireBaseUrl()}/status`,\n    });\n  }\n\n  async getMessages(): Promise<LighthouseMessage[]> {\n    return this.http.request<LighthouseMessage[]>({\n      method: \"GET\",\n      path: `${this.requireBaseUrl()}/messages`,\n    });\n  }\n\n  private requireBaseUrl(): string {\n    if (this.baseUrl.length > 0) {\n      return this.baseUrl;\n    }\n    throw new Error(\"Lighthouse base URL is missing.\");\n  }\n}\n","import { BaseClient } from \"../client/baseClient\";\nimport {\n  LimitsChangeRequest,\n  LimitsContextResponse,\n  LimitsSubjectResponse,\n  RateLimitsResponse,\n} from \"../types/limits\";\n\nexport class LimitsClient extends BaseClient {\n  async getContextLimits(): Promise<LimitsContextResponse> {\n    const token = await this.getAccessToken();\n    return this.http.request<LimitsContextResponse>({\n      method: \"GET\",\n      path: \"/limits/context\",\n      authToken: token,\n    });\n  }\n\n  async getSubjectLimits(): Promise<LimitsSubjectResponse> {\n    const token = await this.getAccessToken();\n    return this.http.request<LimitsSubjectResponse>({\n      method: \"GET\",\n      path: \"/limits/subject\",\n      authToken: token,\n    });\n  }\n\n  async getRateLimits(): Promise<RateLimitsResponse> {\n    const token = await this.getAccessToken();\n    return this.http.request<RateLimitsResponse>({\n      method: \"GET\",\n      path: \"/rate-limits\",\n      authToken: token,\n    });\n  }\n\n  async changeContextSessionLimits(request: LimitsChangeRequest): Promise<void> {\n    const token = await this.getAccessToken();\n    await this.http.request<void>({\n      method: \"POST\",\n      path: \"/testdata/limits/context/session\",\n      body: request,\n      authToken: token,\n    });\n  }\n\n  async restoreContextSessionLimits(): Promise<void> {\n    const token = await this.getAccessToken();\n    await this.http.request<void>({\n      method: \"DELETE\",\n      path: \"/testdata/limits/context/session\",\n      authToken: token,\n    });\n  }\n\n  async changeSubjectCertificateLimits(request: LimitsChangeRequest): Promise<void> {\n    const token = await this.getAccessToken();\n    await this.http.request<void>({\n      method: \"POST\",\n      path: \"/testdata/limits/subject/certificate\",\n      body: request,\n      authToken: token,\n    });\n  }\n\n  async restoreSubjectCertificateLimits(): Promise<void> {\n    const token = await this.getAccessToken();\n    await this.http.request<void>({\n      method: \"DELETE\",\n      path: \"/testdata/limits/subject/certificate\",\n      authToken: token,\n    });\n  }\n\n  async changeRateLimits(request: LimitsChangeRequest): Promise<void> {\n    const token = await this.getAccessToken();\n    await this.http.request<void>({\n      method: \"POST\",\n      path: \"/testdata/rate-limits\",\n      body: request,\n      authToken: token,\n    });\n  }\n\n  async restoreRateLimits(): Promise<void> {\n    const token = await this.getAccessToken();\n    await this.http.request<void>({\n      method: \"DELETE\",\n      path: \"/testdata/rate-limits\",\n      authToken: token,\n    });\n  }\n\n  async setRateLimitsProduction(request: LimitsChangeRequest): Promise<void> {\n    const token = await this.getAccessToken();\n    await this.http.request<void>({\n      method: \"POST\",\n      path: \"/testdata/rate-limits/production\",\n      body: request,\n      authToken: token,\n    });\n  }\n}\n","import { BaseClient } from \"../client/baseClient\";\nimport { PeppolProvidersResponse } from \"../types/peppol\";\n\nexport class PeppolClient extends BaseClient {\n  async queryProviders(pageOffset?: number, pageSize?: number): Promise<PeppolProvidersResponse> {\n    const query =\n      pageOffset !== undefined || pageSize !== undefined ? { pageOffset, pageSize } : undefined;\n    return this.http.request<PeppolProvidersResponse>({\n      method: \"GET\",\n      path: \"/peppol/query\",\n      ...(query ? { query } : {}),\n    });\n  }\n}\n","import { BaseClient } from \"../client/baseClient\";\nimport {\n  EntityPermissionsQueryRequest,\n  PermissionsGrantRequest,\n  PermissionsListResponse,\n  PermissionsOperationResponse,\n  PermissionsQueryPaging,\n  PermissionsQueryRequest,\n  QueryEntityPermissionsResponse,\n} from \"../types/permissions\";\n\nexport class PermissionsClient extends BaseClient {\n  async grantAuthorizations(\n    request: PermissionsGrantRequest,\n  ): Promise<PermissionsOperationResponse> {\n    return this.postOperation(\"/permissions/authorizations/grants\", request);\n  }\n\n  async grantEntities(request: PermissionsGrantRequest): Promise<PermissionsOperationResponse> {\n    return this.postOperation(\"/permissions/entities/grants\", request);\n  }\n\n  async grantEuEntitiesAdministration(\n    request: PermissionsGrantRequest,\n  ): Promise<PermissionsOperationResponse> {\n    return this.postOperation(\"/permissions/eu-entities/administration/grants\", request);\n  }\n\n  async grantEuEntities(request: PermissionsGrantRequest): Promise<PermissionsOperationResponse> {\n    return this.postOperation(\"/permissions/eu-entities/grants\", request);\n  }\n\n  async grantIndirect(request: PermissionsGrantRequest): Promise<PermissionsOperationResponse> {\n    return this.postOperation(\"/permissions/indirect/grants\", request);\n  }\n\n  async grantPersons(request: PermissionsGrantRequest): Promise<PermissionsOperationResponse> {\n    return this.postOperation(\"/permissions/persons/grants\", request);\n  }\n\n  async grantSubunits(request: PermissionsGrantRequest): Promise<PermissionsOperationResponse> {\n    return this.postOperation(\"/permissions/subunits/grants\", request);\n  }\n\n  async revokeAuthorizationGrant(permissionId: string): Promise<void> {\n    return this.deleteOperation(\n      `/permissions/authorizations/grants/${encodeURIComponent(permissionId)}`,\n    );\n  }\n\n  async revokeCommonGrant(permissionId: string): Promise<void> {\n    return this.deleteOperation(`/permissions/common/grants/${encodeURIComponent(permissionId)}`);\n  }\n\n  async queryAuthorizations(\n    request: PermissionsQueryRequest,\n    pageOffset?: number,\n    pageSize?: number,\n  ): Promise<PermissionsListResponse> {\n    return this.postQuery(\"/permissions/query/authorizations/grants\", request, {\n      pageOffset,\n      pageSize,\n    });\n  }\n\n  async queryEntitiesRoles(\n    pageOffset?: number,\n    pageSize?: number,\n  ): Promise<PermissionsListResponse> {\n    return this.getQuery(\"/permissions/query/entities/roles\", {\n      pageOffset,\n      pageSize,\n    });\n  }\n\n  async queryEntitiesGrants(\n    request: EntityPermissionsQueryRequest,\n    pageOffset?: number,\n    pageSize?: number,\n  ): Promise<QueryEntityPermissionsResponse> {\n    const token = await this.getAccessToken();\n    const query =\n      pageOffset !== undefined || pageSize !== undefined\n        ? {\n            pageOffset,\n            pageSize,\n          }\n        : undefined;\n    return this.http.request<QueryEntityPermissionsResponse>({\n      method: \"POST\",\n      path: \"/permissions/query/entities/grants\",\n      ...(query ? { query } : {}),\n      body: request,\n      authToken: token,\n    });\n  }\n\n  async queryEuEntitiesGrants(\n    request: PermissionsQueryRequest,\n    pageOffset?: number,\n    pageSize?: number,\n  ): Promise<PermissionsListResponse> {\n    return this.postQuery(\"/permissions/query/eu-entities/grants\", request, {\n      pageOffset,\n      pageSize,\n    });\n  }\n\n  async queryPersonalGrants(\n    request: PermissionsQueryRequest,\n    pageOffset?: number,\n    pageSize?: number,\n  ): Promise<PermissionsListResponse> {\n    return this.postQuery(\"/permissions/query/personal/grants\", request, {\n      pageOffset,\n      pageSize,\n    });\n  }\n\n  async queryPersonsGrants(\n    request: PermissionsQueryRequest,\n    pageOffset?: number,\n    pageSize?: number,\n  ): Promise<PermissionsListResponse> {\n    return this.postQuery(\"/permissions/query/persons/grants\", request, {\n      pageOffset,\n      pageSize,\n    });\n  }\n\n  async querySubordinateEntitiesRoles(\n    request: PermissionsQueryRequest,\n    pageOffset?: number,\n    pageSize?: number,\n  ): Promise<PermissionsListResponse> {\n    return this.postQuery(\"/permissions/query/subordinate-entities/roles\", request, {\n      pageOffset,\n      pageSize,\n    });\n  }\n\n  async querySubunitsGrants(\n    request: PermissionsQueryRequest,\n    pageOffset?: number,\n    pageSize?: number,\n  ): Promise<PermissionsListResponse> {\n    return this.postQuery(\"/permissions/query/subunits/grants\", request, {\n      pageOffset,\n      pageSize,\n    });\n  }\n\n  async getAttachmentPermissionStatus(): Promise<PermissionsOperationResponse> {\n    const token = await this.getAccessToken();\n    return this.http.request<PermissionsOperationResponse>({\n      method: \"GET\",\n      path: \"/permissions/attachments/status\",\n      authToken: token,\n    });\n  }\n\n  async getOperationStatus(referenceNumber: string): Promise<PermissionsOperationResponse> {\n    const token = await this.getAccessToken();\n    return this.http.request<PermissionsOperationResponse>({\n      method: \"GET\",\n      path: `/permissions/operations/${encodeURIComponent(referenceNumber)}`,\n      authToken: token,\n    });\n  }\n\n  private async postOperation(\n    path: string,\n    body: PermissionsGrantRequest,\n  ): Promise<PermissionsOperationResponse> {\n    const token = await this.getAccessToken();\n    return this.http.request<PermissionsOperationResponse>({\n      method: \"POST\",\n      path,\n      body,\n      authToken: token,\n    });\n  }\n\n  private async deleteOperation(path: string): Promise<void> {\n    const token = await this.getAccessToken();\n    await this.http.request<void>({\n      method: \"DELETE\",\n      path,\n      authToken: token,\n    });\n  }\n\n  private async postQuery(\n    path: string,\n    body: PermissionsQueryRequest,\n    paging?: PermissionsQueryPaging,\n  ): Promise<PermissionsListResponse> {\n    const token = await this.getAccessToken();\n    const query =\n      paging && (paging.pageOffset !== undefined || paging.pageSize !== undefined)\n        ? {\n            pageOffset: paging.pageOffset,\n            pageSize: paging.pageSize,\n          }\n        : undefined;\n    return this.http.request<PermissionsListResponse>({\n      method: \"POST\",\n      path,\n      ...(query ? { query } : {}),\n      body,\n      authToken: token,\n    });\n  }\n\n  private async getQuery(\n    path: string,\n    paging?: PermissionsQueryPaging,\n  ): Promise<PermissionsListResponse> {\n    const token = await this.getAccessToken();\n    const query =\n      paging && (paging.pageOffset !== undefined || paging.pageSize !== undefined)\n        ? {\n            pageOffset: paging.pageOffset,\n            pageSize: paging.pageSize,\n          }\n        : undefined;\n    return this.http.request<PermissionsListResponse>({\n      method: \"GET\",\n      path,\n      ...(query ? { query } : {}),\n      authToken: token,\n    });\n  }\n}\n","import { BaseClient } from \"../client/baseClient\";\nimport { PublicKeyCertificate } from \"../types/security\";\n\nexport class SecurityClient extends BaseClient {\n  async getPublicKeyCertificates(): Promise<PublicKeyCertificate[]> {\n    return this.http.request<PublicKeyCertificate[]>({\n      method: \"GET\",\n      path: \"/security/public-key-certificates\",\n      responseType: \"json\",\n    });\n  }\n}\n","import { BaseClient } from \"../client/baseClient\";\nimport {\n  GetSessionsQueryParams,\n  OpenBatchSessionRequest,\n  OpenBatchSessionResponse,\n  OpenOnlineSessionRequest,\n  OpenOnlineSessionResponse,\n  SendInvoiceRequest,\n  SendInvoiceResponse,\n  SessionFailedInvoicesResponse,\n  SessionInvoiceStatusResponse,\n  SessionInvoicesResponse,\n  SessionStatusResponse,\n  SessionsListResponse,\n} from \"../types/sessions\";\n\nexport class SessionsClient extends BaseClient {\n  async getSessions(\n    query: GetSessionsQueryParams,\n    continuationToken?: string,\n  ): Promise<SessionsListResponse> {\n    const token = await this.getAccessToken();\n    const headers =\n      continuationToken !== undefined ? { \"x-continuation-token\": continuationToken } : undefined;\n    const queryParams = {\n      sessionType: query.sessionType,\n      referenceNumber: query.referenceNumber,\n      dateCreatedFrom: query.dateCreatedFrom,\n      dateCreatedTo: query.dateCreatedTo,\n      dateClosedFrom: query.dateClosedFrom,\n      dateClosedTo: query.dateClosedTo,\n      dateModifiedFrom: query.dateModifiedFrom,\n      dateModifiedTo: query.dateModifiedTo,\n      statuses: query.statuses,\n      pageSize: query.pageSize,\n    };\n    return this.http.request<SessionsListResponse>({\n      method: \"GET\",\n      path: \"/sessions\",\n      ...(headers ? { headers } : {}),\n      query: queryParams,\n      authToken: token,\n    });\n  }\n\n  async getSessionStatus(referenceNumber: string): Promise<SessionStatusResponse> {\n    const token = await this.getAccessToken();\n    return this.http.request<SessionStatusResponse>({\n      method: \"GET\",\n      path: `/sessions/${encodeURIComponent(referenceNumber)}`,\n      authToken: token,\n    });\n  }\n\n  async getSessionInvoices(\n    referenceNumber: string,\n    pageOffset?: number,\n    pageSize?: number,\n    continuationToken?: string,\n  ): Promise<SessionInvoicesResponse> {\n    const token = await this.getAccessToken();\n    const headers =\n      continuationToken !== undefined ? { \"x-continuation-token\": continuationToken } : undefined;\n    return this.http.request<SessionInvoicesResponse>({\n      method: \"GET\",\n      path: `/sessions/${encodeURIComponent(referenceNumber)}/invoices`,\n      ...(headers ? { headers } : {}),\n      query: {\n        pageOffset,\n        pageSize,\n      },\n      authToken: token,\n    });\n  }\n\n  async getSessionInvoiceStatus(\n    referenceNumber: string,\n    invoiceReferenceNumber: string,\n  ): Promise<SessionInvoiceStatusResponse> {\n    const token = await this.getAccessToken();\n    return this.http.request<SessionInvoiceStatusResponse>({\n      method: \"GET\",\n      path: `/sessions/${encodeURIComponent(referenceNumber)}/invoices/${encodeURIComponent(\n        invoiceReferenceNumber,\n      )}`,\n      authToken: token,\n    });\n  }\n\n  async getSessionInvoiceUpoByReferenceNumber(\n    referenceNumber: string,\n    invoiceReferenceNumber: string,\n  ): Promise<string> {\n    const token = await this.getAccessToken();\n    return this.http.request<string>({\n      method: \"GET\",\n      path: `/sessions/${encodeURIComponent(referenceNumber)}/invoices/${encodeURIComponent(\n        invoiceReferenceNumber,\n      )}/upo`,\n      authToken: token,\n      responseType: \"text\",\n      headers: {\n        Accept: \"application/xml\",\n      },\n    });\n  }\n\n  async getSessionInvoiceUpoByKsefNumber(\n    referenceNumber: string,\n    ksefNumber: string,\n  ): Promise<string> {\n    const token = await this.getAccessToken();\n    return this.http.request<string>({\n      method: \"GET\",\n      path: `/sessions/${encodeURIComponent(referenceNumber)}/invoices/ksef/${encodeURIComponent(\n        ksefNumber,\n      )}/upo`,\n      authToken: token,\n      responseType: \"text\",\n      headers: {\n        Accept: \"application/xml\",\n      },\n    });\n  }\n\n  async getSessionUpo(referenceNumber: string, upoReferenceNumber: string): Promise<string> {\n    const token = await this.getAccessToken();\n    return this.http.request<string>({\n      method: \"GET\",\n      path: `/sessions/${encodeURIComponent(referenceNumber)}/upo/${encodeURIComponent(\n        upoReferenceNumber,\n      )}`,\n      authToken: token,\n      responseType: \"text\",\n      headers: {\n        Accept: \"application/xml\",\n      },\n    });\n  }\n\n  async getSessionFailedInvoices(\n    referenceNumber: string,\n    pageSize?: number,\n    continuationToken?: string,\n  ): Promise<SessionFailedInvoicesResponse> {\n    const token = await this.getAccessToken();\n    const headers =\n      continuationToken !== undefined ? { \"x-continuation-token\": continuationToken } : undefined;\n    return this.http.request<SessionFailedInvoicesResponse>({\n      method: \"GET\",\n      path: `/sessions/${encodeURIComponent(referenceNumber)}/invoices/failed`,\n      ...(headers ? { headers } : {}),\n      query: {\n        pageSize,\n      },\n      authToken: token,\n    });\n  }\n\n  async openOnlineSession(\n    request: OpenOnlineSessionRequest,\n    upoV43?: boolean,\n  ): Promise<OpenOnlineSessionResponse> {\n    const token = await this.getAccessToken();\n    return this.http.request<OpenOnlineSessionResponse>({\n      method: \"POST\",\n      path: \"/sessions/online\",\n      body: request,\n      ...(upoV43 ? { headers: { \"X-KSeF-Feature\": \"upo-v4-3\" } } : {}),\n      authToken: token,\n    });\n  }\n\n  async sendOnlineInvoice(\n    referenceNumber: string,\n    request: SendInvoiceRequest,\n  ): Promise<SendInvoiceResponse> {\n    const token = await this.getAccessToken();\n    return this.http.request<SendInvoiceResponse>({\n      method: \"POST\",\n      path: `/sessions/online/${encodeURIComponent(referenceNumber)}/invoices`,\n      body: request,\n      authToken: token,\n    });\n  }\n\n  async closeOnlineSession(referenceNumber: string): Promise<void> {\n    const token = await this.getAccessToken();\n    await this.http.request<void>({\n      method: \"POST\",\n      path: `/sessions/online/${encodeURIComponent(referenceNumber)}/close`,\n      authToken: token,\n    });\n  }\n\n  async openBatchSession(\n    request: OpenBatchSessionRequest,\n    upoV43?: boolean,\n  ): Promise<OpenBatchSessionResponse> {\n    const token = await this.getAccessToken();\n    return this.http.request<OpenBatchSessionResponse>({\n      method: \"POST\",\n      path: \"/sessions/batch\",\n      body: request,\n      ...(upoV43 ? { headers: { \"X-KSeF-Feature\": \"upo-v4-3\" } } : {}),\n      authToken: token,\n    });\n  }\n\n  async closeBatchSession(referenceNumber: string): Promise<void> {\n    const token = await this.getAccessToken();\n    await this.http.request<void>({\n      method: \"POST\",\n      path: `/sessions/batch/${encodeURIComponent(referenceNumber)}/close`,\n      authToken: token,\n    });\n  }\n}\n","const CERTIFICATE_SERIAL_NUMBER_PATTERN = /^[0-9A-F]{16}$/;\n\nexport interface CertificateSerialValidationResult {\n  isValid: boolean;\n  message?: string;\n}\n\nexport function validateCertificateSerialNumber(\n  serialNumber: string,\n): CertificateSerialValidationResult {\n  if (!serialNumber) {\n    return { isValid: false, message: \"empty value\" };\n  }\n\n  if (!CERTIFICATE_SERIAL_NUMBER_PATTERN.test(serialNumber)) {\n    return { isValid: false, message: \"invalid format\" };\n  }\n\n  return { isValid: true, message: \"ok\" };\n}\n\nexport function isValidCertificateSerialNumber(serialNumber: string): boolean {\n  return validateCertificateSerialNumber(serialNumber).isValid;\n}\n\nexport function requireCertificateSerialNumber(serialNumber: string): string {\n  const result = validateCertificateSerialNumber(serialNumber);\n  if (!result.isValid) {\n    throw new Error(`Invalid certificate serial number: ${result.message}`);\n  }\n  return serialNumber;\n}\n","import { BaseClient } from \"../client/baseClient\";\nimport {\n  TestDataContextBlockRequest,\n  TestDataContextBlockResponse,\n  TestDataContextUnblockRequest,\n  TestDataContextUnblockResponse,\n  TestdataRequest,\n  TestdataResponse,\n  TestDataUpdateCertificateRequest,\n} from \"../types/testdata\";\nimport { requireCertificateSerialNumber } from \"../utils/certificateSerial\";\n\nexport class TestdataClient extends BaseClient {\n  async enableAttachments(request: TestdataRequest): Promise<TestdataResponse> {\n    return this.post(\"/testdata/attachment\", request);\n  }\n\n  async revokeAttachments(request: TestdataRequest): Promise<TestdataResponse> {\n    return this.post(\"/testdata/attachment/revoke\", request);\n  }\n\n  async grantPermissions(request: TestdataRequest): Promise<TestdataResponse> {\n    return this.post(\"/testdata/permissions\", request);\n  }\n\n  async revokePermissions(request: TestdataRequest): Promise<TestdataResponse> {\n    return this.post(\"/testdata/permissions/revoke\", request);\n  }\n\n  async blockContext(request: TestDataContextBlockRequest): Promise<TestDataContextBlockResponse> {\n    return this.post(\"/testdata/context/block\", request);\n  }\n\n  async unblockContext(\n    request: TestDataContextUnblockRequest,\n  ): Promise<TestDataContextUnblockResponse> {\n    return this.post(\"/testdata/context/unblock\", request);\n  }\n\n  async createPerson(request: TestdataRequest): Promise<TestdataResponse> {\n    return this.post(\"/testdata/person\", request);\n  }\n\n  async removePerson(request: TestdataRequest): Promise<TestdataResponse> {\n    return this.post(\"/testdata/person/remove\", request);\n  }\n\n  async createSubject(request: TestdataRequest): Promise<TestdataResponse> {\n    return this.post(\"/testdata/subject\", request);\n  }\n\n  async removeSubject(request: TestdataRequest): Promise<TestdataResponse> {\n    return this.post(\"/testdata/subject/remove\", request);\n  }\n\n  async updateCertificate(\n    serialNumber: string,\n    request: TestDataUpdateCertificateRequest,\n  ): Promise<void> {\n    const validated = requireCertificateSerialNumber(serialNumber);\n    const token = await this.getAccessToken();\n    await this.http.request<void>({\n      method: \"PUT\",\n      path: `/testdata/certificates/${encodeURIComponent(validated)}`,\n      body: request,\n      authToken: token,\n    });\n  }\n\n  private async post<TResponse = TestdataResponse>(path: string, body: object): Promise<TResponse> {\n    const token = await this.getAccessToken();\n    return this.http.request<TResponse>({\n      method: \"POST\",\n      path,\n      body,\n      authToken: token,\n    });\n  }\n}\n","import { BaseClient } from \"../client/baseClient\";\nimport {\n  GenerateTokenRequest,\n  GenerateTokenResponse,\n  KsefTokensListQueryParams,\n  QueryTokensResponse,\n  TokenStatusResponse,\n} from \"../types/tokens\";\n\nexport class TokensClient extends BaseClient {\n  async listTokens(\n    params?: KsefTokensListQueryParams,\n    continuationToken?: string,\n  ): Promise<QueryTokensResponse> {\n    const token = await this.getAccessToken();\n    const headers =\n      continuationToken !== undefined ? { \"x-continuation-token\": continuationToken } : undefined;\n    const query = params\n      ? {\n          status: params.status,\n          description: params.description,\n          authorIdentifier: params.authorIdentifier,\n          authorIdentifierType: params.authorIdentifierType,\n          pageSize: params.pageSize,\n        }\n      : undefined;\n    return this.http.request<QueryTokensResponse>({\n      method: \"GET\",\n      path: \"/tokens\",\n      ...(headers ? { headers } : {}),\n      ...(query ? { query } : {}),\n      authToken: token,\n    });\n  }\n\n  async generateToken(request: GenerateTokenRequest): Promise<GenerateTokenResponse> {\n    const token = await this.getAccessToken();\n    return this.http.request<GenerateTokenResponse>({\n      method: \"POST\",\n      path: \"/tokens\",\n      body: request,\n      authToken: token,\n    });\n  }\n\n  async getToken(referenceNumber: string): Promise<TokenStatusResponse> {\n    const token = await this.getAccessToken();\n    return this.http.request<TokenStatusResponse>({\n      method: \"GET\",\n      path: `/tokens/${encodeURIComponent(referenceNumber)}`,\n      authToken: token,\n    });\n  }\n\n  async revokeToken(referenceNumber: string): Promise<void> {\n    const token = await this.getAccessToken();\n    await this.http.request<void>({\n      method: \"DELETE\",\n      path: `/tokens/${encodeURIComponent(referenceNumber)}`,\n      authToken: token,\n    });\n  }\n}\n","export function toBase64Url(input: Buffer): string {\n  return input.toString(\"base64\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/g, \"\");\n}\n\nexport function fromBase64Url(input: string): Buffer {\n  const padded = input.replace(/-/g, \"+\").replace(/_/g, \"/\");\n  const padLength = (4 - (padded.length % 4)) % 4;\n  const base64 = padded + \"=\".repeat(padLength);\n  return Buffer.from(base64, \"base64\");\n}\n","import crypto from \"node:crypto\";\nimport { EncryptionInfo, FileMetadata } from \"../types/common\";\nimport { toBase64Url } from \"../utils/base64url\";\n\nexport interface EncryptionData {\n  cipherKey: Buffer;\n  cipherIv: Buffer;\n  encryptionInfo: EncryptionInfo;\n}\n\nexport interface PreparedInvoicePayload {\n  invoiceHash: string;\n  invoiceSize: number;\n  encryptedInvoiceHash: string;\n  encryptedInvoiceSize: number;\n  encryptedInvoiceContent: string;\n}\n\nexport class CryptographyService {\n  static generateAesKey(): Buffer {\n    return crypto.randomBytes(32);\n  }\n\n  static generateIv(): Buffer {\n    return crypto.randomBytes(16);\n  }\n\n  static sha256Base64(data: Buffer | string): string {\n    const hash = crypto.createHash(\"sha256\").update(data).digest(\"base64\");\n    return hash;\n  }\n\n  static sha256Base64Url(data: Buffer | string): string {\n    const hash = crypto.createHash(\"sha256\").update(data).digest();\n    return toBase64Url(hash);\n  }\n\n  static encryptAes256Cbc(data: Buffer, key: Buffer, iv: Buffer): Buffer {\n    const cipher = crypto.createCipheriv(\"aes-256-cbc\", key, iv);\n    return Buffer.concat([cipher.update(data), cipher.final()]);\n  }\n\n  static decryptAes256Cbc(data: Buffer, key: Buffer, iv: Buffer): Buffer {\n    const cipher = crypto.createDecipheriv(\"aes-256-cbc\", key, iv);\n    return Buffer.concat([cipher.update(data), cipher.final()]);\n  }\n\n  static encryptRsaOaepSha256(data: Buffer, publicKeyPem: string): Buffer {\n    return crypto.publicEncrypt(\n      {\n        key: publicKeyPem,\n        padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,\n        oaepHash: \"sha256\",\n      },\n      data,\n    );\n  }\n\n  static encryptKsefTokenRsa(\n    token: string,\n    timestampMs: number,\n    publicCertificate: string,\n  ): Buffer {\n    const payload = Buffer.from(`${token.trim()}|${timestampMs}`, \"utf8\");\n    const publicKeyPem = CryptographyService.normalizeCertificatePem(publicCertificate);\n    return CryptographyService.encryptRsaOaepSha256(payload, publicKeyPem);\n  }\n\n  static encryptKsefTokenEc(\n    token: string,\n    timestampMs: number,\n    publicCertificate: string,\n    outputFormat: \"java\" | \"csharp\" = \"java\",\n  ): Buffer {\n    const payload = Buffer.from(`${token.trim()}|${timestampMs}`, \"utf8\");\n    const publicKeyPem = CryptographyService.normalizeCertificatePem(publicCertificate);\n    const publicKey = crypto.createPublicKey(publicKeyPem);\n    const { privateKey, publicKey: ephemeralPublicKey } = crypto.generateKeyPairSync(\"ec\", {\n      namedCurve: \"prime256v1\",\n    });\n    const sharedSecret = crypto.diffieHellman({\n      privateKey,\n      publicKey,\n    });\n    const aesKey = sharedSecret.subarray(0, 32);\n    const nonce = crypto.randomBytes(12);\n    const cipher = crypto.createCipheriv(\"aes-256-gcm\", aesKey, nonce);\n    const ciphertext = Buffer.concat([cipher.update(payload), cipher.final()]);\n    const tag = cipher.getAuthTag();\n    const spki = ephemeralPublicKey.export({ type: \"spki\", format: \"der\" });\n    if (outputFormat === \"csharp\") {\n      return Buffer.concat([spki, nonce, tag, ciphertext]);\n    }\n    return Buffer.concat([spki, nonce, ciphertext, tag]);\n  }\n\n  static encryptKsefToken(\n    token: string,\n    timestampMs: number,\n    publicCertificate: string,\n    method: \"rsa\" | \"ec\" = \"rsa\",\n    ecOutputFormat: \"java\" | \"csharp\" = \"java\",\n  ): string {\n    const encrypted =\n      method === \"ec\"\n        ? CryptographyService.encryptKsefTokenEc(\n            token,\n            timestampMs,\n            publicCertificate,\n            ecOutputFormat,\n          )\n        : CryptographyService.encryptKsefTokenRsa(token, timestampMs, publicCertificate);\n    return encrypted.toString(\"base64\");\n  }\n\n  static toPemFromBase64Der(base64Der: string, label = \"CERTIFICATE\"): string {\n    const chunked = base64Der.match(/.{1,64}/g)?.join(\"\\n\") ?? base64Der;\n    return `-----BEGIN ${label}-----\\n${chunked}\\n-----END ${label}-----\\n`;\n  }\n\n  static normalizeCertificatePem(certificate: string): string {\n    if (certificate.includes(\"BEGIN \")) {\n      const trimmed = certificate.trim();\n      return certificate.endsWith(\"\\n\") ? certificate : `${trimmed}\\n`;\n    }\n    return CryptographyService.toPemFromBase64Der(certificate);\n  }\n\n  static getMetaData(data: Buffer | Uint8Array): FileMetadata {\n    const buffer = Buffer.from(data);\n    return {\n      hashSha256Base64: CryptographyService.sha256Base64(buffer),\n      fileSize: buffer.length,\n    };\n  }\n\n  static getEncryptionData(publicCertBase64Der: string): EncryptionData {\n    const cipherKey = CryptographyService.generateAesKey();\n    const cipherIv = CryptographyService.generateIv();\n    const pem = CryptographyService.toPemFromBase64Der(publicCertBase64Der);\n    const encryptedKey = CryptographyService.encryptRsaOaepSha256(cipherKey, pem);\n\n    return {\n      cipherKey,\n      cipherIv,\n      encryptionInfo: {\n        encryptedSymmetricKey: encryptedKey.toString(\"base64\"),\n        initializationVector: cipherIv.toString(\"base64\"),\n      },\n    };\n  }\n\n  static prepareInvoicePayload(\n    invoiceXml: Buffer,\n    cipherKey: Buffer,\n    cipherIv: Buffer,\n  ): PreparedInvoicePayload {\n    const encrypted = CryptographyService.encryptAes256Cbc(invoiceXml, cipherKey, cipherIv);\n    return {\n      invoiceHash: CryptographyService.sha256Base64(invoiceXml),\n      invoiceSize: invoiceXml.length,\n      encryptedInvoiceHash: CryptographyService.sha256Base64(encrypted),\n      encryptedInvoiceSize: encrypted.length,\n      encryptedInvoiceContent: encrypted.toString(\"base64\"),\n    };\n  }\n}\n","const AUTH_NS = \"http://ksef.mf.gov.pl/auth/token/2.0\";\n\nexport interface AuthTokenRequestXmlOptions {\n  challenge: string;\n  contextIdentifierType: string;\n  contextIdentifierValue: string;\n  subjectIdentifierType?: string;\n  authorizationPolicyXml?: string | null;\n}\n\nexport function buildAuthTokenRequestXml(options: AuthTokenRequestXmlOptions): string {\n  const contextTag = normalizeContextIdentifierType(options.contextIdentifierType);\n  const authorizationPolicy = options.authorizationPolicyXml\n    ? `\\n  ${options.authorizationPolicyXml}`\n    : \"\";\n  return (\n    '<?xml version=\"1.0\" encoding=\"utf-8\"?>\\n' +\n    `<AuthTokenRequest xmlns=\"${AUTH_NS}\">\\n` +\n    `  <Challenge>${options.challenge}</Challenge>\\n` +\n    \"  <ContextIdentifier>\\n\" +\n    `    <${contextTag}>${options.contextIdentifierValue}</${contextTag}>\\n` +\n    \"  </ContextIdentifier>\\n\" +\n    `  <SubjectIdentifierType>${\n      options.subjectIdentifierType ?? \"certificateSubject\"\n    }</SubjectIdentifierType>${authorizationPolicy}\\n` +\n    \"</AuthTokenRequest>\"\n  );\n}\n\nexport function normalizeContextIdentifierType(value: string): string {\n  const key = value.trim().toLowerCase();\n  if (key === \"nip\") {\n    return \"Nip\";\n  }\n  if (key === \"internalid\") {\n    return \"InternalId\";\n  }\n  if (key === \"nipvatue\") {\n    return \"NipVatUe\";\n  }\n  if (key === \"peppolid\") {\n    return \"PeppolId\";\n  }\n  throw new Error(\"Unsupported context identifier type\");\n}\n","import crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport { DOMParser } from \"@xmldom/xmldom\";\nimport xmlCrypto from \"xml-crypto\";\nimport xpath from \"xpath\";\n\nconst DS_NS = \"http://www.w3.org/2000/09/xmldsig#\";\nconst XADES_NS = \"http://uri.etsi.org/01903/v1.3.2#\";\nconst SIGNED_PROPERTIES_TYPE = \"http://uri.etsi.org/01903#SignedProperties\";\n\ntype XmlDocument = ReturnType<DOMParser[\"parseFromString\"]>;\ntype XmlElement = ReturnType<XmlDocument[\"createElementNS\"]>;\ntype XmlChildNode = ReturnType<XmlElement[\"cloneNode\"]>;\n\ninterface SignedXmlReferenceLike {\n  xpath?: string;\n  transforms?: string[];\n  digestAlgorithm: string;\n  isEmptyUri?: boolean;\n  type?: string;\n  uri?: string;\n  inclusiveNamespacesPrefixList?: string[];\n}\n\ninterface SignedXmlAlgorithmLike {\n  getAlgorithmName(): string;\n}\n\ninterface SignedXmlLike {\n  signatureAlgorithm: string;\n  canonicalizationAlgorithm: string;\n  privateKey: crypto.KeyObject;\n  publicCert: string;\n  namespaceResolver?: { lookupNamespaceURI: () => null };\n  signatureNode?: XmlElement;\n  SignatureAlgorithms?: Record<string, new () => SignedXmlAlgorithmLike>;\n  addReference(reference: {\n    xpath: string;\n    transforms: string[];\n    digestAlgorithm: string;\n    isEmptyUri?: boolean;\n  }): void;\n  getReferences(): SignedXmlReferenceLike[];\n  createSignedInfo(doc: XmlDocument, prefix?: string): string;\n  calculateSignatureValue(doc: XmlDocument): void;\n  createSignature(prefix?: string): XmlChildNode;\n  getKeyInfo(prefix?: string): string;\n  ensureHasId(node: unknown): string;\n  findCanonicalizationAlgorithm(uri: string): { getAlgorithmName(): string };\n  getCanonReferenceXml(doc: XmlDocument, reference: SignedXmlReferenceLike, node: unknown): string;\n  findHashAlgorithm(uri: string): { getAlgorithmName(): string; getHash(input: string): string };\n}\n\ninterface SignedXmlConstructor {\n  new (): SignedXmlLike;\n}\n\nexport interface XadesPemKeyPairOptions {\n  certificatePem: string;\n  privateKeyPem: string;\n  privateKeyPassword?: string;\n}\n\nexport interface XadesPemKeyPairFilesOptions {\n  certificatePath: string;\n  privateKeyPath: string;\n  privateKeyPassword?: string;\n}\n\nexport interface XadesPkcs12KeyPairOptions {\n  pkcs12Bytes: Uint8Array;\n  pkcs12Password?: string;\n}\n\nexport interface XadesPkcs12KeyPairFileOptions {\n  pkcs12Path: string;\n  pkcs12Password?: string;\n}\n\nexport class XadesKeyPair {\n  readonly certificatePem: string;\n  readonly privateKey: crypto.KeyObject;\n  readonly certificateChainPem: readonly string[];\n\n  private constructor(\n    certificatePem: string,\n    privateKey: crypto.KeyObject,\n    certificateChainPem: readonly string[] = [],\n  ) {\n    this.certificatePem = ensurePemCertificate(certificatePem);\n    this.privateKey = privateKey;\n    this.certificateChainPem = certificateChainPem.map(ensurePemCertificate);\n  }\n\n  static fromPem(options: XadesPemKeyPairOptions): XadesKeyPair {\n    const privateKey = crypto.createPrivateKey({\n      key: options.privateKeyPem,\n      format: \"pem\",\n      passphrase: options.privateKeyPassword,\n    });\n    return new XadesKeyPair(options.certificatePem, privateKey);\n  }\n\n  static fromPemFiles(options: XadesPemKeyPairFilesOptions): XadesKeyPair {\n    const certificatePem = readCertificateAsPem(options.certificatePath);\n    const privateKeyPem = fs.readFileSync(options.privateKeyPath);\n    const privateKey = readPrivateKey(privateKeyPem, options.privateKeyPassword);\n    return new XadesKeyPair(certificatePem, privateKey);\n  }\n\n  static async fromPkcs12(options: XadesPkcs12KeyPairOptions): Promise<XadesKeyPair> {\n    const { certificatePem, privateKeyPem, certificateChainPem } = await loadFromPkcs12(options);\n    const privateKey = crypto.createPrivateKey({\n      key: privateKeyPem,\n      format: \"pem\",\n    });\n    return new XadesKeyPair(certificatePem, privateKey, certificateChainPem);\n  }\n\n  static async fromPkcs12File(options: XadesPkcs12KeyPairFileOptions): Promise<XadesKeyPair> {\n    const pkcs12Bytes = fs.readFileSync(options.pkcs12Path);\n    return await XadesKeyPair.fromPkcs12({\n      pkcs12Bytes,\n      ...(options.pkcs12Password !== undefined && { pkcs12Password: options.pkcs12Password }),\n    });\n  }\n}\n\nexport interface SignXadesEnvelopedOptions {\n  xml: string;\n  keyPair: XadesKeyPair;\n  signatureId?: string;\n  signedPropertiesId?: string;\n  signingTime?: Date;\n  signingTimeSkewMs?: number;\n}\n\nexport class XadesSignatureService {\n  signXadesEnveloped(options: SignXadesEnvelopedOptions): string {\n    const signatureId = options.signatureId ?? `Signature-${crypto.randomUUID()}`;\n    const signedPropertiesId = options.signedPropertiesId ?? \"SignedProperties\";\n\n    const signingTime =\n      options.signingTime ?? new Date(Date.now() + (options.signingTimeSkewMs ?? -60_000));\n\n    const { certificatePem, privateKey } = options.keyPair;\n    const certificate = new crypto.X509Certificate(certificatePem);\n\n    const signatureAlgorithm = signatureAlgorithmForCertificate(certificate);\n\n    const { SignedXml } = xmlCrypto as unknown as { SignedXml: SignedXmlConstructor };\n    const sig = new SignedXml();\n\n    sig.signatureAlgorithm = signatureAlgorithm;\n    sig.canonicalizationAlgorithm = \"http://www.w3.org/2001/10/xml-exc-c14n#\";\n    sig.privateKey = privateKey;\n    sig.publicCert = certificatePem;\n\n    patchSignedXmlCreateReferences(sig);\n    ensureEcdsaSha256Algorithm(sig);\n\n    sig.addReference({\n      xpath: \"/*[local-name()='AuthTokenRequest']\",\n      transforms: [\n        \"http://www.w3.org/2000/09/xmldsig#enveloped-signature\",\n        \"http://www.w3.org/2001/10/xml-exc-c14n#\",\n      ],\n      digestAlgorithm: \"http://www.w3.org/2001/04/xmlenc#sha256\",\n      isEmptyUri: true,\n    });\n\n    sig.addReference({\n      xpath: `//*[local-name(.)='SignedProperties' and @Id='${signedPropertiesId}']`,\n      transforms: [\"http://www.w3.org/2001/10/xml-exc-c14n#\"],\n      digestAlgorithm: \"http://www.w3.org/2001/04/xmlenc#sha256\",\n    });\n    (sig.getReferences().at(-1) as unknown as { type?: string }).type = SIGNED_PROPERTIES_TYPE;\n\n    const doc = new DOMParser().parseFromString(options.xml, \"application/xml\");\n    if (!doc.documentElement) {\n      throw new Error(\"Invalid XML: missing document element.\");\n    }\n\n    const signatureNode = createSignatureSkeleton({\n      doc,\n      signatureId,\n      signedPropertiesId,\n      certificate,\n      signingTime,\n    });\n    doc.documentElement.appendChild(signatureNode);\n\n    sig.namespaceResolver = { lookupNamespaceURI: () => null };\n\n    const signedInfoNode = parseIntoDocument(\n      doc,\n      `<ds:Signature xmlns:ds=\"${DS_NS}\">${sig.createSignedInfo(doc, \"ds\")}</ds:Signature>`,\n    );\n    if (!signedInfoNode) {\n      throw new Error(\"Failed to create SignedInfo node.\");\n    }\n    signatureNode.insertBefore(signedInfoNode, signatureNode.firstChild);\n\n    sig.signatureNode = signatureNode;\n\n    sig.calculateSignatureValue(doc);\n\n    const signatureValueNode = sig.createSignature(\"ds\");\n    signatureNode.insertBefore(signatureValueNode, signedInfoNode.nextSibling);\n\n    const keyInfoXml = sig.getKeyInfo(\"ds\");\n    if (keyInfoXml) {\n      const keyInfoNode = parseIntoDocument(\n        doc,\n        `<ds:Signature xmlns:ds=\"${DS_NS}\">${keyInfoXml}</ds:Signature>`,\n      );\n      signatureNode.insertBefore(keyInfoNode, signatureValueNode.nextSibling);\n    }\n\n    return doc.toString();\n  }\n\n  signXadesEnveloping(options: SignXadesEnvelopedOptions): string {\n    const signatureId = options.signatureId ?? `Signature-${crypto.randomUUID()}`;\n    const signedPropertiesId = options.signedPropertiesId ?? \"SignedProperties\";\n    const objectDataId = `ObjectData-${crypto.randomUUID()}`;\n\n    const signingTime =\n      options.signingTime ?? new Date(Date.now() + (options.signingTimeSkewMs ?? -60_000));\n\n    const { certificatePem, privateKey } = options.keyPair;\n    const certificate = new crypto.X509Certificate(certificatePem);\n\n    const signatureAlgorithm = signatureAlgorithmForCertificate(certificate);\n\n    const { SignedXml } = xmlCrypto as unknown as { SignedXml: SignedXmlConstructor };\n    const sig = new SignedXml();\n\n    sig.signatureAlgorithm = signatureAlgorithm;\n    sig.canonicalizationAlgorithm = \"http://www.w3.org/2001/10/xml-exc-c14n#\";\n    sig.privateKey = privateKey;\n    sig.publicCert = certificatePem;\n\n    patchSignedXmlCreateReferences(sig);\n    ensureEcdsaSha256Algorithm(sig);\n\n    const originalDoc = new DOMParser().parseFromString(options.xml, \"application/xml\");\n    if (!originalDoc.documentElement) {\n      throw new Error(\"Invalid XML: missing document element.\");\n    }\n\n    // Create a new document where Signature is the root (enveloping).\n    const signatureDoc = new DOMParser().parseFromString(\n      `<ds:Signature xmlns:ds=\"${DS_NS}\"></ds:Signature>`,\n      \"application/xml\",\n    );\n    const signatureNode = signatureDoc.documentElement;\n    signatureNode.setAttribute(\"Id\", signatureId);\n\n    // ds:Object holding the signed data\n    const dataObjectNode = signatureDoc.createElementNS(DS_NS, \"ds:Object\");\n    signatureNode.appendChild(dataObjectNode);\n\n    // Move AuthTokenRequest into ds:Object and assign Id so Reference can target it\n    const authTokenRequestNode = originalDoc.documentElement.cloneNode(true) as XmlElement;\n    authTokenRequestNode.setAttribute(\"Id\", objectDataId);\n    const importedAuthTokenRequestNode =\n      typeof signatureDoc.importNode === \"function\"\n        ? (signatureDoc.importNode(authTokenRequestNode, true) as XmlElement)\n        : authTokenRequestNode;\n    dataObjectNode.appendChild(importedAuthTokenRequestNode);\n\n    // XAdES object\n    const xadesObjectNode = signatureDoc.createElementNS(DS_NS, \"ds:Object\");\n    signatureNode.appendChild(xadesObjectNode);\n    xadesObjectNode.appendChild(\n      createQualifyingPropertiesNode({\n        doc: signatureDoc,\n        signatureId,\n        signedPropertiesId,\n        certificate,\n        signingTime,\n      }),\n    );\n\n    // Reference to AuthTokenRequest (enveloping: no enveloped transform)\n    sig.addReference({\n      xpath: `//*[local-name()='AuthTokenRequest' and @Id='${objectDataId}']`,\n      transforms: [\"http://www.w3.org/2001/10/xml-exc-c14n#\"],\n      digestAlgorithm: \"http://www.w3.org/2001/04/xmlenc#sha256\",\n    });\n\n    // Reference to SignedProperties\n    sig.addReference({\n      xpath: `//*[local-name(.)='SignedProperties' and @Id='${signedPropertiesId}']`,\n      transforms: [\"http://www.w3.org/2001/10/xml-exc-c14n#\"],\n      digestAlgorithm: \"http://www.w3.org/2001/04/xmlenc#sha256\",\n    });\n    (sig.getReferences().at(-1) as unknown as { type?: string }).type = SIGNED_PROPERTIES_TYPE;\n\n    sig.namespaceResolver = { lookupNamespaceURI: () => null };\n\n    const signedInfoNode = parseIntoDocument(\n      signatureDoc,\n      `<ds:Signature xmlns:ds=\"${DS_NS}\">${sig.createSignedInfo(signatureDoc, \"ds\")}</ds:Signature>`,\n    );\n    signatureNode.insertBefore(signedInfoNode, signatureNode.firstChild);\n\n    sig.signatureNode = signatureNode;\n\n    sig.calculateSignatureValue(signatureDoc);\n\n    const signatureValueNode = sig.createSignature(\"ds\");\n    signatureNode.insertBefore(signatureValueNode, signedInfoNode.nextSibling);\n\n    const keyInfoXml = sig.getKeyInfo(\"ds\");\n    if (keyInfoXml) {\n      const keyInfoNode = parseIntoDocument(\n        signatureDoc,\n        `<ds:Signature xmlns:ds=\"${DS_NS}\">${keyInfoXml}</ds:Signature>`,\n      );\n      signatureNode.insertBefore(keyInfoNode, signatureValueNode.nextSibling);\n    }\n\n    return signatureDoc.toString();\n  }\n}\n\nfunction signatureAlgorithmForCertificate(certificate: crypto.X509Certificate): string {\n  const publicKeyType = certificate.publicKey.asymmetricKeyType;\n  if (publicKeyType === \"rsa\") {\n    return \"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256\";\n  }\n  if (publicKeyType === \"ec\") {\n    return \"http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256\";\n  }\n  throw new Error(`Unsupported key type for XAdES: ${publicKeyType ?? \"unknown\"}`);\n}\n\nfunction createSignatureSkeleton(options: {\n  doc: XmlDocument;\n  signatureId: string;\n  signedPropertiesId: string;\n  certificate: crypto.X509Certificate;\n  signingTime: Date;\n}): XmlElement {\n  const signature = options.doc.createElementNS(DS_NS, \"ds:Signature\");\n  signature.setAttribute(\"Id\", options.signatureId);\n\n  const objectNode = options.doc.createElementNS(DS_NS, \"ds:Object\");\n  signature.appendChild(objectNode);\n  objectNode.appendChild(\n    createQualifyingPropertiesNode({\n      doc: options.doc,\n      signatureId: options.signatureId,\n      signedPropertiesId: options.signedPropertiesId,\n      certificate: options.certificate,\n      signingTime: options.signingTime,\n    }),\n  );\n\n  return signature;\n}\n\nfunction createQualifyingPropertiesNode(options: {\n  doc: XmlDocument;\n  signatureId: string;\n  signedPropertiesId: string;\n  certificate: crypto.X509Certificate;\n  signingTime: Date;\n}): XmlElement {\n  const qualifyingProps = options.doc.createElementNS(XADES_NS, \"xades:QualifyingProperties\");\n  qualifyingProps.setAttribute(\"Target\", `#${options.signatureId}`);\n\n  const signedProperties = options.doc.createElementNS(XADES_NS, \"xades:SignedProperties\");\n  signedProperties.setAttribute(\"Id\", options.signedPropertiesId);\n  qualifyingProps.appendChild(signedProperties);\n\n  const signedSignatureProperties = options.doc.createElementNS(\n    XADES_NS,\n    \"xades:SignedSignatureProperties\",\n  );\n  signedProperties.appendChild(signedSignatureProperties);\n\n  const signingTimeNode = options.doc.createElementNS(XADES_NS, \"xades:SigningTime\");\n  signingTimeNode.appendChild(options.doc.createTextNode(options.signingTime.toISOString()));\n  signedSignatureProperties.appendChild(signingTimeNode);\n\n  const signingCertificate = options.doc.createElementNS(XADES_NS, \"xades:SigningCertificate\");\n  signedSignatureProperties.appendChild(signingCertificate);\n\n  const certNode = options.doc.createElementNS(XADES_NS, \"xades:Cert\");\n  signingCertificate.appendChild(certNode);\n\n  const certDigestNode = options.doc.createElementNS(XADES_NS, \"xades:CertDigest\");\n  certNode.appendChild(certDigestNode);\n\n  const digestMethod = options.doc.createElementNS(DS_NS, \"ds:DigestMethod\");\n  digestMethod.setAttribute(\"Algorithm\", \"http://www.w3.org/2001/04/xmlenc#sha256\");\n  certDigestNode.appendChild(digestMethod);\n\n  const digestValue = options.doc.createElementNS(DS_NS, \"ds:DigestValue\");\n  digestValue.appendChild(options.doc.createTextNode(certificateDigestBase64(options.certificate)));\n  certDigestNode.appendChild(digestValue);\n\n  const issuerSerial = options.doc.createElementNS(XADES_NS, \"xades:IssuerSerial\");\n  certNode.appendChild(issuerSerial);\n\n  const issuerName = options.doc.createElementNS(DS_NS, \"ds:X509IssuerName\");\n  issuerName.appendChild(options.doc.createTextNode(normalizeIssuerDn(options.certificate.issuer)));\n  issuerSerial.appendChild(issuerName);\n\n  const serialNumber = options.doc.createElementNS(DS_NS, \"ds:X509SerialNumber\");\n  serialNumber.appendChild(\n    options.doc.createTextNode(serialNumberDecimal(options.certificate.serialNumber)),\n  );\n  issuerSerial.appendChild(serialNumber);\n\n  return qualifyingProps;\n}\n\nfunction certificateDigestBase64(certificate: crypto.X509Certificate): string {\n  return crypto.createHash(\"sha256\").update(certificate.raw).digest(\"base64\");\n}\n\nfunction normalizeIssuerDn(issuer: string): string {\n  return issuer\n    .split(\"\\n\")\n    .map((part) => part.trim())\n    .filter(Boolean)\n    .join(\",\");\n}\n\nfunction serialNumberDecimal(serialNumberHex: string): string {\n  return BigInt(`0x${serialNumberHex}`).toString(10);\n}\n\nfunction parseIntoDocument(doc: XmlDocument, xml: string): XmlChildNode {\n  const parsed = new DOMParser().parseFromString(xml, \"application/xml\");\n  if (!parsed.documentElement?.firstChild) {\n    throw new Error(\"Failed to parse XML fragment.\");\n  }\n  // xmldom allows moving nodes between documents; clone to be safe.\n  const imported =\n    typeof doc.importNode === \"function\"\n      ? doc.importNode(parsed.documentElement.firstChild, true)\n      : parsed.documentElement.firstChild.cloneNode(true);\n  return imported as XmlChildNode;\n}\n\nfunction ensureEcdsaSha256Algorithm(sig: SignedXmlLike): void {\n  const uri = \"http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256\";\n  if (sig.SignatureAlgorithms?.[uri]) {\n    return;\n  }\n  sig.SignatureAlgorithms = {\n    ...(sig.SignatureAlgorithms ?? {}),\n    [uri]: class EcdsaSha256 {\n      getSignature(signedInfo: string, privateKey: crypto.KeyLike): string {\n        const signer = crypto.createSign(\"SHA256\");\n        signer.update(signedInfo);\n        const signingKey: crypto.SignKeyObjectInput | crypto.SignPrivateKeyInput =\n          privateKey instanceof crypto.KeyObject\n            ? { key: privateKey, dsaEncoding: \"ieee-p1363\" }\n            : { key: privateKey, dsaEncoding: \"ieee-p1363\" };\n        return signer.sign(signingKey, \"base64\");\n      }\n\n      verifySignature(material: string, key: crypto.KeyLike, signatureValue: string): boolean {\n        const verifier = crypto.createVerify(\"SHA256\");\n        verifier.update(material);\n        const verificationKey: crypto.VerifyKeyObjectInput | crypto.VerifyPublicKeyInput =\n          key instanceof crypto.KeyObject\n            ? { key, dsaEncoding: \"ieee-p1363\" }\n            : { key, dsaEncoding: \"ieee-p1363\" };\n        return verifier.verify(verificationKey, signatureValue, \"base64\");\n      }\n\n      getAlgorithmName(): string {\n        return uri;\n      }\n    },\n  };\n}\n\nfunction patchSignedXmlCreateReferences(sig: SignedXmlLike): void {\n  // xml-crypto does not emit Reference/@Type, but XAdES requires it for SignedProperties.\n  // Patch the method at runtime to keep upstream dependency untouched.\n  type SignedXmlWithCreateReferences = SignedXmlLike & {\n    createReferences: (doc: XmlDocument, prefix?: string) => string;\n  };\n  const mutableSig = sig as SignedXmlWithCreateReferences;\n  mutableSig.createReferences = function createReferences(doc: XmlDocument, prefix?: string) {\n    let res = \"\";\n    let currentPrefix = prefix || \"\";\n    currentPrefix = currentPrefix ? `${currentPrefix}:` : currentPrefix;\n\n    for (const ref of this.getReferences()) {\n      const nodes = xpath.selectWithResolver(ref.xpath ?? \"\", doc, this.namespaceResolver);\n      if (!Array.isArray(nodes) || nodes.length === 0) {\n        throw new Error(\n          `the following xpath cannot be signed because it was not found: ${ref.xpath}`,\n        );\n      }\n      for (const node of nodes) {\n        const typeAttr = ref.type ? ` Type=\"${ref.type}\"` : \"\";\n        if (ref.isEmptyUri) {\n          res += `<${currentPrefix}Reference URI=\"\"${typeAttr}>`;\n        } else {\n          const id = this.ensureHasId(node);\n          ref.uri = id;\n          res += `<${currentPrefix}Reference URI=\"#${id}\"${typeAttr}>`;\n        }\n\n        res += `<${currentPrefix}Transforms>`;\n        for (const trans of ref.transforms || []) {\n          const transform = this.findCanonicalizationAlgorithm(trans);\n          res += `<${currentPrefix}Transform Algorithm=\"${transform.getAlgorithmName()}\"`;\n          if (\n            Array.isArray(ref.inclusiveNamespacesPrefixList) &&\n            ref.inclusiveNamespacesPrefixList.length\n          ) {\n            res += \">\";\n            res += `<InclusiveNamespaces PrefixList=\"${ref.inclusiveNamespacesPrefixList.join(\n              \" \",\n            )}\" xmlns=\"${transform.getAlgorithmName()}\"/>`;\n            res += `</${currentPrefix}Transform>`;\n          } else {\n            res += \" />\";\n          }\n        }\n\n        const canonXml = this.getCanonReferenceXml(doc, ref, node);\n        const digestAlgorithm = this.findHashAlgorithm(ref.digestAlgorithm);\n        res +=\n          `</${currentPrefix}Transforms>` +\n          `<${currentPrefix}DigestMethod Algorithm=\"${digestAlgorithm.getAlgorithmName()}\" />` +\n          `<${currentPrefix}DigestValue>${digestAlgorithm.getHash(canonXml)}</${currentPrefix}DigestValue>` +\n          `</${currentPrefix}Reference>`;\n      }\n    }\n    return res;\n  };\n}\n\nfunction ensurePemCertificate(value: string): string {\n  if (value.includes(\"BEGIN CERTIFICATE\")) {\n    return value;\n  }\n  const der = Buffer.from(value, \"base64\");\n  const b64 = der.toString(\"base64\");\n  const lines = b64.match(/.{1,64}/g) ?? [];\n  return `-----BEGIN CERTIFICATE-----\\n${lines.join(\"\\n\")}\\n-----END CERTIFICATE-----\\n`;\n}\n\nfunction readCertificateAsPem(path: string): string {\n  const raw = fs.readFileSync(path);\n  if (raw.includes(Buffer.from(\"BEGIN CERTIFICATE\", \"ascii\"))) {\n    return raw.toString(\"utf8\");\n  }\n  const cert = new crypto.X509Certificate(raw);\n  return cert.toString();\n}\n\nfunction readPrivateKey(raw: Buffer, password?: string): crypto.KeyObject {\n  const asText = raw.toString(\"utf8\");\n  if (asText.includes(\"BEGIN\")) {\n    return crypto.createPrivateKey({\n      key: asText,\n      format: \"pem\",\n      passphrase: password,\n    });\n  }\n  const types: Array<\"pkcs8\" | \"pkcs1\" | \"sec1\"> = [\"pkcs8\", \"pkcs1\", \"sec1\"];\n  let lastError: unknown = null;\n  for (const type of types) {\n    try {\n      return crypto.createPrivateKey({\n        key: raw,\n        format: \"der\",\n        type,\n        passphrase: password,\n      });\n    } catch (err) {\n      lastError = err;\n    }\n  }\n  throw new Error(\"Unable to load private key (unsupported format or wrong password).\", {\n    cause: lastError as Error,\n  });\n}\n\nasync function loadFromPkcs12(\n  options: XadesPkcs12KeyPairOptions,\n): Promise<{ certificatePem: string; privateKeyPem: string; certificateChainPem: string[] }> {\n  type KeyCandidate = {\n    localKeyId: string | null;\n    privateKeyPem: string;\n    publicKeySpkiDerBase64: string;\n  };\n\n  type CertCandidate = {\n    localKeyId: string | null;\n    certificatePem: string;\n    publicKeySpkiDerBase64: string;\n    isSelfSigned: boolean;\n  };\n\n  let forge: unknown;\n  try {\n    forge = await import(\"node-forge\");\n  } catch (err) {\n    throw new Error(\n      \"PKCS#12 (.p12/.pfx) support requires optional dependency 'node-forge'. Install it with: npm i node-forge\",\n      { cause: err as Error },\n    );\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const forgeAny = ((forge as any).default ?? forge) as any;\n  const p12Asn1 = forgeAny.asn1.fromDer(Buffer.from(options.pkcs12Bytes).toString(\"binary\"));\n  const p12 = forgeAny.pkcs12.pkcs12FromAsn1(p12Asn1, options.pkcs12Password ?? \"\");\n\n  const keyBags =\n    p12.getBags({ bagType: forgeAny.pki.oids.pkcs8ShroudedKeyBag })[\n      forgeAny.pki.oids.pkcs8ShroudedKeyBag\n    ] ??\n    p12.getBags({ bagType: forgeAny.pki.oids.keyBag })[forgeAny.pki.oids.keyBag] ??\n    [];\n\n  const certBags =\n    p12.getBags({ bagType: forgeAny.pki.oids.certBag })[forgeAny.pki.oids.certBag] ?? [];\n\n  if (!keyBags.length) {\n    throw new Error(\"PKCS#12 does not contain a private key.\");\n  }\n  if (!certBags.length) {\n    throw new Error(\"PKCS#12 does not contain a certificate.\");\n  }\n\n  const keyCandidates: KeyCandidate[] = keyBags\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    .map((bag: any) => {\n      const privateKeyPem = forgeAny.pki.privateKeyToPem(bag.key);\n      return {\n        localKeyId: normalizeLocalKeyId(bag?.attributes?.localKeyId),\n        privateKeyPem,\n        publicKeySpkiDerBase64: getPublicKeySpkiDerBase64FromPrivateKeyPem(privateKeyPem),\n      };\n    });\n\n  const certCandidates: CertCandidate[] = certBags\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    .map((bag: any) => {\n      const certificatePem = forgeAny.pki.certificateToPem(bag.cert);\n      const x509 = new crypto.X509Certificate(certificatePem);\n      return {\n        localKeyId: normalizeLocalKeyId(bag?.attributes?.localKeyId),\n        certificatePem,\n        publicKeySpkiDerBase64: getPublicKeySpkiDerBase64FromCertificatePem(certificatePem),\n        isSelfSigned: normalizeIssuerDn(x509.issuer) === normalizeIssuerDn(x509.subject),\n      };\n    });\n\n  const preferredCertCandidates = [...certCandidates].sort(\n    (a, b) => Number(a.isSelfSigned) - Number(b.isSelfSigned),\n  );\n\n  // Prefer pairing by localKeyId, but still verify cert/private-key match.\n  let chosen: { privateKeyPem: string; certificatePem: string } | null = null;\n  for (const cert of preferredCertCandidates) {\n    if (!cert.localKeyId) {\n      continue;\n    }\n    const key = keyCandidates.find(\n      (k) =>\n        k.localKeyId != null &&\n        k.localKeyId === cert.localKeyId &&\n        k.publicKeySpkiDerBase64 === cert.publicKeySpkiDerBase64,\n    );\n    if (key != null) {\n      chosen = { privateKeyPem: key.privateKeyPem, certificatePem: cert.certificatePem };\n      break;\n    }\n  }\n\n  // Fallback: match by comparing public keys\n  if (!chosen) {\n    for (const cert of preferredCertCandidates) {\n      const key = keyCandidates.find((k) => k.publicKeySpkiDerBase64 === cert.publicKeySpkiDerBase64);\n      if (key) {\n        chosen = { privateKeyPem: key.privateKeyPem, certificatePem: cert.certificatePem };\n        break;\n      }\n    }\n  }\n\n  if (!chosen) {\n    throw new Error(\"PKCS#12 does not contain a matching private key and certificate.\");\n  }\n\n  const chain = buildCertificateChainPem(\n    chosen.certificatePem,\n    certCandidates.map((c: { certificatePem: string }) => c.certificatePem),\n  );\n\n  return { ...chosen, certificateChainPem: chain };\n}\n\nfunction normalizeLocalKeyId(value: unknown): string | null {\n  // node-forge represents bag attributes as { attrName: [binaryString] }.\n  if (!Array.isArray(value) || value.length === 0) {\n    return null;\n  }\n  const first = value[0] as unknown;\n  if (typeof first === \"string\") {\n    return Buffer.from(first, \"binary\").toString(\"hex\");\n  }\n  if (first instanceof Uint8Array) {\n    return Buffer.from(first).toString(\"hex\");\n  }\n  return null;\n}\n\nfunction getPublicKeySpkiDerBase64FromPrivateKeyPem(privateKeyPem: string): string {\n  const privateKeyObj = crypto.createPrivateKey({ key: privateKeyPem, format: \"pem\" });\n  return crypto\n    .createPublicKey(privateKeyObj)\n    .export({ type: \"spki\", format: \"der\" })\n    .toString(\"base64\");\n}\n\nfunction getPublicKeySpkiDerBase64FromCertificatePem(certificatePem: string): string {\n  return new crypto.X509Certificate(certificatePem).publicKey\n    .export({ type: \"spki\", format: \"der\" })\n    .toString(\"base64\");\n}\n\nfunction buildCertificateChainPem(leafPem: string, allPem: string[]): string[] {\n  const leaf = new crypto.X509Certificate(ensurePemCertificate(leafPem));\n\n  const certs = allPem.map(ensurePemCertificate).map((pem) => new crypto.X509Certificate(pem));\n\n  const bySubject = new Map<string, crypto.X509Certificate>();\n  for (const c of certs) {\n    bySubject.set(normalizeIssuerDn(c.subject), c);\n  }\n\n  const chain: crypto.X509Certificate[] = [];\n  let current = leaf;\n  for (let i = 0; i < certs.length + 1; i += 1) {\n    const issuer = normalizeIssuerDn(current.issuer);\n    const subject = normalizeIssuerDn(current.subject);\n    if (issuer === subject) {\n      break; // self-signed root\n    }\n    const parent = bySubject.get(issuer);\n    if (!parent) {\n      break;\n    }\n    chain.push(parent);\n    current = parent;\n  }\n\n  return chain.map((c) => c.toString());\n}\n","import { AuthClient } from \"../api/authClient\";\nimport { SecurityClient } from \"../api/securityClient\";\nimport { CryptographyService } from \"../crypto/cryptographyService\";\nimport { KsefError } from \"../errors/errors\";\nimport { buildAuthTokenRequestXml } from \"./authXml\";\nimport { XadesKeyPair, XadesSignatureService } from \"./xades\";\nimport { AuthTokenRedeemResponse, InitTokenAuthenticationRequest } from \"../types/auth\";\nimport {\n  AuthenticationInitResponse,\n  AuthorizationPolicy,\n  ContextIdentifier,\n  StatusInfo,\n} from \"../types/common\";\n\nexport interface AuthenticateWithKsefTokenOptions {\n  token: string;\n  context: ContextIdentifier;\n  authorizationPolicy?: AuthorizationPolicy;\n  publicCertificateBase64Der?: string;\n  encryptionMethod?: \"rsa\" | \"ec\";\n  ecOutputFormat?: \"java\" | \"csharp\";\n  pollIntervalMs?: number;\n  maxAttempts?: number;\n}\n\nexport interface AuthenticateWithXadesOptions {\n  signedXml: string;\n  verifyCertificateChain?: boolean;\n  enforceXadesCompliance?: boolean;\n  pollIntervalMs?: number;\n  maxAttempts?: number;\n}\n\nexport interface AuthenticateWithCertificateOptions {\n  keyPair: XadesKeyPair;\n  context: ContextIdentifier;\n  subjectIdentifierType?: \"certificateSubject\" | \"certificateFingerprint\";\n  authorizationPolicyXml?: string | null;\n  signaturePackaging?: \"enveloped\" | \"enveloping\";\n  verifyCertificateChain?: boolean;\n  enforceXadesCompliance?: boolean;\n  pollIntervalMs?: number;\n  maxAttempts?: number;\n}\n\nexport class AuthCoordinator {\n  private readonly authClient: AuthClient;\n  private readonly securityClient: SecurityClient;\n  private readonly xadesSignatureService: XadesSignatureService;\n\n  constructor(authClient: AuthClient, securityClient: SecurityClient) {\n    this.authClient = authClient;\n    this.securityClient = securityClient;\n    this.xadesSignatureService = new XadesSignatureService();\n  }\n\n  async authenticateWithKsefToken(\n    options: AuthenticateWithKsefTokenOptions,\n  ): Promise<AuthTokenRedeemResponse> {\n    const challenge = await this.authClient.getChallenge();\n    const parsedTimestamp = challenge.timestamp ? Date.parse(challenge.timestamp) : NaN;\n    const timestampMs =\n      challenge.timestampMs ?? (Number.isNaN(parsedTimestamp) ? Date.now() : parsedTimestamp);\n\n    const publicCertificate =\n      options.publicCertificateBase64Der ??\n      (await this.getCertificateByUsage(\"KsefTokenEncryption\"));\n\n    const encryptedToken = CryptographyService.encryptKsefToken(\n      options.token,\n      timestampMs,\n      publicCertificate,\n      options.encryptionMethod ?? \"rsa\",\n      options.ecOutputFormat ?? \"java\",\n    );\n\n    const request: InitTokenAuthenticationRequest = {\n      challenge: challenge.challenge,\n      contextIdentifier: options.context,\n      encryptedToken,\n      ...(options.authorizationPolicy !== undefined && {\n        authorizationPolicy: options.authorizationPolicy,\n      }),\n    };\n\n    const init = await this.authClient.authenticateWithKsefToken(request);\n    await this.pollAuthStatus(init, options.pollIntervalMs ?? 2000, options.maxAttempts ?? 30);\n\n    return await this.authClient.redeemToken(init.authenticationToken.token);\n  }\n\n  async authenticateWithXadesSignature(\n    options: AuthenticateWithXadesOptions,\n  ): Promise<AuthTokenRedeemResponse> {\n    const init = await this.authClient.authenticateWithXadesSignature(\n      options.signedXml,\n      options.verifyCertificateChain,\n      options.enforceXadesCompliance,\n    );\n    await this.pollAuthStatus(init, options.pollIntervalMs ?? 2000, options.maxAttempts ?? 30);\n    return await this.authClient.redeemToken(init.authenticationToken.token);\n  }\n\n  async authenticateWithCertificate(\n    options: AuthenticateWithCertificateOptions,\n  ): Promise<AuthTokenRedeemResponse> {\n    const challenge = await this.authClient.getChallenge();\n\n    const xml = buildAuthTokenRequestXml({\n      challenge: challenge.challenge,\n      contextIdentifierType: options.context.type,\n      contextIdentifierValue: options.context.value,\n      ...(options.subjectIdentifierType !== undefined && {\n        subjectIdentifierType: options.subjectIdentifierType,\n      }),\n      ...(options.authorizationPolicyXml !== undefined && {\n        authorizationPolicyXml: options.authorizationPolicyXml,\n      }),\n    });\n\n    const signedXml =\n      options.signaturePackaging === \"enveloping\"\n        ? this.xadesSignatureService.signXadesEnveloping({ xml, keyPair: options.keyPair })\n        : this.xadesSignatureService.signXadesEnveloped({ xml, keyPair: options.keyPair });\n\n    return await this.authenticateWithXadesSignature({\n      signedXml,\n      ...(options.verifyCertificateChain !== undefined && {\n        verifyCertificateChain: options.verifyCertificateChain,\n      }),\n      ...(options.enforceXadesCompliance !== undefined && {\n        enforceXadesCompliance: options.enforceXadesCompliance,\n      }),\n      ...(options.pollIntervalMs !== undefined && {\n        pollIntervalMs: options.pollIntervalMs,\n      }),\n      ...(options.maxAttempts !== undefined && { maxAttempts: options.maxAttempts }),\n    });\n  }\n\n  private async pollAuthStatus(\n    init: AuthenticationInitResponse,\n    pollIntervalMs: number,\n    maxAttempts: number,\n  ): Promise<void> {\n    for (let attempt = 0; attempt < maxAttempts; attempt += 1) {\n      const statusResponse = await this.authClient.getAuthStatus(\n        init.referenceNumber,\n        init.authenticationToken.token,\n      );\n      const status = statusResponse.status ?? ({} as StatusInfo);\n      if (status.code === 200) {\n        return;\n      }\n      if (status.code !== 100) {\n        const details = status.details?.length ? ` Details: ${status.details.join(\", \")}` : \"\";\n        throw new KsefError(\n          `Authentication failed: ${status.code} ${status.description}${details}`,\n        );\n      }\n      await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));\n    }\n    throw new KsefError(\"Authentication did not complete within max attempts.\");\n  }\n\n  private async getCertificateByUsage(\n    usage: \"KsefTokenEncryption\" | \"SymmetricKeyEncryption\",\n  ): Promise<string> {\n    const certificates = await this.securityClient.getPublicKeyCertificates();\n    const cert = certificates.find((item) => item.usage.includes(usage));\n    if (!cert) {\n      throw new KsefError(`No public certificate found for usage ${usage}.`);\n    }\n    return cert.certificate;\n  }\n}\n","import { XMLBuilder, XMLParser } from \"fast-xml-parser\";\n\nexport type XmlDocument = Array<Record<string, unknown>>;\nexport type XmlValue = string | number | boolean | null | XmlObject | XmlValue[];\nexport type XmlObject = { [key: string]: XmlValue };\n\nconst parser = new XMLParser({\n  ignoreAttributes: false,\n  preserveOrder: true,\n  attributeNamePrefix: \"@_\",\n  textNodeName: \"#text\",\n  allowBooleanAttributes: true,\n});\n\nconst builder = new XMLBuilder({\n  ignoreAttributes: false,\n  preserveOrder: true,\n  attributeNamePrefix: \"@_\",\n  textNodeName: \"#text\",\n  format: false,\n  suppressBooleanAttributes: false,\n  suppressEmptyNode: false,\n  processEntities: true,\n  declaration: {\n    include: true,\n    encoding: \"utf-8\",\n  },\n} as ConstructorParameters<typeof XMLBuilder>[0]);\n\nfunction createObjectBuilder(pretty = false): XMLBuilder {\n  return new XMLBuilder({\n    ignoreAttributes: false,\n    preserveOrder: false,\n    attributeNamePrefix: \"@_\",\n    textNodeName: \"#text\",\n    format: pretty,\n    suppressBooleanAttributes: false,\n    suppressEmptyNode: false,\n    processEntities: true,\n    declaration: {\n      include: true,\n      encoding: \"utf-8\",\n    },\n  } as ConstructorParameters<typeof XMLBuilder>[0]);\n}\n\nexport function parseXml(xml: string): XmlDocument {\n  return parser.parse(xml) as XmlDocument;\n}\n\nexport function buildXml(document: XmlDocument): string {\n  return builder.build(document);\n}\n\nexport function buildXmlFromObject(document: XmlObject, options?: { pretty?: boolean }): string {\n  return createObjectBuilder(options?.pretty).build(document);\n}\n","import { KsefValidationError } from \"../errors/errors\";\nimport { buildXmlFromObject, XmlObject } from \"./xml\";\n\nexport type PefSchema = \"PEF\" | \"PEF_KOR\";\n\nexport interface PefUblInvoiceInput {\n  schema?: \"PEF\";\n  Invoice: XmlObject;\n}\n\nexport interface PefUblCreditNoteInput {\n  schema?: \"PEF_KOR\";\n  CreditNote: XmlObject;\n}\n\nexport type PefUblDocumentInput = PefUblInvoiceInput | PefUblCreditNoteInput;\n\nconst DEFAULT_NAMESPACE: Record<PefSchema, string> = {\n  PEF: \"urn:oasis:names:specification:ubl:schema:xsd:Invoice-2\",\n  PEF_KOR: \"urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2\",\n};\n\nfunction inferSchema(input: PefUblDocumentInput): PefSchema {\n  return \"Invoice\" in input ? \"PEF\" : \"PEF_KOR\";\n}\n\nexport function isPefUblDocumentInput(input: unknown): input is PefUblDocumentInput {\n  if (typeof input !== \"object\" || input === null || Array.isArray(input)) {\n    return false;\n  }\n  const obj = input as Record<string, unknown>;\n  const invoice = obj.Invoice;\n  const creditNote = obj.CreditNote;\n  const hasInvoice = typeof invoice === \"object\" && invoice !== null && !Array.isArray(invoice);\n  const hasCreditNote =\n    typeof creditNote === \"object\" && creditNote !== null && !Array.isArray(creditNote);\n  return hasInvoice !== hasCreditNote;\n}\n\nexport function buildPefXml(\n  input: PefUblDocumentInput,\n  options: { pretty?: boolean } = {},\n): string {\n  const inferred = inferSchema(input);\n  const schema = input.schema ?? inferred;\n  if (schema !== inferred) {\n    throw new KsefValidationError(\n      `PEF schema mismatch: expected ${inferred} based on root, got ${schema}.`,\n    );\n  }\n\n  if (\"Invoice\" in input) {\n    const document: XmlObject = {\n      Invoice: {\n        \"@_xmlns\": DEFAULT_NAMESPACE.PEF,\n        \"@_xmlns:ext\": \"urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2\",\n        \"@_xmlns:cbc\": \"urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2\",\n        \"@_xmlns:cac\": \"urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2\",\n        \"@_xmlns:cbc-pl\": \"urn:pl:extended:CommonBasicComponents-2\",\n        \"@_xmlns:cac-pl\": \"urn:pl:extended:CommonAggregateComponents-2\",\n        ...input.Invoice,\n      },\n    };\n    return buildXmlFromObject(document, { pretty: options.pretty ?? false });\n  }\n\n  const document: XmlObject = {\n    CreditNote: {\n      \"@_xmlns\": DEFAULT_NAMESPACE.PEF_KOR,\n      \"@_xmlns:ext\": \"urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2\",\n      \"@_xmlns:cbc\": \"urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2\",\n      \"@_xmlns:cac\": \"urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2\",\n      \"@_xmlns:cbc-pl\": \"urn:pl:extended:CommonBasicComponents-2\",\n      \"@_xmlns:cac-pl\": \"urn:pl:extended:CommonAggregateComponents-2\",\n      ...input.CreditNote,\n    },\n  };\n\n  return buildXmlFromObject(document, { pretty: options.pretty ?? false });\n}\n","import { KsefValidationError } from \"../errors/errors\";\nimport { FormCode } from \"../types/common\";\nimport { buildXml, buildXmlFromObject, XmlDocument, XmlObject, XmlValue } from \"./xml\";\nimport { buildPefXml, isPefUblDocumentInput, PefUblDocumentInput } from \"./pef\";\n\nexport type InvoiceXmlInput =\n  | string\n  | Buffer\n  | XmlDocument\n  | XmlObject\n  | FakturaInput\n  | PefUblDocumentInput;\n\nexport type FakturaSchema = \"FA2\" | \"FA3\";\n\nexport interface FakturaXmlOptions {\n  schema?: FakturaSchema;\n  fakturaNamespace?: string;\n  etdNamespace?: string;\n  pretty?: boolean;\n}\n\nexport interface FakturaInput {\n  Naglowek: XmlObject;\n  Podmiot1?: XmlObject;\n  Podmiot2?: XmlObject;\n  Fa: XmlObject;\n  [key: string]: XmlValue;\n}\n\nconst DEFAULT_NAMESPACE: Record<FakturaSchema, string> = {\n  FA2: \"http://crd.gov.pl/wzor/2023/06/29/12648/\",\n  FA3: \"http://crd.gov.pl/wzor/2025/06/25/13775/\",\n};\n\nconst DEFAULT_ETD_NAMESPACE: Record<FakturaSchema, string> = {\n  FA2: \"http://crd.gov.pl/xml/schematy/2020/10/08/eDokumenty\",\n  FA3: \"http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2022/01/05/eD/DefinicjeTypy/\",\n};\n\nconst ORDER_MAP: Record<string, string[]> = {\n  Faktura: [\"Naglowek\", \"Podmiot1\", \"Podmiot2\", \"Podmiot3\", \"Fa\", \"Stopka\", \"Zalacznik\"],\n  Naglowek: [\"KodFormularza\", \"WariantFormularza\", \"DataWytworzeniaFa\", \"SystemInfo\"],\n  Podmiot1: [\n    \"PrefiksPodatnika\",\n    \"NrEORI\",\n    \"DaneIdentyfikacyjne\",\n    \"Adres\",\n    \"AdresKoresp\",\n    \"DaneKontaktowe\",\n    \"StatusInfoPodatnika\",\n  ],\n  Podmiot2: [\n    \"NrEORI\",\n    \"DaneIdentyfikacyjne\",\n    \"Adres\",\n    \"AdresKoresp\",\n    \"DaneKontaktowe\",\n    \"NrKlienta\",\n    \"IDNabywcy\",\n    \"JST\",\n    \"GV\",\n  ],\n  Podmiot3: [\n    \"IDNabywcy\",\n    \"NrEORI\",\n    \"DaneIdentyfikacyjne\",\n    \"Adres\",\n    \"AdresKoresp\",\n    \"DaneKontaktowe\",\n    \"Rola\",\n    \"RolaInna\",\n    \"OpisRoli\",\n    \"Udzial\",\n    \"NrKlienta\",\n  ],\n  DaneIdentyfikacyjne: [\n    \"NIP\",\n    \"IDWew\",\n    \"KodUE\",\n    \"NrVatUE\",\n    \"KodKraju\",\n    \"NrID\",\n    \"BrakID\",\n    \"Nazwa\",\n    \"Identyfikator\",\n    \"KRS\",\n  ],\n  Adres: [\"KodKraju\", \"AdresL1\", \"AdresL2\", \"AdresL3\"],\n  DaneKontaktowe: [\"Email\", \"Telefon\"],\n  Fa: [\n    \"KodWaluty\",\n    \"P_1\",\n    \"P_1M\",\n    \"P_2\",\n    \"WZ\",\n    \"P_6\",\n    \"OkresFa\",\n    \"P_13_1\",\n    \"P_14_1\",\n    \"P_14_1W\",\n    \"P_13_2\",\n    \"P_14_2\",\n    \"P_14_2W\",\n    \"P_13_3\",\n    \"P_14_3\",\n    \"P_14_3W\",\n    \"P_13_4\",\n    \"P_14_4\",\n    \"P_14_4W\",\n    \"P_13_5\",\n    \"P_14_5\",\n    \"P_13_6_1\",\n    \"P_13_6_2\",\n    \"P_13_6_3\",\n    \"P_13_7\",\n    \"P_13_8\",\n    \"P_13_9\",\n    \"P_13_10\",\n    \"P_13_11\",\n    \"P_15\",\n    \"KursWalutyZ\",\n    \"Adnotacje\",\n    \"RodzajFaktury\",\n    \"PrzyczynaKorekty\",\n    \"TypKorekty\",\n    \"DaneFaKorygowanej\",\n    \"OkresFaKorygowanej\",\n    \"NrFaKorygowany\",\n    \"Podmiot1K\",\n    \"Podmiot2K\",\n    \"Podmiot3K\",\n    \"ZaliczkaCzesciowa\",\n    \"FP\",\n    \"TP\",\n    \"DodatkowyOpis\",\n    \"FakturaZaliczkowa\",\n    \"ZwrotAkcyzy\",\n    \"FaWiersz\",\n    \"Rozliczenie\",\n    \"Platnosc\",\n    \"WarunkiTransakcji\",\n    \"Transport\",\n    \"PodmiotPosredniczacy\",\n    \"Zamowienie\",\n  ],\n  Adnotacje: [\n    \"P_16\",\n    \"P_17\",\n    \"P_18\",\n    \"P_18A\",\n    \"Zwolnienie\",\n    \"NoweSrodkiTransportu\",\n    \"P_23\",\n    \"PMarzy\",\n  ],\n  DaneFaKorygowanej: [\n    \"DataWystFaKorygowanej\",\n    \"NrFaKorygowanej\",\n    \"NrKSeF\",\n    \"NrKSeFFaKorygowanej\",\n    \"NrKSeFN\",\n  ],\n  OkresFa: [\"P_6_Od\", \"P_6_Do\"],\n  FaWiersz: [\n    \"NrWierszaFa\",\n    \"UU_ID\",\n    \"P_6A\",\n    \"P_7\",\n    \"Indeks\",\n    \"GTIN\",\n    \"PKWiU\",\n    \"CN\",\n    \"PKOB\",\n    \"P_8A\",\n    \"P_8B\",\n    \"P_9A\",\n    \"P_9B\",\n    \"P_10\",\n    \"P_11\",\n    \"P_11A\",\n    \"P_11Vat\",\n    \"P_12\",\n    \"P_12_XII\",\n    \"P_12_Zal_15\",\n    \"KwotaAkcyzy\",\n    \"GTU\",\n    \"Procedura\",\n    \"KursWaluty\",\n    \"StanPrzed\",\n  ],\n  Rozliczenie: [\"Obciazenia\", \"SumaObciazen\", \"Odliczenia\", \"SumaOdliczen\", \"DoZaplaty\", \"DoRozliczenia\"],\n  Obciazenia: [\"Kwota\", \"Powod\"],\n  Odliczenia: [\"Kwota\", \"Powod\"],\n  Platnosc: [\n    \"Zaplacono\",\n    \"DataZaplaty\",\n    \"ZnacznikZaplatyCzesciowej\",\n    \"ZaplataCzesciowa\",\n    \"TerminPlatnosci\",\n    \"FormaPlatnosci\",\n    \"PlatnoscInna\",\n    \"OpisPlatnosci\",\n    \"RachunekBankowy\",\n    \"RachunekBankowyFaktora\",\n    \"Skonto\",\n    \"LinkDoPlatnosci\",\n    \"IPKSeF\",\n  ],\n  ZaplataCzesciowa: [\n    \"KwotaZaplatyCzesciowej\",\n    \"DataZaplatyCzesciowej\",\n    \"FormaPlatnosci\",\n    \"PlatnoscInna\",\n    \"OpisPlatnosci\",\n  ],\n  TerminPlatnosci: [\"Termin\", \"TerminOpis\"],\n  TerminOpis: [\"Ilosc\", \"Jednostka\", \"ZdarzeniePoczatkowe\"],\n  RachunekBankowy: [\"NrRB\", \"SWIFT\", \"RachunekWlasnyBanku\", \"NazwaBanku\", \"OpisRachunku\"],\n  RachunekBankowyFaktora: [\"NrRB\", \"SWIFT\", \"RachunekWlasnyBanku\", \"NazwaBanku\", \"OpisRachunku\"],\n  WarunkiTransakcji: [\n    \"Umowy\",\n    \"Zamowienia\",\n    \"NrPartiiTowaru\",\n    \"WarunkiDostawy\",\n    \"KursUmowny\",\n    \"WalutaUmowna\",\n    \"Transport\",\n    \"PodmiotPosredniczacy\",\n  ],\n  Umowy: [\"DataUmowy\", \"NrUmowy\"],\n  Zamowienia: [\"DataZamowienia\", \"NrZamowienia\"],\n  Transport: [\n    \"RodzajTransportu\",\n    \"TransportInny\",\n    \"OpisInnegoTransportu\",\n    \"Przewoznik\",\n    \"NrZleceniaTransportu\",\n    \"OpisLadunku\",\n    \"LadunekInny\",\n    \"OpisInnegoLadunku\",\n    \"JednostkaOpakowania\",\n  ],\n  Zamowienie: [\"WartoscZamowienia\", \"ZamowienieWiersz\"],\n  ZamowienieWiersz: [\n    \"NrWierszaZam\",\n    \"UU_IDZ\",\n    \"P_7Z\",\n    \"IndeksZ\",\n    \"GTINZ\",\n    \"PKWiUZ\",\n    \"CNZ\",\n    \"PKOBZ\",\n    \"P_8AZ\",\n    \"P_8BZ\",\n    \"P_9AZ\",\n    \"P_11NettoZ\",\n    \"P_11VatZ\",\n    \"P_12Z\",\n    \"P_12Z_XII\",\n    \"P_12Z_Zal_15\",\n    \"GTUZ\",\n    \"ProceduraZ\",\n    \"KwotaAkcyzyZ\",\n    \"StanPrzedZ\",\n  ],\n};\n\nfunction stripBom(input: string): string {\n  if (input.charCodeAt(0) === 0xfeff) {\n    return input.slice(1);\n  }\n  return input;\n}\n\nexport function serializeInvoiceXml(input: InvoiceXmlInput, options?: FakturaXmlOptions): Buffer {\n  if (Buffer.isBuffer(input)) {\n    return input;\n  }\n  if (typeof input === \"string\") {\n    const cleaned = stripBom(input);\n    return Buffer.from(cleaned, \"utf8\");\n  }\n  if (Array.isArray(input)) {\n    const xml = buildXml(input);\n    const cleaned = stripBom(xml);\n    return Buffer.from(cleaned, \"utf8\");\n  }\n  if (isPefUblDocumentInput(input)) {\n    const xml = buildPefXml(input);\n    const cleaned = stripBom(xml);\n    return Buffer.from(cleaned, \"utf8\");\n  }\n  if (isFakturaInput(input)) {\n    const xml = buildFakturaXml(input, options);\n    const cleaned = stripBom(xml);\n    return Buffer.from(cleaned, \"utf8\");\n  }\n  if (typeof input === \"object\" && input) {\n    const prettyOptions = options?.pretty === undefined ? undefined : { pretty: options.pretty };\n    const xml = buildXmlFromObject(input as XmlObject, prettyOptions);\n    const cleaned = stripBom(xml);\n    return Buffer.from(cleaned, \"utf8\");\n  }\n  throw new KsefValidationError(\"Unsupported invoice input type.\");\n}\n\nexport function buildFakturaXml(faktura: FakturaInput, options: FakturaXmlOptions = {}): string {\n  const schema = options.schema ?? \"FA3\";\n  const fakturaNamespace = options.fakturaNamespace ?? DEFAULT_NAMESPACE[schema];\n  const etdNamespace = options.etdNamespace ?? DEFAULT_ETD_NAMESPACE[schema];\n\n  const normalized = normalizeFakturaInput(faktura);\n  const ordered = orderXmlObject(normalized, \"Faktura\");\n  const document: XmlObject = {\n    Faktura: {\n      \"@_xmlns\": fakturaNamespace,\n      \"@_xmlns:etd\": etdNamespace,\n      ...ordered,\n    },\n  };\n\n  const prettyOptions = options.pretty === undefined ? undefined : { pretty: options.pretty };\n  return buildXmlFromObject(document, prettyOptions);\n}\n\nfunction normalizeFakturaInput(input: FakturaInput): XmlObject {\n  const result: XmlObject = {};\n  for (const [key, value] of Object.entries(input)) {\n    if (key === \"KodFormularza\" && isFormCode(value)) {\n      result[key] = toKodFormularza(value);\n      continue;\n    }\n    if (key === \"Naglowek\" && isObject(value)) {\n      result[key] = normalizeNaglowek(value as XmlObject);\n      continue;\n    }\n    result[key] = normalizeValueForKey(key, value);\n  }\n  return result;\n}\n\nfunction normalizeNaglowek(value: XmlObject): XmlObject {\n  const result: XmlObject = {};\n  for (const [key, item] of Object.entries(value)) {\n    if (key === \"KodFormularza\" && isFormCode(item)) {\n      result[key] = toKodFormularza(item);\n      continue;\n    }\n    result[key] = normalizeValueForKey(key, item);\n  }\n  return result;\n}\n\nfunction normalizeValue(value: XmlValue): XmlValue {\n  if (Array.isArray(value)) {\n    return value.map((item) => normalizeValue(item));\n  }\n  if (isObject(value)) {\n    return orderXmlObject(value as XmlObject);\n  }\n  return value;\n}\n\nfunction normalizeValueForKey(key: string, value: XmlValue): XmlValue {\n  if (Array.isArray(value)) {\n    return value.map((item) => {\n      if (isObject(item)) {\n        return orderXmlObject(item as XmlObject, key);\n      }\n      return normalizeValue(item);\n    });\n  }\n  if (isObject(value)) {\n    return orderXmlObject(value as XmlObject, key);\n  }\n  return value;\n}\n\nfunction orderXmlObject(value: XmlObject, contextKey?: string): XmlObject {\n  const order = contextKey ? ORDER_MAP[contextKey] : undefined;\n  const keys = Object.keys(value);\n  const used = new Set<string>();\n  const ordered: XmlObject = {};\n\n  if (order) {\n    for (const key of order) {\n      if (Object.prototype.hasOwnProperty.call(value, key)) {\n        const item = value[key];\n        if (item !== undefined) {\n          ordered[key] = normalizeValueForKey(key, item);\n        }\n        used.add(key);\n      }\n    }\n  }\n\n  const pKeys = keys.filter((key) => !used.has(key) && key.startsWith(\"P_\")).sort(comparePKey);\n  for (const key of pKeys) {\n    const item = value[key];\n    if (item !== undefined) {\n      ordered[key] = normalizeValueForKey(key, item);\n    }\n    used.add(key);\n  }\n\n  for (const key of keys) {\n    if (used.has(key)) {\n      continue;\n    }\n    const item = value[key];\n    if (item !== undefined) {\n      ordered[key] = normalizeValueForKey(key, item);\n    }\n  }\n\n  return ordered;\n}\n\nfunction comparePKey(a: string, b: string): number {\n  const normalize = (value: string) =>\n    value\n      .replace(/^P_/, \"\")\n      .split(\"_\")\n      .map((part) => (Number.isNaN(Number(part)) ? part : Number(part)));\n  const aParts = normalize(a);\n  const bParts = normalize(b);\n  const max = Math.max(aParts.length, bParts.length);\n  for (let i = 0; i < max; i += 1) {\n    const left = aParts[i];\n    const right = bParts[i];\n    if (left === undefined) {\n      return -1;\n    }\n    if (right === undefined) {\n      return 1;\n    }\n    if (typeof left === \"number\" && typeof right === \"number\") {\n      if (left !== right) {\n        return left - right;\n      }\n      continue;\n    }\n    const leftStr = String(left);\n    const rightStr = String(right);\n    if (leftStr !== rightStr) {\n      return leftStr.localeCompare(rightStr);\n    }\n  }\n  return 0;\n}\n\nfunction isFormCode(value: unknown): value is FormCode {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n    return false;\n  }\n  const candidate = value as {\n    systemCode?: unknown;\n    schemaVersion?: unknown;\n    value?: unknown;\n  };\n  return (\n    typeof candidate.systemCode === \"string\" &&\n    typeof candidate.schemaVersion === \"string\" &&\n    typeof candidate.value === \"string\"\n  );\n}\n\nfunction toKodFormularza(formCode: FormCode): XmlObject {\n  return {\n    \"@_kodSystemowy\": formCode.systemCode,\n    \"@_wersjaSchemy\": formCode.schemaVersion,\n    \"#text\": formCode.value,\n  };\n}\n\nfunction isFakturaInput(input: unknown): input is FakturaInput {\n  if (!isObject(input)) {\n    return false;\n  }\n  return (\n    Object.prototype.hasOwnProperty.call(input, \"Naglowek\") &&\n    Object.prototype.hasOwnProperty.call(input, \"Fa\")\n  );\n}\n\nfunction isObject(value: unknown): value is XmlObject {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n","import { XMLParser } from \"fast-xml-parser\";\nimport { KsefValidationError } from \"../errors/errors\";\n\nexport type UpoContextId =\n  | { kind: \"Nip\"; nip: string }\n  | { kind: \"IdWewnetrzny\"; idWewnetrzny: string }\n  | { kind: \"IdZlozonyVatUE\"; idZlozonyVatUE: string }\n  | { kind: \"IdDostawcyUslugPeppol\"; idDostawcyUslugPeppol: string };\n\nexport type UpoAuthProof =\n  | { kind: \"NumerReferencyjnyTokenaKSeF\"; numerReferencyjnyTokenaKSeF: string }\n  | {\n      kind: \"SkrotDokumentuUwierzytelniajacego\";\n      skrotDokumentuUwierzytelniajacego: string;\n    };\n\nexport interface UpoUwierzytelnienie {\n  idKontekstu: UpoContextId;\n  proof: UpoAuthProof;\n}\n\nexport interface UpoOpisPotwierdzenia {\n  strona: number;\n  liczbaStron: number;\n  zakresDokumentowOd: number;\n  zakresDokumentowDo: number;\n  calkowitaLiczbaDokumentow: number;\n}\n\nexport interface UpoDokument {\n  nipSprzedawcy: string;\n  numerKSeFDokumentu: string;\n  numerFaktury: string;\n  dataWystawieniaFaktury: string;\n  dataPrzeslaniaDokumentu: string;\n  dataNadaniaNumeruKSeF: string;\n  skrotDokumentu: string;\n  trybWysylki: string;\n}\n\nexport interface UpoPotwierdzenie {\n  nazwaPodmiotuPrzyjmujacego: string;\n  numerReferencyjnySesji: string;\n  uwierzytelnienie: UpoUwierzytelnienie;\n  opisPotwierdzenia?: UpoOpisPotwierdzenia;\n  nazwaStrukturyLogicznej: string;\n  kodFormularza: string;\n  dokumenty: UpoDokument[];\n}\n\ntype UnknownRecord = Record<string, unknown>;\n\nconst upoParser = new XMLParser({\n  ignoreAttributes: false,\n  attributeNamePrefix: \"@_\",\n  parseTagValue: false,\n  parseAttributeValue: false,\n  removeNSPrefix: true,\n  trimValues: false,\n});\n\nfunction isRecord(value: unknown): value is UnknownRecord {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction requireRecord(value: unknown, at: string): UnknownRecord {\n  if (!isRecord(value)) {\n    throw new KsefValidationError(`Expected object at ${at}.`);\n  }\n  return value;\n}\n\nfunction requireString(value: unknown, at: string): string {\n  if (typeof value !== \"string\" || value.length === 0) {\n    throw new KsefValidationError(`Expected non-empty string at ${at}.`);\n  }\n  return value;\n}\n\nfunction optionalRecord(value: unknown): UnknownRecord | undefined {\n  return isRecord(value) ? value : undefined;\n}\n\nfunction optionalString(value: unknown): string | undefined {\n  return typeof value === \"string\" ? value : undefined;\n}\n\nfunction ensureArray<T>(value: T | T[] | undefined): T[] {\n  if (!value) {\n    return [];\n  }\n  return Array.isArray(value) ? value : [value];\n}\n\nfunction requireNumberFromString(value: unknown, at: string): number {\n  const raw = requireString(value, at);\n  const parsed = Number.parseInt(raw, 10);\n  if (!Number.isFinite(parsed)) {\n    throw new KsefValidationError(`Expected integer at ${at}.`);\n  }\n  return parsed;\n}\n\nfunction parseIdKontekstu(obj: UnknownRecord): UpoContextId {\n  const nip = optionalString(obj.Nip);\n  if (nip) {\n    return { kind: \"Nip\", nip };\n  }\n  const idWewnetrzny = optionalString(obj.IdWewnetrzny);\n  if (idWewnetrzny) {\n    return { kind: \"IdWewnetrzny\", idWewnetrzny };\n  }\n  const idZlozonyVatUE = optionalString(obj.IdZlozonyVatUE);\n  if (idZlozonyVatUE) {\n    return { kind: \"IdZlozonyVatUE\", idZlozonyVatUE };\n  }\n  const idDostawcyUslugPeppol = optionalString(obj.IdDostawcyUslugPeppol);\n  if (idDostawcyUslugPeppol) {\n    return { kind: \"IdDostawcyUslugPeppol\", idDostawcyUslugPeppol };\n  }\n  throw new KsefValidationError(\n    \"Unsupported UPO IdKontekstu. Expected Nip | IdWewnetrzny | IdZlozonyVatUE | IdDostawcyUslugPeppol.\",\n  );\n}\n\nfunction parseProof(obj: UnknownRecord): UpoAuthProof {\n  const numerReferencyjnyTokenaKSeF = optionalString(obj.NumerReferencyjnyTokenaKSeF);\n  if (numerReferencyjnyTokenaKSeF) {\n    return { kind: \"NumerReferencyjnyTokenaKSeF\", numerReferencyjnyTokenaKSeF };\n  }\n  const skrotDokumentuUwierzytelniajacego = optionalString(obj.SkrotDokumentuUwierzytelniajacego);\n  if (skrotDokumentuUwierzytelniajacego) {\n    return {\n      kind: \"SkrotDokumentuUwierzytelniajacego\",\n      skrotDokumentuUwierzytelniajacego,\n    };\n  }\n  throw new KsefValidationError(\n    \"Unsupported UPO authentication proof. Expected NumerReferencyjnyTokenaKSeF | SkrotDokumentuUwierzytelniajacego.\",\n  );\n}\n\nfunction parseUwierzytelnienie(obj: UnknownRecord): UpoUwierzytelnienie {\n  const idKontekstu = parseIdKontekstu(\n    requireRecord(obj.IdKontekstu, \"Uwierzytelnienie.IdKontekstu\"),\n  );\n  const proof = parseProof(obj);\n  return { idKontekstu, proof };\n}\n\nfunction parseOpisPotwierdzenia(obj: UnknownRecord): UpoOpisPotwierdzenia {\n  return {\n    strona: requireNumberFromString(obj.Strona, \"OpisPotwierdzenia.Strona\"),\n    liczbaStron: requireNumberFromString(obj.LiczbaStron, \"OpisPotwierdzenia.LiczbaStron\"),\n    zakresDokumentowOd: requireNumberFromString(\n      obj.ZakresDokumentowOd,\n      \"OpisPotwierdzenia.ZakresDokumentowOd\",\n    ),\n    zakresDokumentowDo: requireNumberFromString(\n      obj.ZakresDokumentowDo,\n      \"OpisPotwierdzenia.ZakresDokumentowDo\",\n    ),\n    calkowitaLiczbaDokumentow: requireNumberFromString(\n      obj.CalkowitaLiczbaDokumentow,\n      \"OpisPotwierdzenia.CalkowitaLiczbaDokumentow\",\n    ),\n  };\n}\n\nfunction parseDokument(obj: UnknownRecord): UpoDokument {\n  return {\n    nipSprzedawcy: requireString(obj.NipSprzedawcy, \"Dokument.NipSprzedawcy\"),\n    numerKSeFDokumentu: requireString(obj.NumerKSeFDokumentu, \"Dokument.NumerKSeFDokumentu\"),\n    numerFaktury: requireString(obj.NumerFaktury, \"Dokument.NumerFaktury\"),\n    dataWystawieniaFaktury: requireString(\n      obj.DataWystawieniaFaktury,\n      \"Dokument.DataWystawieniaFaktury\",\n    ),\n    dataPrzeslaniaDokumentu: requireString(\n      obj.DataPrzeslaniaDokumentu,\n      \"Dokument.DataPrzeslaniaDokumentu\",\n    ),\n    dataNadaniaNumeruKSeF: requireString(\n      obj.DataNadaniaNumeruKSeF,\n      \"Dokument.DataNadaniaNumeruKSeF\",\n    ),\n    skrotDokumentu: requireString(obj.SkrotDokumentu, \"Dokument.SkrotDokumentu\"),\n    trybWysylki: requireString(obj.TrybWysylki, \"Dokument.TrybWysylki\"),\n  };\n}\n\nexport function parseUpoXml(xml: string | Buffer): UpoPotwierdzenie {\n  const text = Buffer.isBuffer(xml) ? xml.toString(\"utf8\") : xml;\n  const parsed = upoParser.parse(text);\n  const potwierdzenie = requireRecord(parsed?.Potwierdzenie, \"Potwierdzenie\");\n\n  const opisPotwierdzenia = optionalRecord(potwierdzenie.OpisPotwierdzenia);\n  const dokumenty = ensureArray(potwierdzenie.Dokument).map((doc, index) =>\n    parseDokument(requireRecord(doc, `Dokument[${index}]`)),\n  );\n  if (dokumenty.length === 0) {\n    throw new KsefValidationError(\"Expected at least one Dokument in UPO.\");\n  }\n\n  return {\n    nazwaPodmiotuPrzyjmujacego: requireString(\n      potwierdzenie.NazwaPodmiotuPrzyjmujacego,\n      \"NazwaPodmiotuPrzyjmujacego\",\n    ),\n    numerReferencyjnySesji: requireString(\n      potwierdzenie.NumerReferencyjnySesji,\n      \"NumerReferencyjnySesji\",\n    ),\n    uwierzytelnienie: parseUwierzytelnienie(\n      requireRecord(potwierdzenie.Uwierzytelnienie, \"Uwierzytelnienie\"),\n    ),\n    ...(opisPotwierdzenia && { opisPotwierdzenia: parseOpisPotwierdzenia(opisPotwierdzenia) }),\n    nazwaStrukturyLogicznej: requireString(\n      potwierdzenie.NazwaStrukturyLogicznej,\n      \"NazwaStrukturyLogicznej\",\n    ),\n    kodFormularza: requireString(potwierdzenie.KodFormularza, \"KodFormularza\"),\n    dokumenty,\n  };\n}\n","import { gunzipSync } from \"node:zlib\";\nimport { ZipFile } from \"yazl\";\nimport { fromBuffer, Entry } from \"yauzl\";\n\nexport interface ZipEntryInput {\n  fileName: string;\n  content: Buffer | Uint8Array;\n}\n\nexport interface UnzipOptions {\n  maxFiles?: number;\n  maxTotalUncompressedSize?: number;\n  maxFileUncompressedSize?: number;\n  maxCompressionRatio?: number | null;\n}\n\nconst DEFAULT_UNZIP_OPTIONS: Required<UnzipOptions> = {\n  maxFiles: 10_000,\n  maxTotalUncompressedSize: 2_000_000_000,\n  maxFileUncompressedSize: 500_000_000,\n  maxCompressionRatio: 200,\n};\n\nexport async function createZip(entries: ZipEntryInput[]): Promise<Buffer> {\n  return new Promise((resolve, reject) => {\n    const zipfile = new ZipFile();\n    for (const entry of entries) {\n      zipfile.addBuffer(Buffer.from(entry.content), entry.fileName);\n    }\n\n    const chunks: Buffer[] = [];\n    zipfile.outputStream.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\n    zipfile.outputStream.on(\"error\", (err) => reject(err));\n    zipfile.outputStream.on(\"end\", () => resolve(Buffer.concat(chunks)));\n    zipfile.end();\n  });\n}\n\nexport async function unzip(\n  buffer: Buffer,\n  options: UnzipOptions = {},\n): Promise<Map<string, Buffer>> {\n  const limits = { ...DEFAULT_UNZIP_OPTIONS, ...options };\n  return new Promise((resolve, reject) => {\n    fromBuffer(buffer, { lazyEntries: true }, (err, zipfile) => {\n      if (err || !zipfile) {\n        reject(err ?? new Error(\"Failed to open zip buffer.\"));\n        return;\n      }\n\n      const files = new Map<string, Buffer>();\n      let totalUncompressed = 0;\n      zipfile.readEntry();\n      zipfile.on(\"entry\", (entry: Entry) => {\n        if (entry.fileName.endsWith(\"/\")) {\n          zipfile.readEntry();\n          return;\n        }\n\n        if (files.size >= limits.maxFiles) {\n          reject(new Error(\"zip contains too many files\"));\n          return;\n        }\n\n        const uncompressedSize = entry.uncompressedSize ?? 0;\n        const compressedSize = entry.compressedSize ?? 0;\n\n        if (uncompressedSize > limits.maxFileUncompressedSize) {\n          reject(new Error(\"zip entry exceeds max_file_uncompressed_size\"));\n          return;\n        }\n\n        totalUncompressed += uncompressedSize;\n        if (totalUncompressed > limits.maxTotalUncompressedSize) {\n          reject(new Error(\"zip exceeds max_total_uncompressed_size\"));\n          return;\n        }\n\n        if (limits.maxCompressionRatio !== null) {\n          if (compressedSize === 0 && uncompressedSize > 0) {\n            reject(new Error(\"zip entry has suspicious compression metadata\"));\n            return;\n          }\n          if (compressedSize > 0 && uncompressedSize > 0) {\n            const ratio = uncompressedSize / compressedSize;\n            if (ratio > limits.maxCompressionRatio) {\n              reject(new Error(\"zip entry exceeds max_compression_ratio\"));\n              return;\n            }\n          }\n        }\n\n        zipfile.openReadStream(entry, (streamErr, stream) => {\n          if (streamErr || !stream) {\n            reject(streamErr ?? new Error(\"Failed to read zip entry.\"));\n            return;\n          }\n          const chunks: Buffer[] = [];\n          stream.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\n          stream.on(\"error\", (streamError) => reject(streamError));\n          stream.on(\"end\", () => {\n            files.set(entry.fileName, Buffer.concat(chunks));\n            zipfile.readEntry();\n          });\n        });\n      });\n      zipfile.on(\"end\", () => resolve(files));\n      zipfile.on(\"error\", (zipErr) => reject(zipErr));\n    });\n  });\n}\n\nconst TAR_BLOCK_SIZE = 512;\n\nexport async function untarGz(\n  buffer: Buffer,\n  options: UnzipOptions = {},\n): Promise<Map<string, Buffer>> {\n  const limits = { ...DEFAULT_UNZIP_OPTIONS, ...options };\n  validateArchiveLimits(limits);\n\n  const compressedSize = Math.max(buffer.length, 1);\n  let tarBuffer: Buffer;\n  try {\n    tarBuffer = gunzipSync(buffer);\n  } catch {\n    throw new Error(\"Failed to open tar.gz buffer.\");\n  }\n\n  const files = new Map<string, Buffer>();\n  let totalUncompressed = 0;\n  let offset = 0;\n\n  while (offset + TAR_BLOCK_SIZE <= tarBuffer.length) {\n    const header = tarBuffer.subarray(offset, offset + TAR_BLOCK_SIZE);\n    if (isZeroBlock(header)) {\n      break;\n    }\n\n    const name = readTarString(header, 0, 100);\n    const prefix = readTarString(header, 345, 155);\n    const size = parseTarOctal(header.subarray(124, 136));\n    const typeFlag = String.fromCharCode(header[156] as number);\n    offset += TAR_BLOCK_SIZE;\n    const paddedSize = Math.ceil(size / TAR_BLOCK_SIZE) * TAR_BLOCK_SIZE;\n\n    if (typeFlag === \"5\" || name.endsWith(\"/\")) {\n      offset += paddedSize;\n      continue;\n    }\n    if (typeFlag !== \"0\" && typeFlag !== \"\\0\") {\n      throw new Error(\"tar.gz entry must be a regular file\");\n    }\n    if (offset + size > tarBuffer.length) {\n      throw new Error(\"tar.gz entry could not be read\");\n    }\n\n    if (files.size >= limits.maxFiles) {\n      throw new Error(\"tar.gz contains too many files\");\n    }\n    if (size > limits.maxFileUncompressedSize) {\n      throw new Error(\"tar.gz contains an entry exceeding max_file_uncompressed_size\");\n    }\n\n    totalUncompressed += size;\n    if (totalUncompressed > limits.maxTotalUncompressedSize) {\n      throw new Error(\"tar.gz exceeds max_total_uncompressed_size\");\n    }\n    if (\n      limits.maxCompressionRatio !== null &&\n      totalUncompressed / compressedSize > limits.maxCompressionRatio\n    ) {\n      throw new Error(\"tar.gz exceeds max_compression_ratio\");\n    }\n\n    const fullName = prefix ? `${prefix}/${name}` : name;\n    const safeName = sanitizeArchiveEntryName(fullName, \"tar.gz\");\n    files.set(safeName, Buffer.from(tarBuffer.subarray(offset, offset + size)));\n    offset += paddedSize;\n  }\n\n  return files;\n}\n\nfunction validateArchiveLimits(limits: Required<UnzipOptions>): void {\n  if (limits.maxFiles <= 0) {\n    throw new Error(\"max_files must be positive\");\n  }\n  if (limits.maxTotalUncompressedSize <= 0) {\n    throw new Error(\"max_total_uncompressed_size must be positive\");\n  }\n  if (limits.maxFileUncompressedSize <= 0) {\n    throw new Error(\"max_file_uncompressed_size must be positive\");\n  }\n  if (limits.maxCompressionRatio !== null && limits.maxCompressionRatio <= 0) {\n    throw new Error(\"max_compression_ratio must be positive or None\");\n  }\n}\n\nfunction sanitizeArchiveEntryName(rawName: string, archiveType: string): string {\n  const normalized = rawName.replaceAll(\"\\\\\", \"/\");\n  if (normalized.startsWith(\"/\") || /^[A-Za-z]:/.test(normalized) || normalized.includes(\":\")) {\n    throw new Error(`${archiveType} entry path must be relative`);\n  }\n  const parts = normalized.split(\"/\").filter((part) => part.length > 0);\n  if (parts.length === 0 || parts.some((part) => part === \".\" || part === \"..\")) {\n    throw new Error(`${archiveType} entry path contains unsafe segments`);\n  }\n  return parts.join(\"/\");\n}\n\nfunction isZeroBlock(block: Buffer): boolean {\n  for (const byte of block) {\n    if (byte !== 0) {\n      return false;\n    }\n  }\n  return true;\n}\n\nfunction readTarString(header: Buffer, start: number, length: number): string {\n  const slice = header.subarray(start, start + length);\n  const end = slice.indexOf(0);\n  return slice\n    .subarray(0, end === -1 ? slice.length : end)\n    .toString(\"utf8\")\n    .trim();\n}\n\nfunction parseTarOctal(value: Buffer): number {\n  const text = value.toString(\"utf8\").replaceAll(\"\\0\", \"\").trim();\n  if (!text) {\n    return 0;\n  }\n  const parsed = Number.parseInt(text, 8);\n  return Number.isFinite(parsed) ? parsed : 0;\n}\n","export function splitBuffer(buffer: Buffer, maxPartSize: number): Buffer[] {\n  if (maxPartSize <= 0) {\n    throw new Error(\"maxPartSize must be positive.\");\n  }\n  if (buffer.length <= maxPartSize) {\n    return [buffer];\n  }\n  const parts: Buffer[] = [];\n  for (let offset = 0; offset < buffer.length; offset += maxPartSize) {\n    parts.push(buffer.subarray(offset, offset + maxPartSize));\n  }\n  return parts;\n}\n","import { SessionsClient } from \"../api/sessionsClient\";\nimport { SecurityClient } from \"../api/securityClient\";\nimport { HttpClient } from \"../client/httpClient\";\nimport { CryptographyService, EncryptionData } from \"../crypto/cryptographyService\";\nimport { KsefError, KsefValidationError } from \"../errors/errors\";\nimport { BatchSessionFormCode, StatusInfo } from \"../types/common\";\nimport { PartUploadRequest, SessionStatusResponse } from \"../types/sessions\";\nimport { serializeInvoiceXml, InvoiceXmlInput } from \"../xml/invoice\";\nimport { parseUpoXml, UpoPotwierdzenie } from \"../xml/upo\";\nimport { createZip } from \"../utils/zip\";\nimport { splitBuffer } from \"../utils/buffer\";\nimport { WaitForUpoOptions } from \"./upo\";\n\nexport const MAX_BATCH_PART_SIZE_BYTES = 100 * 1024 * 1024;\n\nexport interface BatchInvoiceInput {\n  fileName: string;\n  invoice: InvoiceXmlInput;\n}\n\nexport interface BatchSessionOpenOptions {\n  formCode: BatchSessionFormCode;\n  invoices?: BatchInvoiceInput[];\n  zipBytes?: Buffer;\n  publicCertificateBase64Der?: string;\n  offlineMode?: boolean;\n  upoV43?: boolean;\n  parallelism?: number;\n  maxPartSizeBytes?: number;\n}\n\nexport interface BatchSessionState {\n  referenceNumber: string;\n  encryptionData: EncryptionData;\n  batchFile: {\n    fileSize: number;\n    fileHash: string;\n    fileParts: Array<{\n      ordinalNumber: number;\n      fileSize: number;\n      fileHash: string;\n    }>;\n  };\n  partUploadRequests: PartUploadRequest[];\n  encryptedPartsBase64: string[];\n  upoV43?: boolean;\n  offlineMode?: boolean;\n}\n\nexport interface BatchUploadOptions {\n  parallelism?: number;\n  skipOrdinals?: number[];\n  progressCallback?: (ordinalNumber: number) => void | Promise<void>;\n}\n\nexport class BatchSessionHandle {\n  readonly referenceNumber: string;\n  readonly encryptionData: EncryptionData;\n  readonly upoV43: boolean;\n  readonly offlineMode: boolean | undefined;\n  readonly batchFile: {\n    fileSize: number;\n    fileHash: string;\n    fileParts: Array<{\n      ordinalNumber: number;\n      fileSize: number;\n      fileHash: string;\n    }>;\n  };\n  private readonly sessionsClient: SessionsClient;\n  private readonly http: HttpClient;\n  private readonly partUploadRequests: PartUploadRequest[];\n  private readonly encryptedParts: Buffer[];\n\n  constructor(\n    referenceNumber: string,\n    encryptionData: EncryptionData,\n    sessionsClient: SessionsClient,\n    http: HttpClient,\n    batchFile = { fileSize: 0, fileHash: \"\", fileParts: [] as Array<{ ordinalNumber: number; fileSize: number; fileHash: string }> },\n    partUploadRequests: PartUploadRequest[] = [],\n    encryptedParts: Buffer[] = [],\n    upoV43 = false,\n    offlineMode?: boolean,\n  ) {\n    this.referenceNumber = referenceNumber;\n    this.encryptionData = encryptionData;\n    this.sessionsClient = sessionsClient;\n    this.http = http;\n    this.batchFile = batchFile;\n    this.partUploadRequests = partUploadRequests;\n    this.encryptedParts = encryptedParts;\n    this.upoV43 = upoV43;\n    this.offlineMode = offlineMode;\n  }\n\n  getState(): BatchSessionState {\n    return {\n      referenceNumber: this.referenceNumber,\n      encryptionData: {\n        cipherKey: Buffer.from(this.encryptionData.cipherKey),\n        cipherIv: Buffer.from(this.encryptionData.cipherIv),\n        encryptionInfo: { ...this.encryptionData.encryptionInfo },\n      },\n      batchFile: {\n        fileSize: this.batchFile.fileSize,\n        fileHash: this.batchFile.fileHash,\n        fileParts: this.batchFile.fileParts.map((part) => ({ ...part })),\n      },\n      partUploadRequests: this.partUploadRequests.map((part) => ({\n        ...part,\n        headers: { ...(part.headers ?? {}) },\n      })),\n      encryptedPartsBase64: this.encryptedParts.map((part) => part.toString(\"base64\")),\n      upoV43: this.upoV43,\n      ...(this.offlineMode !== undefined ? { offlineMode: this.offlineMode } : {}),\n    };\n  }\n\n  async status(): Promise<SessionStatusResponse> {\n    return await this.sessionsClient.getSessionStatus(this.referenceNumber);\n  }\n\n  async uploadParts(parallelismOrOptions: number | BatchUploadOptions = 1): Promise<void> {\n    const options =\n      typeof parallelismOrOptions === \"number\"\n        ? { parallelism: parallelismOrOptions }\n        : parallelismOrOptions;\n    await uploadParts(this.http, this.partUploadRequests, this.encryptedParts, {\n      parallelism: options.parallelism ?? 1,\n      skipOrdinals: options.skipOrdinals ?? [],\n      ...(options.progressCallback ? { progressCallback: options.progressCallback } : {}),\n    });\n  }\n\n  async close(): Promise<void> {\n    await this.sessionsClient.closeBatchSession(this.referenceNumber);\n  }\n\n  async waitForUpo(options: WaitForUpoOptions = {}): Promise<string | null> {\n    const pollIntervalMs = options.pollIntervalMs ?? 2000;\n    const maxAttempts = options.maxAttempts ?? 120;\n    for (let attempt = 0; attempt < maxAttempts; attempt += 1) {\n      const status = await this.status();\n      const statusInfo = status.status ?? ({} as StatusInfo);\n      const page = status.upo?.pages?.[0];\n      if (statusInfo.code === 200 && page) {\n        return await this.http.request<string>({\n          method: \"GET\",\n          path: page.downloadUrl,\n          responseType: \"text\",\n        });\n      }\n      if (statusInfo.code !== 100 && statusInfo.code !== 200) {\n        const details = statusInfo.details?.length\n          ? ` Details: ${statusInfo.details.join(\", \")}`\n          : \"\";\n        throw new KsefError(\n          `Session failed: ${statusInfo.code} ${statusInfo.description}${details}`,\n        );\n      }\n      await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));\n    }\n    return null;\n  }\n\n  async waitForUpoParsed(options: WaitForUpoOptions = {}): Promise<UpoPotwierdzenie | null> {\n    const xml = await this.waitForUpo(options);\n    if (!xml) {\n      return null;\n    }\n    return parseUpoXml(xml);\n  }\n\n  async listFailedInvoices(\n    pageSize?: number,\n    continuationToken?: string,\n  ): Promise<Record<string, unknown>> {\n    return await this.sessionsClient.getSessionFailedInvoices(\n      this.referenceNumber,\n      pageSize,\n      continuationToken,\n    );\n  }\n}\n\nexport class BatchSessionWorkflow {\n  private readonly sessionsClient: SessionsClient;\n  private readonly securityClient: SecurityClient;\n  private readonly http: HttpClient;\n\n  constructor(sessionsClient: SessionsClient, securityClient: SecurityClient, http: HttpClient) {\n    this.sessionsClient = sessionsClient;\n    this.securityClient = securityClient;\n    this.http = http;\n  }\n\n  async open(options: BatchSessionOpenOptions): Promise<BatchSessionHandle> {\n    if (!options.formCode) {\n      throw new KsefValidationError(\"formCode is required.\");\n    }\n\n    const zipBytes = await this.resolveZipBytes(options);\n    const certificate =\n      options.publicCertificateBase64Der ??\n      (await this.getCertificateByUsage(\"SymmetricKeyEncryption\"));\n    const encryption = CryptographyService.getEncryptionData(certificate);\n\n    const maxPartSizeBytes = options.maxPartSizeBytes ?? MAX_BATCH_PART_SIZE_BYTES;\n    const parts = splitBuffer(zipBytes, maxPartSizeBytes);\n    const encryptedParts = parts.map((part) =>\n      CryptographyService.encryptAes256Cbc(part, encryption.cipherKey, encryption.cipherIv),\n    );\n\n    const batchFile = buildBatchFileInfo(zipBytes, encryptedParts);\n    const requestPayload = {\n      formCode: options.formCode,\n      batchFile,\n      encryption: encryption.encryptionInfo,\n      ...(options.offlineMode !== undefined && { offlineMode: options.offlineMode }),\n    };\n\n    const response = await this.sessionsClient.openBatchSession(requestPayload, options.upoV43);\n\n    return new BatchSessionHandle(\n      response.referenceNumber,\n      encryption,\n      this.sessionsClient,\n      this.http,\n      batchFile,\n      response.partUploadRequests,\n      encryptedParts,\n      Boolean(options.upoV43),\n      options.offlineMode,\n    );\n  }\n\n  async openUploadAndClose(options: BatchSessionOpenOptions): Promise<BatchSessionHandle> {\n    const handle = await this.open(options);\n    await handle.uploadParts(options.parallelism ?? 1);\n    await handle.close();\n    return handle;\n  }\n\n  async resume(state: BatchSessionState, options: { zipBytes: Buffer }): Promise<BatchSessionHandle> {\n    if (!state || typeof state.referenceNumber !== \"string\" || !state.referenceNumber.trim()) {\n      throw new KsefValidationError(\"Batch session state requires non-empty referenceNumber.\");\n    }\n    if (!options?.zipBytes || options.zipBytes.length === 0) {\n      throw new KsefValidationError(\"Batch session resume requires zipBytes.\");\n    }\n    validateEncryptionData(state.encryptionData);\n    const resolvedBatchFile = state.batchFile;\n    if (!resolvedBatchFile || typeof resolvedBatchFile.fileHash !== \"string\") {\n      throw new KsefValidationError(\"Batch session state requires batchFile metadata.\");\n    }\n    const zipHash = CryptographyService.sha256Base64(options.zipBytes);\n    if (zipHash !== resolvedBatchFile.fileHash) {\n      throw new KsefValidationError(\"Batch session resume zipBytes hash does not match saved state.\");\n    }\n    if (options.zipBytes.length !== resolvedBatchFile.fileSize) {\n      throw new KsefValidationError(\"Batch session resume zipBytes size does not match saved state.\");\n    }\n\n    let encryptedParts: Buffer[] = [];\n    if (Array.isArray(state.encryptedPartsBase64) && state.encryptedPartsBase64.length > 0) {\n      encryptedParts = state.encryptedPartsBase64.map((part) => Buffer.from(part, \"base64\"));\n    } else {\n      const partSizes = resolvedBatchFile.fileParts\n        .map((part) => part.fileSize)\n        .filter((size) => Number.isInteger(size) && size > 0);\n      const maxPartSizeBytes =\n        partSizes.length > 0 ? Math.max(...partSizes) : MAX_BATCH_PART_SIZE_BYTES;\n      const parts = splitBuffer(options.zipBytes, maxPartSizeBytes);\n      encryptedParts = parts.map((part) =>\n        CryptographyService.encryptAes256Cbc(part, state.encryptionData.cipherKey, state.encryptionData.cipherIv),\n      );\n    }\n\n    return new BatchSessionHandle(\n      state.referenceNumber,\n      state.encryptionData,\n      this.sessionsClient,\n      this.http,\n      resolvedBatchFile,\n      state.partUploadRequests ?? [],\n      encryptedParts,\n      Boolean(state.upoV43),\n      state.offlineMode,\n    );\n  }\n\n  private async resolveZipBytes(options: BatchSessionOpenOptions): Promise<Buffer> {\n    if (options.zipBytes) {\n      return options.zipBytes;\n    }\n    if (!options.invoices || options.invoices.length === 0) {\n      throw new KsefValidationError(\"Either zipBytes or invoices are required.\");\n    }\n    const entries = options.invoices.map((item) => ({\n      fileName: item.fileName,\n      content: serializeInvoiceXml(item.invoice),\n    }));\n    return await createZip(entries);\n  }\n\n  private async getCertificateByUsage(\n    usage: \"KsefTokenEncryption\" | \"SymmetricKeyEncryption\",\n  ): Promise<string> {\n    const certificates = await this.securityClient.getPublicKeyCertificates();\n    const cert = certificates.find((item) => item.usage.includes(usage));\n    if (!cert) {\n      throw new KsefError(`No public certificate found for usage ${usage}.`);\n    }\n    return cert.certificate;\n  }\n}\n\nfunction validateEncryptionData(value: EncryptionData): void {\n  const hasKey = Buffer.isBuffer(value?.cipherKey) && value.cipherKey.length > 0;\n  const hasIv = Buffer.isBuffer(value?.cipherIv) && value.cipherIv.length > 0;\n  if (!hasKey || !hasIv) {\n    throw new KsefValidationError(\"Batch session state requires cipherKey and cipherIv.\");\n  }\n}\n\nfunction buildBatchFileInfo(zipBytes: Buffer, encryptedParts: Buffer[]) {\n  const zipHash = CryptographyService.sha256Base64(zipBytes);\n  const fileParts = encryptedParts.map((part, index) => ({\n    ordinalNumber: index + 1,\n    fileSize: part.length,\n    fileHash: CryptographyService.sha256Base64(part),\n  }));\n  return {\n    fileSize: zipBytes.length,\n    fileHash: zipHash,\n    fileParts,\n  };\n}\n\nasync function uploadParts(\n  http: HttpClient,\n  partUploadRequests: PartUploadRequest[],\n  parts: Buffer[],\n  options: {\n    parallelism: number;\n    skipOrdinals: number[];\n    progressCallback?: (ordinalNumber: number) => void | Promise<void>;\n  },\n): Promise<void> {\n  const sortedRequests = [...partUploadRequests].sort((a, b) => a.ordinalNumber - b.ordinalNumber);\n  if (sortedRequests.length !== parts.length) {\n    throw new KsefValidationError(\"parts length must match partUploadRequests length.\");\n  }\n\n  const partByOrdinal = new Map<number, Buffer>();\n  for (const [index, request] of sortedRequests.entries()) {\n    const part = parts[index];\n    if (!part) {\n      throw new KsefValidationError(`Missing batch part at index ${index}.`);\n    }\n    partByOrdinal.set(request.ordinalNumber, part);\n  }\n\n  const skip = new Set<number>(options.skipOrdinals);\n  const activeRequests = sortedRequests.filter((request) => !skip.has(request.ordinalNumber));\n  const tasks = activeRequests.map((request) => async () => {\n    const part = partByOrdinal.get(request.ordinalNumber);\n    if (!part) {\n      throw new KsefValidationError(`Missing batch part for ordinal ${request.ordinalNumber}.`);\n    }\n    const headers: Record<string, string> = {};\n    for (const [key, value] of Object.entries(request.headers ?? {})) {\n      if (value) {\n        headers[key] = value;\n      }\n    }\n    await http.request<void>({\n      method: request.method as \"PUT\" | \"POST\" | \"GET\" | \"DELETE\",\n      path: request.url,\n      headers,\n      body: part,\n      responseType: \"text\",\n    });\n    if (options.progressCallback) {\n      await options.progressCallback(request.ordinalNumber);\n    }\n  });\n\n  await runWithConcurrency(tasks, options.parallelism);\n}\n\nasync function runWithConcurrency(\n  tasks: Array<() => Promise<void>>,\n  parallelism: number,\n): Promise<void> {\n  const limit = Math.max(1, Math.min(parallelism, tasks.length));\n  let index = 0;\n  const workers = Array.from({ length: limit }, async () => {\n    while (index < tasks.length) {\n      const current = index;\n      index += 1;\n      const task = tasks[current];\n      if (task) {\n        await task();\n      }\n    }\n  });\n  await Promise.all(workers);\n}\n","export interface ContinuationPoints {\n  [subjectType: string]: string | undefined;\n}\n\nexport function updateContinuationPoint(\n  continuationPoints: ContinuationPoints,\n  subjectType: string,\n  packageInfo: {\n    isTruncated?: boolean;\n    lastPermanentStorageDate?: string | null;\n    permanentStorageHwmDate?: string | null;\n  },\n  options: {\n    dateType?: string;\n  } = {},\n): void {\n  const dateType = options.dateType?.trim().toLowerCase();\n  if (dateType && dateType !== \"permanentstorage\") {\n    delete continuationPoints[subjectType];\n    return;\n  }\n  const isTruncated = Boolean(packageInfo.isTruncated);\n  const lastPermanentStorageDate = packageInfo.lastPermanentStorageDate ?? undefined;\n  const hwmDate = packageInfo.permanentStorageHwmDate ?? undefined;\n  if (isTruncated && lastPermanentStorageDate) {\n    continuationPoints[subjectType] = lastPermanentStorageDate;\n    return;\n  }\n  if (hwmDate) {\n    continuationPoints[subjectType] = hwmDate;\n    return;\n  }\n  delete continuationPoints[subjectType];\n}\n\nexport function getEffectiveStartDate(\n  continuationPoints: ContinuationPoints,\n  subjectType: string,\n  windowFrom: string,\n): string {\n  return continuationPoints[subjectType] ?? windowFrom;\n}\n\nexport function dedupeByKsefNumber(\n  metadataSummaries: Array<Record<string, unknown>>,\n): Record<string, Record<string, unknown>> {\n  const unique: Record<string, Record<string, unknown>> = {};\n  const seen = new Set<string>();\n  for (const summary of metadataSummaries) {\n    const value =\n      (summary.ksefNumber as string | undefined) ?? (summary.KsefNumber as string | undefined);\n    if (!value) {\n      continue;\n    }\n    const key = value.toLowerCase();\n    if (seen.has(key)) {\n      continue;\n    }\n    seen.add(key);\n    unique[value] = summary;\n  }\n  return unique;\n}\n","import { InvoiceExportWorkflow } from \"./invoiceExportWorkflow\";\nimport {\n  ContinuationPoints,\n  dedupeByKsefNumber,\n  getEffectiveStartDate,\n  updateContinuationPoint,\n} from \"./hwmCoordinator\";\nimport { InvoiceQueryFilters } from \"../types/invoices\";\n\nexport interface IncrementalExportOptions {\n  subjectType: string;\n  windowFrom: string;\n  windowTo: string;\n  continuationPoints: ContinuationPoints;\n  maxIterations?: number;\n  /**\n   * @deprecated Use requireExportPartHash instead.\n   */\n  verifyHashes?: boolean;\n  requireExportPartHash?: boolean;\n  pollIntervalMs?: number;\n  maxAttempts?: number;\n  filtersFactory?: (from: string, to: string) => InvoiceQueryFilters;\n}\n\nexport interface IncrementalExportResult {\n  referenceNumbers: string[];\n  metadataSummaries: Array<Record<string, unknown>>;\n  invoiceXmlFiles: Record<string, string>;\n  continuationPoints: ContinuationPoints;\n}\n\nexport class IncrementalExportWorkflow {\n  private readonly exports: InvoiceExportWorkflow;\n\n  constructor(exportsWorkflow: InvoiceExportWorkflow) {\n    this.exports = exportsWorkflow;\n  }\n\n  async run(options: IncrementalExportOptions): Promise<IncrementalExportResult> {\n    const referenceNumbers: string[] = [];\n    const combinedXmlFiles: Record<string, string> = {};\n    const combinedMetadata: Array<Record<string, unknown>> = [];\n\n    const maxIterations = options.maxIterations ?? 20;\n    let effectiveFrom = getEffectiveStartDate(\n      options.continuationPoints,\n      options.subjectType,\n      options.windowFrom,\n    );\n\n    for (let iteration = 0; iteration < maxIterations; iteration += 1) {\n      const filters =\n        options.filtersFactory?.(effectiveFrom, options.windowTo) ??\n        ({\n          subjectType: options.subjectType,\n          dateRange: {\n            dateType: \"PermanentStorage\",\n            from: effectiveFrom,\n            to: options.windowTo,\n          },\n        } as unknown as InvoiceQueryFilters);\n\n      const started = await this.exports.startExport({ filters });\n      referenceNumbers.push(started.referenceNumber);\n\n      const waitOptions = {\n        ...(options.pollIntervalMs !== undefined && {\n          pollIntervalMs: options.pollIntervalMs,\n        }),\n        ...(options.maxAttempts !== undefined && {\n          maxAttempts: options.maxAttempts,\n        }),\n      };\n      const status = await this.exports.waitForExport(started.referenceNumber, waitOptions);\n\n      const downloadOptions: {\n        verifyHashes?: boolean;\n        requireExportPartHash?: boolean;\n      } = {};\n      if (options.requireExportPartHash !== undefined) {\n        downloadOptions.requireExportPartHash = options.requireExportPartHash;\n      } else if (options.verifyHashes !== undefined) {\n        downloadOptions.verifyHashes = options.verifyHashes;\n      }\n\n      const processed = await this.exports.downloadAndProcessPackage(\n        status,\n        started.encryptionData,\n        downloadOptions,\n      );\n\n      combinedMetadata.push(...processed.metadataSummaries);\n      for (const [name, content] of Object.entries(processed.invoiceXmlFiles)) {\n        combinedXmlFiles[name] = content;\n      }\n\n      updateContinuationPoint(\n        options.continuationPoints,\n        options.subjectType,\n        status.package ?? {},\n        {\n          dateType: filters.dateRange?.dateType,\n        },\n      );\n\n      const nextFrom = getEffectiveStartDate(\n        options.continuationPoints,\n        options.subjectType,\n        options.windowFrom,\n      );\n      if (nextFrom === effectiveFrom) {\n        break;\n      }\n      effectiveFrom = nextFrom;\n    }\n\n    const deduped = dedupeByKsefNumber(combinedMetadata);\n    return {\n      referenceNumbers,\n      metadataSummaries: Object.values(deduped),\n      invoiceXmlFiles: combinedXmlFiles,\n      continuationPoints: options.continuationPoints,\n    };\n  }\n}\n","import { InvoicesClient } from \"../api/invoicesClient\";\nimport { SecurityClient } from \"../api/securityClient\";\nimport { HttpClient } from \"../client/httpClient\";\nimport { CryptographyService, EncryptionData } from \"../crypto/cryptographyService\";\nimport { KsefError } from \"../errors/errors\";\nimport {\n  InvoiceExportRequest,\n  InvoiceExportStatusResponse,\n  InvoicePackagePart,\n  InvoiceQueryFilters,\n  validateInvoiceQueryFilters,\n} from \"../types/invoices\";\nimport { StatusInfo } from \"../types/common\";\nimport { unzip, untarGz } from \"../utils/zip\";\n\nexport interface ExportStartOptions {\n  filters: InvoiceQueryFilters;\n  encryptionData?: EncryptionData;\n  publicCertificateBase64Der?: string;\n  onlyMetadata?: boolean;\n  compressionType?: \"Zip\" | \"TarGz\";\n  /**\n   * @deprecated Use `onlyMetadata` instead.\n   */\n  includeMetadata?: boolean;\n}\n\nexport interface ExportResult {\n  referenceNumber: string;\n  encryptionData: EncryptionData;\n}\n\nexport interface PackageProcessingResult {\n  metadataSummaries: Array<Record<string, unknown>>;\n  invoiceXmlFiles: Record<string, string>;\n}\n\nexport interface WaitForExportOptions {\n  pollIntervalMs?: number;\n  maxAttempts?: number;\n}\n\nexport interface DownloadPackageOptions {\n  /**\n   * @deprecated Use requireExportPartHash instead.\n   */\n  verifyHashes?: boolean;\n  requireExportPartHash?: boolean;\n}\n\nexport interface InvoiceExportWorkflowOptions {\n  requireExportPartHash?: boolean;\n}\n\nexport class InvoiceExportWorkflow {\n  private readonly invoicesClient: InvoicesClient;\n  private readonly securityClient: SecurityClient;\n  private readonly http: HttpClient;\n  private readonly requireExportPartHash: boolean;\n\n  constructor(\n    invoicesClient: InvoicesClient,\n    securityClient: SecurityClient,\n    http: HttpClient,\n    options: InvoiceExportWorkflowOptions = {},\n  ) {\n    this.invoicesClient = invoicesClient;\n    this.securityClient = securityClient;\n    this.http = http;\n    this.requireExportPartHash = options.requireExportPartHash ?? true;\n  }\n\n  async startExport(options: ExportStartOptions): Promise<ExportResult> {\n    validateInvoiceQueryFilters(options.filters);\n    const encryptionData =\n      options.encryptionData ??\n      (await this.buildEncryptionData(options.publicCertificateBase64Der));\n    const request: InvoiceExportRequest = {\n      encryption: encryptionData.encryptionInfo,\n      filters: options.filters,\n      ...((options.onlyMetadata ?? options.includeMetadata) !== undefined\n        ? { onlyMetadata: options.onlyMetadata ?? options.includeMetadata }\n        : {}),\n      ...(options.compressionType ? { compressionType: options.compressionType } : {}),\n    };\n    const response = await this.invoicesClient.exportInvoices(request);\n    return {\n      referenceNumber: response.referenceNumber,\n      encryptionData,\n    };\n  }\n\n  async waitForExport(\n    referenceNumber: string,\n    options: WaitForExportOptions = {},\n  ): Promise<InvoiceExportStatusResponse> {\n    const pollIntervalMs = options.pollIntervalMs ?? 2000;\n    const maxAttempts = options.maxAttempts ?? 60;\n    for (let attempt = 0; attempt < maxAttempts; attempt += 1) {\n      const status = await this.invoicesClient.getInvoiceExportStatus(referenceNumber);\n      const statusInfo = status.status ?? ({} as StatusInfo);\n      if (statusInfo.code === 200) {\n        return status;\n      }\n      if (statusInfo.code !== 100) {\n        const details = statusInfo.details?.length\n          ? ` Details: ${statusInfo.details.join(\", \")}`\n          : \"\";\n        throw new KsefError(\n          `Export failed: ${statusInfo.code} ${statusInfo.description}${details}`,\n        );\n      }\n      await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));\n    }\n    throw new KsefError(\"Export did not complete within max attempts.\");\n  }\n\n  async downloadAndProcessPackage(\n    status: InvoiceExportStatusResponse,\n    encryptionData: EncryptionData,\n    options: DownloadPackageOptions = {},\n  ): Promise<PackageProcessingResult> {\n    const packageInfo = status.package ?? undefined;\n    if (!packageInfo || packageInfo.invoiceCount === 0) {\n      return { metadataSummaries: [], invoiceXmlFiles: {} };\n    }\n    const parts = packageInfo.parts ?? [];\n    if (parts.length === 0) {\n      return { metadataSummaries: [], invoiceXmlFiles: {} };\n    }\n    const compressionType = resolveExportCompressionType(packageInfo.compressionType);\n    const verifyHashes = resolveRequireExportPartHash(options, this.requireExportPartHash);\n    const encryptedParts = await this.downloadParts(parts, verifyHashes);\n    const decryptedParts = encryptedParts.map((part) =>\n      CryptographyService.decryptAes256Cbc(part, encryptionData.cipherKey, encryptionData.cipherIv),\n    );\n    const archiveBytes = Buffer.concat(decryptedParts);\n    const entries =\n      compressionType === \"TarGz\" ? await untarGz(archiveBytes) : await unzip(archiveBytes);\n\n    const metadataSummaries: Array<Record<string, unknown>> = [];\n    const invoiceXmlFiles: Record<string, string> = {};\n\n    for (const [name, content] of entries.entries()) {\n      if (name.toLowerCase() === \"_metadata.json\") {\n        const parsed = JSON.parse(content.toString(\"utf8\"));\n        const invoices = parsed?.invoices ?? parsed?.invoiceList ?? [];\n        if (Array.isArray(invoices)) {\n          metadataSummaries.push(...(invoices as Array<Record<string, unknown>>));\n        }\n      } else if (name.toLowerCase().endsWith(\".xml\")) {\n        invoiceXmlFiles[name] = content.toString(\"utf8\");\n      }\n    }\n\n    return { metadataSummaries, invoiceXmlFiles };\n  }\n\n  private async downloadParts(\n    parts: InvoicePackagePart[],\n    verifyHashes = this.requireExportPartHash,\n  ): Promise<Buffer[]> {\n    const results: Buffer[] = [];\n    for (const part of parts) {\n      const data = await this.http.request<Buffer>({\n        method: part.method as \"GET\",\n        path: part.url,\n        responseType: \"buffer\",\n        skipAuth: true,\n      });\n      if (verifyHashes) {\n        const expectedHash =\n          typeof part.encryptedPartHash === \"string\" ? part.encryptedPartHash : \"\";\n        if (!expectedHash.trim()) {\n          throw new KsefError(`Missing encrypted part hash for ${part.partName}.`);\n        }\n        const hash = CryptographyService.sha256Base64(data);\n        if (hash !== expectedHash) {\n          throw new KsefError(\n            `Encrypted part hash mismatch for ${part.partName}: expected ${expectedHash}, got ${hash}.`,\n          );\n        }\n      }\n      results.push(data);\n    }\n    return results;\n  }\n\n  private async buildEncryptionData(publicCertificateBase64Der?: string): Promise<EncryptionData> {\n    if (publicCertificateBase64Der) {\n      return CryptographyService.getEncryptionData(publicCertificateBase64Der);\n    }\n    const cert = await this.getCertificateByUsage(\"SymmetricKeyEncryption\");\n    return CryptographyService.getEncryptionData(cert);\n  }\n\n  private async getCertificateByUsage(\n    usage: \"KsefTokenEncryption\" | \"SymmetricKeyEncryption\",\n  ): Promise<string> {\n    const certificates = await this.securityClient.getPublicKeyCertificates();\n    const cert = certificates.find((item) => item.usage.includes(usage));\n    if (!cert) {\n      throw new KsefError(`No public certificate found for usage ${usage}.`);\n    }\n    return cert.certificate;\n  }\n}\n\nfunction resolveRequireExportPartHash(\n  options: DownloadPackageOptions,\n  defaultValue: boolean,\n): boolean {\n  if (options.verifyHashes !== undefined) {\n    return options.verifyHashes;\n  }\n  if (options.requireExportPartHash !== undefined) {\n    return options.requireExportPartHash;\n  }\n  return defaultValue;\n}\n\nfunction resolveExportCompressionType(value: string | null | undefined): \"Zip\" | \"TarGz\" {\n  if (value === undefined || value === null || value.trim() === \"\") {\n    throw new KsefError(\"Export package is missing compressionType.\");\n  }\n  const normalized = value.trim();\n  if (normalized === \"Zip\" || normalized.toLowerCase() === \"zip\") {\n    return \"Zip\";\n  }\n  if (\n    normalized === \"TarGz\" ||\n    normalized.toLowerCase() === \"targz\" ||\n    normalized.toLowerCase() === \"tar.gz\"\n  ) {\n    return \"TarGz\";\n  }\n  throw new KsefError(\"Unsupported compression type. Use Zip or TarGz.\");\n}\n","import { KsefValidationError } from \"../errors/errors\";\nimport { InvoiceXmlInput } from \"../xml/invoice\";\nimport { parseUpoXml, UpoPotwierdzenie } from \"../xml/upo\";\nimport {\n  OnlineInvoiceSendOptions,\n  OnlineSessionOpenOptions,\n  OnlineSessionWorkflow,\n} from \"./onlineSessionWorkflow\";\nimport { WaitForUpoOptions } from \"./upo\";\n\nexport type OfflineInvoiceMode = \"offline24\" | \"offline\" | \"awaryjny\";\n\nexport interface OfflineProcedureInstructions {\n  mode: OfflineInvoiceMode;\n  responsibility: string;\n  sendDeadline: string;\n  legalBasis: string;\n  operationalSteps: string[];\n}\n\nexport interface OfflineInvoiceSendOptions extends OnlineSessionOpenOptions {\n  invoice: InvoiceXmlInput;\n  waitForUpo?: boolean;\n  waitForUpoOptions?: WaitForUpoOptions;\n}\n\nexport interface OfflineTechnicalCorrectionOptions extends OfflineInvoiceSendOptions {\n  hashOfCorrectedInvoice: string;\n}\n\nexport interface OfflineInvoiceSubmissionResult {\n  sessionReferenceNumber: string;\n  invoiceReferenceNumber: string;\n  upoXml: string | null;\n  upo: UpoPotwierdzenie | null;\n}\n\nconst OFFLINE_PROCEDURES: Record<OfflineInvoiceMode, OfflineProcedureInstructions> = {\n  offline24: {\n    mode: \"offline24\",\n    responsibility: \"klient\",\n    sendDeadline: \"do nastepnego dnia roboczego po dacie wystawienia\",\n    legalBasis: \"art. 106nda ustawy o VAT (projekt KSeF 2.0)\",\n    operationalSteps: [\n      \"Wystaw fakture zgodna z FA(3) i ustaw offlineMode=true przy wysylce.\",\n      \"Wygeneruj QR-I i QR-II dla wizualizacji przekazywanej nabywcy.\",\n      \"Monitoruj komunikaty o awarii KSeF; awaria przesuwa termin doslania.\",\n      \"Po odzyskaniu dostepnosci doslij fakture do KSeF w wymaganym terminie.\",\n    ],\n  },\n  offline: {\n    mode: \"offline\",\n    responsibility: \"system KSeF\",\n    sendDeadline: \"do nastepnego dnia roboczego po zakonczeniu niedostepnosci\",\n    legalBasis: \"art. 106nh ustawy o VAT (od 1 II 2026)\",\n    operationalSteps: [\n      \"Wystaw fakture w okresie ogloszonej niedostepnosci KSeF.\",\n      \"Wyslij dokument do KSeF z offlineMode=true po zakonczeniu niedostepnosci.\",\n      \"Jesli ogloszono awarie, licz termin od zakonczenia ostatniej awarii (max 7 dni roboczych).\",\n      \"Zachowaj UPO i numer KSeF jako dowod terminowego doslania.\",\n    ],\n  },\n  awaryjny: {\n    mode: \"awaryjny\",\n    responsibility: \"system KSeF\",\n    sendDeadline:\n      \"do 7 dni roboczych od zakonczenia awarii (z resetem licznika przy kolejnej awarii)\",\n    legalBasis: \"art. 106nf ustawy o VAT (od 1 II 2026)\",\n    operationalSteps: [\n      \"Wystaw fakture w trybie awaryjnym zgodnie z komunikatem MF/BIP.\",\n      \"Po zakonczeniu awarii przeslij fakture do KSeF z offlineMode=true.\",\n      \"Jesli pojawi sie kolejny komunikat o awarii, licznik 7 dni roboczych startuje od nowa.\",\n      \"W przypadku awarii calkowitej stosuj zasady wystawiania poza KSeF (bez obowiazku doslania).\",\n    ],\n  },\n};\n\nexport class OfflineInvoiceWorkflow {\n  private readonly onlineWorkflow: OnlineSessionWorkflow;\n\n  constructor(onlineWorkflow: OnlineSessionWorkflow) {\n    this.onlineWorkflow = onlineWorkflow;\n  }\n\n  async sendOfflineInvoice(\n    options: OfflineInvoiceSendOptions,\n  ): Promise<OfflineInvoiceSubmissionResult> {\n    return await this.sendOffline(options);\n  }\n\n  async sendOfflineTechnicalCorrection(\n    options: OfflineTechnicalCorrectionOptions,\n  ): Promise<OfflineInvoiceSubmissionResult> {\n    const hash = options.hashOfCorrectedInvoice.trim();\n    if (!hash) {\n      throw new KsefValidationError(\n        \"hashOfCorrectedInvoice is required for offline technical correction.\",\n      );\n    }\n    return await this.sendOffline(options, hash);\n  }\n\n  getProcedureInstructions(mode: OfflineInvoiceMode): OfflineProcedureInstructions {\n    const instructions = OFFLINE_PROCEDURES[mode];\n    return {\n      ...instructions,\n      operationalSteps: [...instructions.operationalSteps],\n    };\n  }\n\n  listProcedureInstructions(): OfflineProcedureInstructions[] {\n    return (Object.keys(OFFLINE_PROCEDURES) as OfflineInvoiceMode[]).map((mode) =>\n      this.getProcedureInstructions(mode),\n    );\n  }\n\n  private async sendOffline(\n    options: OfflineInvoiceSendOptions,\n    hashOfCorrectedInvoice?: string,\n  ): Promise<OfflineInvoiceSubmissionResult> {\n    const session = await this.onlineWorkflow.open({\n      formCode: options.formCode,\n      ...(options.publicCertificateBase64Der && {\n        publicCertificateBase64Der: options.publicCertificateBase64Der,\n      }),\n      ...(options.upoV43 !== undefined && { upoV43: options.upoV43 }),\n    });\n\n    let closed = false;\n    try {\n      const sendOptions: OnlineInvoiceSendOptions = {\n        invoice: options.invoice,\n        offlineMode: true,\n        ...(hashOfCorrectedInvoice && { hashOfCorrectedInvoice }),\n      };\n      const sendResponse = await session.sendInvoice(sendOptions);\n      await session.close();\n      closed = true;\n\n      let upoXml: string | null = null;\n      let upo: UpoPotwierdzenie | null = null;\n      if (options.waitForUpo !== false) {\n        upoXml = await session.waitForUpo(options.waitForUpoOptions);\n        upo = upoXml ? parseUpoXml(upoXml) : null;\n      }\n\n      return {\n        sessionReferenceNumber: session.referenceNumber,\n        invoiceReferenceNumber: sendResponse.referenceNumber,\n        upoXml,\n        upo,\n      };\n    } catch (error) {\n      if (!closed) {\n        await this.closeSilently(session);\n      }\n      throw error;\n    }\n  }\n\n  private async closeSilently(session: { close: () => Promise<void> }): Promise<void> {\n    try {\n      await session.close();\n    } catch {\n      // ignore close errors to preserve original exception\n    }\n  }\n}\n","import { SessionsClient } from \"../api/sessionsClient\";\nimport { SecurityClient } from \"../api/securityClient\";\nimport { HttpClient } from \"../client/httpClient\";\nimport { CryptographyService, EncryptionData } from \"../crypto/cryptographyService\";\nimport { KsefError, KsefValidationError } from \"../errors/errors\";\nimport { OnlineSessionFormCode, StatusInfo } from \"../types/common\";\nimport { SendInvoiceResponse, SessionStatusResponse } from \"../types/sessions\";\nimport { serializeInvoiceXml, InvoiceXmlInput } from \"../xml/invoice\";\nimport { parseUpoXml, UpoPotwierdzenie } from \"../xml/upo\";\nimport { WaitForUpoOptions } from \"./upo\";\n\nexport interface OnlineSessionOpenOptions {\n  formCode: OnlineSessionFormCode;\n  publicCertificateBase64Der?: string;\n  upoV43?: boolean;\n}\n\nexport interface OnlineInvoiceSendOptions {\n  invoice: InvoiceXmlInput;\n  offlineMode?: boolean;\n  hashOfCorrectedInvoice?: string;\n}\n\nexport interface OnlineSessionState {\n  referenceNumber: string;\n  encryptionData: EncryptionData;\n  upoV43?: boolean;\n}\n\nexport class OnlineSessionHandle {\n  readonly referenceNumber: string;\n  readonly encryptionData: EncryptionData;\n  readonly upoV43: boolean;\n  private readonly sessionsClient: SessionsClient;\n  private readonly http: HttpClient;\n\n  constructor(\n    referenceNumber: string,\n    encryptionData: EncryptionData,\n    sessionsClient: SessionsClient,\n    http: HttpClient,\n    upoV43 = false,\n  ) {\n    this.referenceNumber = referenceNumber;\n    this.encryptionData = encryptionData;\n    this.sessionsClient = sessionsClient;\n    this.http = http;\n    this.upoV43 = upoV43;\n  }\n\n  getState(): OnlineSessionState {\n    return {\n      referenceNumber: this.referenceNumber,\n      encryptionData: {\n        cipherKey: Buffer.from(this.encryptionData.cipherKey),\n        cipherIv: Buffer.from(this.encryptionData.cipherIv),\n        encryptionInfo: { ...this.encryptionData.encryptionInfo },\n      },\n      upoV43: this.upoV43,\n    };\n  }\n\n  async sendInvoice(options: OnlineInvoiceSendOptions): Promise<SendInvoiceResponse> {\n    const invoiceXml = serializeInvoiceXml(options.invoice);\n    const payload = CryptographyService.prepareInvoicePayload(\n      invoiceXml,\n      this.encryptionData.cipherKey,\n      this.encryptionData.cipherIv,\n    );\n    const request = {\n      ...payload,\n      ...(options.offlineMode !== undefined && {\n        offlineMode: options.offlineMode,\n      }),\n      ...(options.hashOfCorrectedInvoice && {\n        hashOfCorrectedInvoice: options.hashOfCorrectedInvoice,\n      }),\n    };\n    return await this.sessionsClient.sendOnlineInvoice(this.referenceNumber, request);\n  }\n\n  async close(): Promise<void> {\n    await this.sessionsClient.closeOnlineSession(this.referenceNumber);\n  }\n\n  async status(): Promise<SessionStatusResponse> {\n    return await this.sessionsClient.getSessionStatus(this.referenceNumber);\n  }\n\n  async getInvoiceStatus(invoiceReferenceNumber: string): Promise<Record<string, unknown>> {\n    return await this.sessionsClient.getSessionInvoiceStatus(\n      this.referenceNumber,\n      invoiceReferenceNumber,\n    );\n  }\n\n  async listInvoices(\n    pageOffset?: number,\n    pageSize?: number,\n    continuationToken?: string,\n  ): Promise<Record<string, unknown>> {\n    return await this.sessionsClient.getSessionInvoices(\n      this.referenceNumber,\n      pageOffset,\n      pageSize,\n      continuationToken,\n    );\n  }\n\n  async listFailedInvoices(\n    pageSize?: number,\n    continuationToken?: string,\n  ): Promise<Record<string, unknown>> {\n    return await this.sessionsClient.getSessionFailedInvoices(\n      this.referenceNumber,\n      pageSize,\n      continuationToken,\n    );\n  }\n\n  async getInvoiceUpoByReference(invoiceReferenceNumber: string): Promise<string> {\n    return await this.sessionsClient.getSessionInvoiceUpoByReferenceNumber(\n      this.referenceNumber,\n      invoiceReferenceNumber,\n    );\n  }\n\n  async getInvoiceUpoByKsefNumber(ksefNumber: string): Promise<string> {\n    return await this.sessionsClient.getSessionInvoiceUpoByKsefNumber(\n      this.referenceNumber,\n      ksefNumber,\n    );\n  }\n\n  async getSessionUpo(upoReferenceNumber: string): Promise<string> {\n    return await this.sessionsClient.getSessionUpo(this.referenceNumber, upoReferenceNumber);\n  }\n\n  async waitForUpo(options: WaitForUpoOptions = {}): Promise<string | null> {\n    const pollIntervalMs = options.pollIntervalMs ?? 2000;\n    const maxAttempts = options.maxAttempts ?? 60;\n    for (let attempt = 0; attempt < maxAttempts; attempt += 1) {\n      const status = await this.status();\n      const statusInfo = status.status ?? ({} as StatusInfo);\n      const page = status.upo?.pages?.[0];\n      if (statusInfo.code === 200 && page) {\n        return await this.http.request<string>({\n          method: \"GET\",\n          path: page.downloadUrl,\n          responseType: \"text\",\n        });\n      }\n      if (statusInfo.code !== 100 && statusInfo.code !== 200) {\n        const details = statusInfo.details?.length\n          ? ` Details: ${statusInfo.details.join(\", \")}`\n          : \"\";\n        throw new KsefError(\n          `Session failed: ${statusInfo.code} ${statusInfo.description}${details}`,\n        );\n      }\n      await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));\n    }\n    return null;\n  }\n\n  async waitForUpoParsed(options: WaitForUpoOptions = {}): Promise<UpoPotwierdzenie | null> {\n    const xml = await this.waitForUpo(options);\n    if (!xml) {\n      return null;\n    }\n    return parseUpoXml(xml);\n  }\n}\n\nexport class OnlineSessionWorkflow {\n  private readonly sessionsClient: SessionsClient;\n  private readonly securityClient: SecurityClient;\n  private readonly http: HttpClient;\n\n  constructor(sessionsClient: SessionsClient, securityClient: SecurityClient, http: HttpClient) {\n    this.sessionsClient = sessionsClient;\n    this.securityClient = securityClient;\n    this.http = http;\n  }\n\n  async open(options: OnlineSessionOpenOptions): Promise<OnlineSessionHandle> {\n    if (!options.formCode) {\n      throw new KsefValidationError(\"formCode is required.\");\n    }\n    const certificate =\n      options.publicCertificateBase64Der ??\n      (await this.getCertificateByUsage(\"SymmetricKeyEncryption\"));\n    const encryption = CryptographyService.getEncryptionData(certificate);\n    const response = await this.sessionsClient.openOnlineSession(\n      {\n        formCode: options.formCode,\n        encryption: encryption.encryptionInfo,\n      },\n      options.upoV43,\n    );\n    return new OnlineSessionHandle(\n      response.referenceNumber,\n      encryption,\n      this.sessionsClient,\n      this.http,\n      Boolean(options.upoV43),\n    );\n  }\n\n  resume(state: OnlineSessionState): OnlineSessionHandle {\n    if (!state || typeof state.referenceNumber !== \"string\" || !state.referenceNumber.trim()) {\n      throw new KsefValidationError(\"Online session state requires non-empty referenceNumber.\");\n    }\n    validateEncryptionData(state.encryptionData);\n    return new OnlineSessionHandle(\n      state.referenceNumber,\n      state.encryptionData,\n      this.sessionsClient,\n      this.http,\n      Boolean(state.upoV43),\n    );\n  }\n\n  private async getCertificateByUsage(\n    usage: \"KsefTokenEncryption\" | \"SymmetricKeyEncryption\",\n  ): Promise<string> {\n    const certificates = await this.securityClient.getPublicKeyCertificates();\n    const cert = certificates.find((item) => item.usage.includes(usage));\n    if (!cert) {\n      throw new KsefError(`No public certificate found for usage ${usage}.`);\n    }\n    return cert.certificate;\n  }\n}\n\nfunction validateEncryptionData(value: EncryptionData): void {\n  const hasKey = Buffer.isBuffer(value?.cipherKey) && value.cipherKey.length > 0;\n  const hasIv = Buffer.isBuffer(value?.cipherIv) && value.cipherIv.length > 0;\n  if (!hasKey || !hasIv) {\n    throw new KsefValidationError(\"Online session state requires cipherKey and cipherIv.\");\n  }\n}\n","import { fromBase64Url } from \"../utils/base64url\";\n\nexport interface PersonToken {\n  issuer: string | null;\n  audiences: string[];\n  issuedAt: Date | null;\n  expiresAt: Date | null;\n  roles: string[];\n  tokenType: string | null;\n  contextIdType: string | null;\n  contextIdValue: string | null;\n  authMethod: string | null;\n  authRequestNumber: string | null;\n  subjectDetails: Record<string, unknown> | null;\n  permissions: string[];\n  permissionsExcluded: string[];\n  rolesRaw: string[];\n  permissionsEffective: string[];\n  ipPolicy: Record<string, unknown> | null;\n}\n\nexport class PersonTokenService {\n  parse(jwtToken: string): PersonToken {\n    const [, payload] = splitJwt(jwtToken);\n    const claims = JSON.parse(payload) as Record<string, unknown>;\n\n    const get = (name: string): string | null => {\n      for (const [key, value] of Object.entries(claims)) {\n        if (key.toLowerCase() === name.toLowerCase()) {\n          return value ? String(value) : null;\n        }\n      }\n      return null;\n    };\n\n    const getMany = (...names: string[]): string[] => {\n      const values: string[] = [];\n      for (const [key, value] of Object.entries(claims)) {\n        if (names.some((name) => key.toLowerCase() === name.toLowerCase())) {\n          if (Array.isArray(value)) {\n            values.push(...value.map(String));\n          } else if (value !== null && value !== undefined) {\n            values.push(String(value));\n          }\n        }\n      }\n      return distinct(values);\n    };\n\n    const exp = unixToDate(claims.exp);\n    const iat = unixToDate(claims.iat);\n\n    const subjectDetails = tryParseJson(get(\"sud\"));\n    const ipPolicy = tryParseJson(get(\"ipp\"));\n\n    const permissions = parseJsonStringArray(get(\"per\"));\n    const permissionsExcluded = parseJsonStringArray(get(\"pec\"));\n    const rolesRaw = parseJsonStringArray(get(\"rol\"));\n    const permissionsEffective = parseJsonStringArray(get(\"pep\"));\n\n    const classicRoles = getMany(\n      \"role\",\n      \"roles\",\n      \"permissions\",\n      \"http://schemas.microsoft.com/ws/2008/06/identity/claims/role\",\n    );\n    const unifiedRoles = distinct([...classicRoles, ...permissions, ...rolesRaw]);\n\n    return {\n      issuer: (claims.iss as string | undefined) ?? null,\n      audiences: ensureList(claims.aud),\n      issuedAt: iat,\n      expiresAt: exp,\n      roles: unifiedRoles,\n      tokenType: get(\"typ\"),\n      contextIdType: get(\"cit\"),\n      contextIdValue: get(\"civ\"),\n      authMethod: get(\"aum\"),\n      authRequestNumber: get(\"arn\"),\n      subjectDetails,\n      permissions,\n      permissionsExcluded,\n      rolesRaw,\n      permissionsEffective,\n      ipPolicy,\n    };\n  }\n}\n\nfunction splitJwt(token: string): [string, string, string] {\n  const parts = token.split(\".\");\n  if (parts.length !== 3) {\n    throw new Error(\"Invalid JWT format.\");\n  }\n  const headerPart = parts[0];\n  const payloadPart = parts[1];\n  const signaturePart = parts[2];\n  if (!headerPart || !payloadPart || !signaturePart) {\n    throw new Error(\"Invalid JWT format.\");\n  }\n  const header = fromBase64Url(headerPart).toString(\"utf8\");\n  const payload = fromBase64Url(payloadPart).toString(\"utf8\");\n  return [header, payload, signaturePart];\n}\n\nfunction unixToDate(value: unknown): Date | null {\n  if (typeof value === \"number\") {\n    return new Date(value * 1000);\n  }\n  if (typeof value === \"string\" && value.trim() !== \"\" && !Number.isNaN(Number(value))) {\n    return new Date(Number(value) * 1000);\n  }\n  return null;\n}\n\nfunction tryParseJson(value: string | null): Record<string, unknown> | null {\n  if (!value) {\n    return null;\n  }\n  try {\n    return JSON.parse(unwrapQuotedJson(value)) as Record<string, unknown>;\n  } catch {\n    return null;\n  }\n}\n\nfunction parseJsonStringArray(value: string | null): string[] {\n  if (!value) {\n    return [];\n  }\n  try {\n    const parsed = JSON.parse(unwrapQuotedJson(value));\n    if (Array.isArray(parsed)) {\n      return distinct(parsed.map(String).filter((item) => item.trim() !== \"\"));\n    }\n  } catch {\n    // ignore\n  }\n  if (value.includes(\",\")) {\n    return distinct(\n      value\n        .split(\",\")\n        .map((item) => item.trim().replace(/^\"|\"$/g, \"\"))\n        .filter((item) => item !== \"\"),\n    );\n  }\n  return [value.replace(/^\"|\"$/g, \"\")];\n}\n\nfunction unwrapQuotedJson(value: string): string {\n  if (value.length > 1 && value.startsWith('\"') && value.endsWith('\"')) {\n    try {\n      return JSON.parse(value) as string;\n    } catch {\n      return value;\n    }\n  }\n  return value;\n}\n\nfunction distinct(values: string[]): string[] {\n  const seen = new Set<string>();\n  const result: string[] = [];\n  for (const value of values) {\n    const key = value.toLowerCase();\n    if (seen.has(key)) {\n      continue;\n    }\n    seen.add(key);\n    result.push(value);\n  }\n  return result;\n}\n\nfunction ensureList(value: unknown): string[] {\n  if (Array.isArray(value)) {\n    return value.map(String);\n  }\n  if (value === null || value === undefined) {\n    return [];\n  }\n  return [String(value)];\n}\n","export interface QrCodeRenderOptions {\n  errorCorrectionLevel?: \"L\" | \"M\" | \"Q\" | \"H\";\n  margin?: number;\n  width?: number;\n}\n\ntype QrCodeModule = typeof import(\"qrcode\");\n\nasync function loadQrCode(): Promise<QrCodeModule> {\n  try {\n    return (await import(\"qrcode\")) as QrCodeModule;\n  } catch (error) {\n    const message = error instanceof Error ? error.message : \"Unknown import error\";\n    throw new Error(\n      `Optional dependency \"qrcode\" is required for QrCodeService. Install it with: npm i qrcode. (${message})`,\n    );\n  }\n}\n\nexport class QrCodeService {\n  async toPngBuffer(value: string, options: QrCodeRenderOptions = {}): Promise<Buffer> {\n    const qrcode = await loadQrCode();\n    const buffer = await qrcode.toBuffer(value, {\n      type: \"png\",\n      errorCorrectionLevel: options.errorCorrectionLevel,\n      margin: options.margin,\n      width: options.width,\n    });\n    return Buffer.isBuffer(buffer) ? buffer : Buffer.from(buffer);\n  }\n\n  async toSvgString(value: string, options: QrCodeRenderOptions = {}): Promise<string> {\n    const qrcode = await loadQrCode();\n    return await qrcode.toString(value, {\n      type: \"svg\",\n      errorCorrectionLevel: options.errorCorrectionLevel,\n      margin: options.margin,\n      width: options.width,\n    });\n  }\n\n  async toDataUrl(value: string, options: QrCodeRenderOptions = {}): Promise<string> {\n    const qrcode = await loadQrCode();\n    return await qrcode.toDataURL(value, {\n      errorCorrectionLevel: options.errorCorrectionLevel,\n      margin: options.margin,\n      width: options.width,\n    });\n  }\n}\n","import crypto from \"node:crypto\";\nimport { toBase64Url, fromBase64Url } from \"../utils/base64url\";\n\nexport interface VerificationLinkServiceOptions {\n  baseQrUrl: string;\n}\n\nexport class VerificationLinkService {\n  private readonly baseQrUrl: string;\n\n  constructor(options: VerificationLinkServiceOptions) {\n    this.baseQrUrl = options.baseQrUrl.replace(/\\/$/, \"\");\n  }\n\n  buildInvoiceVerificationUrl(nip: string, issueDate: Date | string, invoiceHash: string): string {\n    const dateString = formatDate(issueDate);\n    const hashBytes = decodeBase64OrUrl(invoiceHash);\n    const hashUrl = toBase64Url(hashBytes);\n    return `${this.baseQrUrl}/invoice/${nip}/${dateString}/${hashUrl}`;\n  }\n\n  buildCertificateVerificationUrl(options: {\n    sellerNip: string;\n    contextIdentifierType: string;\n    contextIdentifierValue: string;\n    certificateSerial: string;\n    invoiceHash: string;\n    privateKeyPem: string;\n    privateKeyPassword?: string;\n    signatureFormat?: \"p1363\" | \"der\";\n  }): string {\n    const hashBytes = decodeBase64OrUrl(options.invoiceHash);\n    const hashUrl = toBase64Url(hashBytes);\n    const path = [\n      this.baseQrUrl,\n      \"certificate\",\n      options.contextIdentifierType,\n      options.contextIdentifierValue,\n      options.sellerNip,\n      options.certificateSerial,\n      hashUrl,\n    ].join(\"/\");\n    const pathToSign = path.replace(/^https?:\\/\\//, \"\");\n    const signature = signPath(\n      pathToSign,\n      options.privateKeyPem,\n      options.privateKeyPassword,\n      options.signatureFormat ?? \"p1363\",\n    );\n    const signatureUrl = toBase64Url(signature);\n    return `${path}/${signatureUrl}`;\n  }\n}\n\nfunction formatDate(value: Date | string): string {\n  if (value instanceof Date) {\n    const day = `${value.getDate()}`.padStart(2, \"0\");\n    const month = `${value.getMonth() + 1}`.padStart(2, \"0\");\n    const year = `${value.getFullYear()}`;\n    return `${day}-${month}-${year}`;\n  }\n  return value;\n}\n\nfunction decodeBase64OrUrl(value: string): Buffer {\n  if (value.includes(\"-\") || value.includes(\"_\")) {\n    return fromBase64Url(value);\n  }\n  return Buffer.from(value, \"base64\");\n}\n\nfunction signPath(\n  pathToSign: string,\n  privateKeyPem: string,\n  privateKeyPassword: string | undefined,\n  signatureFormat: \"p1363\" | \"der\",\n): Buffer {\n  const data = Buffer.from(pathToSign, \"utf8\");\n  const privateKey = loadPrivateKey(privateKeyPem, privateKeyPassword);\n  if (privateKey.asymmetricKeyType === \"rsa\") {\n    return crypto.sign(\"sha256\", data, {\n      key: privateKey,\n      padding: crypto.constants.RSA_PKCS1_PSS_PADDING,\n      saltLength: 32,\n    });\n  }\n  if (privateKey.asymmetricKeyType === \"ec\") {\n    return crypto.sign(\"sha256\", data, {\n      key: privateKey,\n      dsaEncoding: signatureFormat === \"der\" ? \"der\" : \"ieee-p1363\",\n    });\n  }\n  throw new Error(\"Unsupported private key type for signature.\");\n}\n\nfunction loadPrivateKey(privateKeyPem: string, privateKeyPassword?: string): crypto.KeyObject {\n  try {\n    return crypto.createPrivateKey({\n      key: privateKeyPem,\n      format: \"pem\",\n      passphrase: privateKeyPassword,\n    });\n  } catch (error) {\n    throw mapPrivateKeyLoadError(error);\n  }\n}\n\nfunction mapPrivateKeyLoadError(error: unknown): Error {\n  const message = error instanceof Error ? error.message : \"\";\n  const opensslErrorStack = Array.isArray((error as { opensslErrorStack?: unknown })?.opensslErrorStack)\n    ? ((error as { opensslErrorStack?: unknown[] }).opensslErrorStack ?? [])\n        .filter((entry): entry is string => typeof entry === \"string\")\n    : [];\n  const details = [message, ...opensslErrorStack].join(\"\\n\");\n\n  if (\n    details.includes(\"bad password read\")\n    || details.includes(\"unable to get passphrase\")\n  ) {\n    return new Error(\"Private key is encrypted; provide privateKeyPassword.\");\n  }\n  if (\n    details.includes(\"bad decrypt\")\n    || details.includes(\"cipherfinal error\")\n  ) {\n    return new Error(\"Failed to decrypt private key; check privateKeyPassword.\");\n  }\n  return new Error(\"Failed to load private key from PEM.\");\n}\n","import { isIP } from \"node:net\";\nimport { KsefValidationError } from \"../errors/errors\";\n\nexport interface PresignedUrlPolicyOptions {\n  strictPresignedUrlValidation: boolean;\n  allowedPresignedHosts?: string[];\n  allowPrivateNetworkPresignedUrls: boolean;\n}\n\nexport function validatePresignedUrlSecurity(\n  options: PresignedUrlPolicyOptions,\n  urlText: string,\n): void {\n  const parsed = parseUrl(urlText);\n  const host = normalizeHost(parsed.hostname);\n  if (!host) {\n    throw new KsefValidationError(\"Rejected insecure presigned URL: host is missing.\");\n  }\n\n  if (host === \"localhost\" || host.endsWith(\".localhost\")) {\n    throw new KsefValidationError(\n      \"Rejected insecure presigned URL: localhost hosts are not allowed for skipAuth requests.\",\n    );\n  }\n\n  if (options.strictPresignedUrlValidation && parsed.protocol !== \"https:\") {\n    throw new KsefValidationError(\n      \"Rejected insecure presigned URL: https is required for skipAuth requests.\",\n    );\n  }\n\n  const ipVersion = isIP(host);\n  if (ipVersion === 4) {\n    if (isLoopbackIpv4(host)) {\n      throw new KsefValidationError(\n        \"Rejected insecure presigned URL: loopback addresses are not allowed for skipAuth requests.\",\n      );\n    }\n    if (\n      !options.allowPrivateNetworkPresignedUrls &&\n      (isPrivateIpv4(host) || isLinkLocalIpv4(host) || isReservedIpv4(host))\n    ) {\n      throw new KsefValidationError(\n        \"Rejected insecure presigned URL: private, link-local, and reserved IP hosts are blocked for skipAuth requests.\",\n      );\n    }\n  } else if (ipVersion === 6) {\n    if (isLoopbackIpv6(host)) {\n      throw new KsefValidationError(\n        \"Rejected insecure presigned URL: loopback addresses are not allowed for skipAuth requests.\",\n      );\n    }\n    if (\n      !options.allowPrivateNetworkPresignedUrls &&\n      (isPrivateIpv6(host) || isLinkLocalIpv6(host) || isReservedIpv6(host))\n    ) {\n      throw new KsefValidationError(\n        \"Rejected insecure presigned URL: private, link-local, and reserved IP hosts are blocked for skipAuth requests.\",\n      );\n    }\n  }\n\n  const allowlist = (options.allowedPresignedHosts ?? [])\n    .map((entry) => normalizeHost(entry))\n    .filter((entry) => entry.length > 0);\n  if (allowlist.length > 0 && !isHostAllowed(host, allowlist)) {\n    throw new KsefValidationError(\n      \"Rejected insecure presigned URL: host is not in allowedPresignedHosts for skipAuth requests.\",\n    );\n  }\n}\n\nfunction parseUrl(urlText: string): URL {\n  try {\n    return new URL(urlText);\n  } catch {\n    throw new KsefValidationError(`Rejected insecure presigned URL: invalid URL '${urlText}'.`);\n  }\n}\n\nfunction normalizeHost(value: string): string {\n  const normalized = value.toLowerCase().replace(/\\.+$/, \"\");\n  if (normalized.startsWith(\"[\") && normalized.endsWith(\"]\")) {\n    return normalized.slice(1, -1);\n  }\n  return normalized;\n}\n\nfunction isHostAllowed(host: string, allowedHosts: string[]): boolean {\n  for (const allowedHost of allowedHosts) {\n    if (host === allowedHost) {\n      return true;\n    }\n    if (isIP(allowedHost) === 0 && host.endsWith(`.${allowedHost}`)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction parseIpv4Octets(address: string): number[] {\n  const octets = address.split(\".\").map((segment) => Number(segment));\n  return octets.length === 4 ? octets : [];\n}\n\nfunction isLoopbackIpv4(address: string): boolean {\n  const [a] = parseIpv4Octets(address);\n  return a === 127;\n}\n\nfunction isPrivateIpv4(address: string): boolean {\n  const [a, b] = parseIpv4Octets(address);\n  return (\n    a === 10 ||\n    (a === 172 && b !== undefined && b >= 16 && b <= 31) ||\n    (a === 192 && b === 168)\n  );\n}\n\nfunction isLinkLocalIpv4(address: string): boolean {\n  const [a, b] = parseIpv4Octets(address);\n  return a === 169 && b === 254;\n}\n\nfunction isReservedIpv4(address: string): boolean {\n  const [a, b, c] = parseIpv4Octets(address);\n  if (a === undefined || b === undefined || c === undefined) {\n    return false;\n  }\n  if (a === 0 || a >= 224) {\n    return true;\n  }\n  if (a === 100 && b >= 64 && b <= 127) {\n    return true;\n  }\n  if (a === 192 && b === 0 && c === 0) {\n    return true;\n  }\n  if (a === 192 && b === 0 && c === 2) {\n    return true;\n  }\n  if (a === 198 && (b === 18 || b === 19)) {\n    return true;\n  }\n  if (a === 198 && b === 51 && c === 100) {\n    return true;\n  }\n  if (a === 203 && b === 0 && c === 113) {\n    return true;\n  }\n  return false;\n}\n\nfunction isLoopbackIpv6(address: string): boolean {\n  return address === \"::1\";\n}\n\nfunction isPrivateIpv6(address: string): boolean {\n  return address.startsWith(\"fc\") || address.startsWith(\"fd\");\n}\n\nfunction isLinkLocalIpv6(address: string): boolean {\n  return /^fe[89ab]/.test(address);\n}\n\nfunction isReservedIpv6(address: string): boolean {\n  return (\n    address === \"::\" ||\n    address.startsWith(\"ff\") ||\n    address.startsWith(\"2001:db8\")\n  );\n}\n","import { fetch, ProxyAgent, Headers } from \"undici\";\nimport type { BodyInit, Dispatcher, RequestInit, Response } from \"undici\";\nimport { HttpMethod, JsonObject } from \"../types/common\";\nimport { validatePresignedUrlSecurity } from \"./presignedUrlPolicy\";\nimport {\n  type KsefApiProblem,\n  KsefApiError,\n  KsefAuthStatusError,\n  KsefHttpError,\n  KsefRateLimitError,\n  KsefValidationError,\n  type UnknownApiProblem,\n} from \"../errors/errors\";\nimport type {\n  ApiError,\n  BadRequestProblemDetails,\n  ExceptionResponse,\n  ForbiddenProblemDetails,\n  GoneProblemDetails,\n  TooManyRequestsProblemDetails,\n  TooManyRequestsResponse,\n  UnauthorizedProblemDetails,\n} from \"../types/openapi.generated\";\n\nexport interface HttpClientOptions {\n  baseUrl: string;\n  appendV2?: boolean;\n  timeoutMs?: number;\n  defaultHeaders?: Record<string, string>;\n  proxy?: string;\n  noProxy?: string;\n  retryOn429?: boolean;\n  retryOn5xx?: boolean;\n  retryOnTimeout?: boolean;\n  maxRetryAttempts?: number;\n  maxRetryDelayMs?: number;\n  strictPresignedUrlValidation?: boolean;\n  allowedPresignedHosts?: string[];\n  allowPrivateNetworkPresignedUrls?: boolean;\n  systemWarningHandler?: (warning: string) => void;\n}\n\nexport interface RetryOptions {\n  retryOn429?: boolean;\n  retryOn5xx?: boolean;\n  retryOnTimeout?: boolean;\n  maxAttempts?: number;\n}\n\nexport interface HttpRequestOptions {\n  method: HttpMethod;\n  path: string;\n  query?: Record<\n    string,\n    string | number | boolean | Array<string | number | boolean> | undefined | null\n  >;\n  headers?: Record<string, string>;\n  body?: JsonObject | Record<string, unknown> | object | string | Buffer | Uint8Array;\n  responseType?: \"json\" | \"text\" | \"buffer\";\n  authToken?: string;\n  skipAuth?: boolean;\n  retry?: RetryOptions;\n}\n\nfunction normalizeBaseUrl(baseUrl: string, appendV2: boolean): string {\n  if (baseUrl.endsWith(\"/\")) {\n    baseUrl = baseUrl.slice(0, -1);\n  }\n  if (!appendV2) {\n    return baseUrl;\n  }\n  return baseUrl.endsWith(\"/v2\") ? baseUrl : `${baseUrl}/v2`;\n}\n\nfunction shouldBypassProxy(hostname: string, noProxy?: string): boolean {\n  if (!noProxy) {\n    return false;\n  }\n  const list = noProxy\n    .split(\",\")\n    .map((item) => item.trim())\n    .filter(Boolean);\n  if (list.includes(\"*\")) {\n    return true;\n  }\n  return list.some((entry) => hostname === entry || hostname.endsWith(`.${entry}`));\n}\n\nfunction isJsonContentType(contentType: string): boolean {\n  const mediaType = contentType.split(\";\", 1)[0]!.trim().toLowerCase();\n  return mediaType === \"application/json\" || mediaType.endsWith(\"+json\");\n}\n\nfunction parseRetryAfterMs(retryAfter: string | undefined): number | undefined {\n  if (!retryAfter) {\n    return undefined;\n  }\n\n  const trimmed = retryAfter.trim();\n  if (!trimmed) {\n    return undefined;\n  }\n\n  const seconds = Number(trimmed);\n  if (!Number.isNaN(seconds)) {\n    return Math.max(0, Math.round(seconds * 1000));\n  }\n\n  const dateMs = Date.parse(trimmed);\n  if (!Number.isNaN(dateMs)) {\n    return Math.max(0, dateMs - Date.now());\n  }\n\n  return undefined;\n}\n\nfunction parseRetryAfterSeconds(retryAfter: string | undefined): number | undefined {\n  const delayMs = parseRetryAfterMs(retryAfter);\n  if (delayMs === undefined) {\n    return undefined;\n  }\n  return Math.ceil(delayMs / 1000);\n}\n\nfunction coerceProblemStatus(status: unknown, fallbackStatus: number): number {\n  const coerced = Number(status);\n  return Number.isFinite(coerced) ? coerced : fallbackStatus;\n}\n\nfunction isString(value: unknown): value is string {\n  return typeof value === \"string\";\n}\n\nfunction isNumber(value: unknown): value is number {\n  return typeof value === \"number\" && Number.isFinite(value);\n}\n\nfunction isNullableString(value: unknown): value is string | null {\n  return value === null || isString(value);\n}\n\nfunction isOptionalNullableString(value: unknown): value is string | null | undefined {\n  return value === undefined || isNullableString(value);\n}\n\nfunction isStringArray(value: unknown): value is string[] {\n  return Array.isArray(value) && value.every(isString);\n}\n\nfunction isOptionalStringArrayOrNull(value: unknown): value is string[] | null | undefined {\n  return value === undefined || value === null || isStringArray(value);\n}\n\nfunction isApiErrorPayload(value: unknown): value is ApiError {\n  if (!isPlainObject(value)) {\n    return false;\n  }\n\n  return (\n    isNumber(value.code) &&\n    isString(value.description) &&\n    isOptionalStringArrayOrNull(value.details)\n  );\n}\n\nfunction isApiErrorArray(value: unknown): value is ApiError[] {\n  return Array.isArray(value) && value.every(isApiErrorPayload);\n}\n\nfunction hasRequiredProblemDetailsFields(payload: Record<string, unknown>): payload is Record<\n  string,\n  unknown\n> & {\n  detail: string;\n  status: number;\n  timestamp: string;\n  title: string;\n} {\n  return (\n    isString(payload.title) &&\n    isNumber(payload.status) &&\n    isString(payload.detail) &&\n    isString(payload.timestamp)\n  );\n}\n\nfunction isProblemDetailsPayload(\n  payload: Record<string, unknown>,\n): payload is Record<string, unknown> & { detail: string; title: string } {\n  return isString(payload.title) && isString(payload.detail);\n}\n\nfunction isBadRequestProblemDetailsPayload(\n  payload: Record<string, unknown>,\n): payload is BadRequestProblemDetails {\n  return (\n    hasRequiredProblemDetailsFields(payload) &&\n    isString(payload.instance) &&\n    isString(payload.traceId) &&\n    isApiErrorArray(payload.errors)\n  );\n}\n\nfunction isUnauthorizedProblemDetailsPayload(\n  payload: Record<string, unknown>,\n): payload is UnauthorizedProblemDetails {\n  return (\n    hasRequiredProblemDetailsFields(payload) &&\n    isOptionalNullableString(payload.instance) &&\n    isOptionalNullableString(payload.traceId)\n  );\n}\n\nfunction isForbiddenProblemDetailsPayload(\n  payload: Record<string, unknown>,\n): payload is ForbiddenProblemDetails {\n  return (\n    hasRequiredProblemDetailsFields(payload) &&\n    isString(payload.reasonCode) &&\n    isOptionalNullableString(payload.instance) &&\n    isOptionalNullableString(payload.traceId) &&\n    (payload.security === undefined || payload.security === null || isPlainObject(payload.security))\n  );\n}\n\nfunction isGoneProblemDetailsPayload(\n  payload: Record<string, unknown>,\n): payload is GoneProblemDetails {\n  return (\n    hasRequiredProblemDetailsFields(payload) &&\n    isString(payload.instance) &&\n    isString(payload.traceId)\n  );\n}\n\nfunction isTooManyRequestsProblemDetailsPayload(\n  payload: Record<string, unknown>,\n): payload is TooManyRequestsProblemDetails {\n  return (\n    hasRequiredProblemDetailsFields(payload) &&\n    isString(payload.instance) &&\n    isString(payload.traceId)\n  );\n}\n\nfunction createUnknownApiProblem(\n  statusCode: number,\n  payload: Record<string, unknown>,\n): UnknownApiProblem {\n  const detail = typeof payload.detail === \"string\" ? payload.detail : undefined;\n  return {\n    raw: payload,\n    status: coerceProblemStatus(payload.status, statusCode),\n    title: typeof payload.title === \"string\" ? payload.title : \"API error\",\n    ...(detail !== undefined ? { detail } : {}),\n  };\n}\n\nfunction parseApiProblem(statusCode: number, payload: unknown): KsefApiProblem | undefined {\n  if (!isPlainObject(payload)) {\n    return undefined;\n  }\n\n  if (\"exception\" in payload) {\n    return payload as ExceptionResponse;\n  }\n\n  if (statusCode === 429 && isPlainObject(payload.status)) {\n    return payload as TooManyRequestsResponse;\n  }\n\n  if (isProblemDetailsPayload(payload)) {\n    if (statusCode === 400 && isBadRequestProblemDetailsPayload(payload)) {\n      return payload;\n    }\n    if (statusCode === 401 && isUnauthorizedProblemDetailsPayload(payload)) {\n      return payload;\n    }\n    if (statusCode === 403 && isForbiddenProblemDetailsPayload(payload)) {\n      return payload;\n    }\n    if (statusCode === 410 && isGoneProblemDetailsPayload(payload)) {\n      return payload;\n    }\n    if (statusCode === 429 && isTooManyRequestsProblemDetailsPayload(payload)) {\n      return payload;\n    }\n    return createUnknownApiProblem(statusCode, payload);\n  }\n\n  return Object.keys(payload).length > 0 ? createUnknownApiProblem(statusCode, payload) : undefined;\n}\n\nexport class HttpClient {\n  private readonly baseUrl: string;\n  private readonly timeoutMs: number;\n  private readonly defaultHeaders: Record<string, string>;\n  private readonly proxy: string | undefined;\n  private readonly noProxy: string | undefined;\n  private readonly retryOn429: boolean;\n  private readonly retryOn5xx: boolean;\n  private readonly retryOnTimeout: boolean;\n  private readonly maxRetryAttempts: number;\n  private readonly maxRetryDelayMs: number;\n  private readonly strictPresignedUrlValidation: boolean;\n  private readonly allowedPresignedHosts: string[] | undefined;\n  private readonly allowPrivateNetworkPresignedUrls: boolean;\n  private readonly systemWarningHandler: ((warning: string) => void) | undefined;\n\n  constructor(options: HttpClientOptions) {\n    this.baseUrl = normalizeBaseUrl(options.baseUrl, options.appendV2 ?? true);\n    this.timeoutMs = options.timeoutMs ?? 30_000;\n    this.defaultHeaders = options.defaultHeaders ?? {};\n    this.proxy = options.proxy ?? process.env.HTTPS_PROXY ?? process.env.HTTP_PROXY;\n    this.noProxy = options.noProxy ?? process.env.NO_PROXY;\n    this.retryOn429 = options.retryOn429 ?? true;\n    this.retryOn5xx = options.retryOn5xx ?? true;\n    this.retryOnTimeout = options.retryOnTimeout ?? true;\n    this.maxRetryAttempts = options.maxRetryAttempts ?? 3;\n    this.maxRetryDelayMs = options.maxRetryDelayMs ?? 10_000;\n    this.strictPresignedUrlValidation = options.strictPresignedUrlValidation ?? true;\n    this.allowedPresignedHosts = options.allowedPresignedHosts;\n    this.allowPrivateNetworkPresignedUrls = options.allowPrivateNetworkPresignedUrls ?? false;\n    this.systemWarningHandler = options.systemWarningHandler;\n  }\n\n  async request<T>(options: HttpRequestOptions): Promise<T> {\n    const url = this.buildUrl(options.path, options.query);\n    this.validateSkipAuthOptions(options, url);\n\n    const headers = new Headers(this.defaultHeaders);\n    if (options.authToken) {\n      headers.set(\"Authorization\", `Bearer ${options.authToken}`);\n    }\n    if (options.headers) {\n      for (const [key, value] of Object.entries(options.headers)) {\n        headers.set(key, value);\n      }\n    }\n\n    let body: BodyInit | undefined;\n    if (options.body !== undefined) {\n      if (typeof options.body === \"string\" || Buffer.isBuffer(options.body)) {\n        body = options.body;\n      } else if (options.body instanceof Uint8Array) {\n        body = Buffer.from(options.body);\n      } else {\n        body = JSON.stringify(options.body);\n        if (!headers.has(\"Content-Type\")) {\n          headers.set(\"Content-Type\", \"application/json\");\n        }\n      }\n    }\n\n    const dispatcher = this.getDispatcher(url);\n\n    const retryPolicy = this.resolveRetryPolicy(options.retry);\n    const maxAttempts = Math.max(1, options.retry?.maxAttempts ?? this.maxRetryAttempts);\n    const canRetryMethod = isIdempotentMethod(options.method);\n\n    let lastError: unknown = null;\n    for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n      const controller = new AbortController();\n      const timeout = setTimeout(() => controller.abort(), this.timeoutMs);\n      try {\n        const init: RequestInit = {\n          method: options.method,\n          headers,\n          signal: controller.signal,\n        };\n        if (dispatcher) {\n          init.dispatcher = dispatcher as Dispatcher;\n        }\n        if (body !== undefined) {\n          init.body = body;\n        }\n        const response = await fetch(url, init);\n        if (\n          shouldRetryResponse(response.status, retryPolicy) &&\n          canRetryMethod &&\n          attempt < maxAttempts\n        ) {\n          await response.arrayBuffer().catch(() => undefined);\n          const retryAfter = response.headers.get(\"retry-after\") ?? undefined;\n          const delayMs = computeRetryDelayMs(retryAfter, attempt, this.maxRetryDelayMs);\n          clearTimeout(timeout);\n          await sleep(delayMs);\n          continue;\n        }\n        clearTimeout(timeout);\n        return await this.handleResponse<T>(response, options.responseType);\n      } catch (error) {\n        lastError = error;\n        if (shouldRetryTimeout(error, retryPolicy) && canRetryMethod && attempt < maxAttempts) {\n          const delayMs = computeRetryDelayMs(undefined, attempt, this.maxRetryDelayMs);\n          clearTimeout(timeout);\n          await sleep(delayMs);\n          continue;\n        }\n        clearTimeout(timeout);\n        break;\n      }\n    }\n\n    if (lastError) {\n      throw lastError;\n    }\n    throw new KsefHttpError(500, \"HTTP request retry loop exited unexpectedly.\", undefined);\n  }\n\n  private resolveRetryPolicy(retryOptions?: RetryOptions): RetryPolicy {\n    return {\n      retryOn429: retryOptions?.retryOn429 ?? this.retryOn429,\n      retryOn5xx: retryOptions?.retryOn5xx ?? this.retryOn5xx,\n      retryOnTimeout: retryOptions?.retryOnTimeout ?? this.retryOnTimeout,\n    };\n  }\n\n  private validateSkipAuthOptions(options: HttpRequestOptions, url: string): void {\n    if (!options.skipAuth) {\n      return;\n    }\n    if (options.authToken) {\n      throw new KsefValidationError(\"skipAuth and authToken cannot be used together.\");\n    }\n    if (!/^https?:\\/\\//i.test(url)) {\n      return;\n    }\n    validatePresignedUrlSecurity(\n      {\n        strictPresignedUrlValidation: this.strictPresignedUrlValidation,\n        allowPrivateNetworkPresignedUrls: this.allowPrivateNetworkPresignedUrls,\n        ...(this.allowedPresignedHosts\n          ? { allowedPresignedHosts: this.allowedPresignedHosts }\n          : {}),\n      },\n      url,\n    );\n  }\n\n  private buildUrl(path: string, query?: HttpRequestOptions[\"query\"]): string {\n    const isAbsolute = /^https?:\\/\\//i.test(path);\n    const base = isAbsolute ? path : `${this.baseUrl}${path.startsWith(\"/\") ? \"\" : \"/\"}${path}`;\n    const url = new URL(base);\n    if (query) {\n      for (const [key, value] of Object.entries(query)) {\n        if (value === undefined || value === null) {\n          continue;\n        }\n        if (Array.isArray(value)) {\n          for (const item of value) {\n            url.searchParams.append(key, String(item));\n          }\n          continue;\n        }\n        url.searchParams.set(key, String(value));\n      }\n    }\n    return url.toString();\n  }\n\n  private getDispatcher(url: string): ProxyAgent | undefined {\n    if (!this.proxy) {\n      return undefined;\n    }\n    const hostname = new URL(url).hostname;\n    if (shouldBypassProxy(hostname, this.noProxy)) {\n      return undefined;\n    }\n    return new ProxyAgent(this.proxy);\n  }\n\n  private async handleResponse<T>(\n    response: Response,\n    responseType?: \"json\" | \"text\" | \"buffer\",\n  ): Promise<T> {\n    this.notifySystemWarning(response);\n    const contentType = response.headers.get(\"content-type\") ?? \"\";\n\n    if (!response.ok) {\n      await this.throwForError(response, contentType);\n    }\n\n    if (response.status === 204) {\n      return undefined as T;\n    }\n\n    if (responseType === \"buffer\") {\n      const buffer = Buffer.from(await response.arrayBuffer());\n      return buffer as T;\n    }\n\n    if (responseType === \"text\" || contentType.includes(\"application/xml\")) {\n      const text = await response.text();\n      return text as T;\n    }\n\n    if (isJsonContentType(contentType)) {\n      return (await response.json()) as T;\n    }\n\n    const fallback = await response.text();\n    return fallback as T;\n  }\n\n  private async throwForError(response: Response, contentType: string): Promise<never> {\n    const status = response.status;\n    const retryAfter = response.headers.get(\"retry-after\") ?? undefined;\n\n    if (isJsonContentType(contentType)) {\n      const payload = await response.json().catch(() => undefined);\n      const problem = parseApiProblem(status, payload);\n      if (status === 429) {\n        throw new KsefRateLimitError(\n          status,\n          \"Rate limit exceeded\",\n          payload,\n          retryAfter,\n          parseRetryAfterSeconds(retryAfter),\n          problem,\n        );\n      }\n      if (status === 460) {\n        const statusDetails = extractStatusDetails(payload);\n        if (statusDetails && isSuspendedCertificateStatus(statusDetails)) {\n          const detailsSuffix = statusDetails.length ? ` Details: ${statusDetails.join(\", \")}` : \"\";\n          throw new KsefAuthStatusError(\n            status,\n            `Authentication failed with ${status}: certificate is suspended.${detailsSuffix}`,\n            payload,\n            statusDetails,\n            problem,\n          );\n        }\n      }\n      throw new KsefApiError(status, `API request failed with ${status}`, payload, problem);\n    }\n\n    const text = await response.text().catch(() => undefined);\n    if (status === 429) {\n      throw new KsefRateLimitError(\n        status,\n        \"Rate limit exceeded\",\n        text,\n        retryAfter,\n        parseRetryAfterSeconds(retryAfter),\n      );\n    }\n    throw new KsefHttpError(status, `HTTP request failed with ${status}`, text);\n  }\n\n  private notifySystemWarning(response: Response): void {\n    const warning = response.headers.get(\"x-system-warning\");\n    if (!warning || !this.systemWarningHandler) {\n      return;\n    }\n    this.systemWarningHandler(warning);\n  }\n}\n\ninterface RetryPolicy {\n  retryOn429: boolean;\n  retryOn5xx: boolean;\n  retryOnTimeout: boolean;\n}\n\nfunction isIdempotentMethod(method: HttpMethod): boolean {\n  return method === \"GET\" || method === \"PUT\" || method === \"DELETE\";\n}\n\nfunction shouldRetryResponse(statusCode: number, retryPolicy: RetryPolicy): boolean {\n  return (\n    (retryPolicy.retryOn429 && statusCode === 429) ||\n    (retryPolicy.retryOn5xx && statusCode >= 500 && statusCode <= 599)\n  );\n}\n\nfunction shouldRetryTimeout(error: unknown, retryPolicy: RetryPolicy): boolean {\n  return retryPolicy.retryOnTimeout && isTimeoutError(error);\n}\n\nfunction isTimeoutError(error: unknown): boolean {\n  if (!(error instanceof Error)) {\n    return false;\n  }\n  if (error.name === \"AbortError\" || error.name === \"TimeoutError\") {\n    return true;\n  }\n  if (hasTimeoutCode(error)) {\n    return true;\n  }\n  const cause = (error as { cause?: unknown }).cause;\n  return cause instanceof Error && hasTimeoutCode(cause);\n}\n\nfunction hasTimeoutCode(error: Error): boolean {\n  const code = (error as NodeJS.ErrnoException).code;\n  return (\n    code === \"ETIMEDOUT\" ||\n    code === \"ESOCKETTIMEDOUT\" ||\n    code === \"UND_ERR_CONNECT_TIMEOUT\" ||\n    code === \"UND_ERR_HEADERS_TIMEOUT\" ||\n    code === \"UND_ERR_BODY_TIMEOUT\"\n  );\n}\n\nfunction extractStatusDetails(payload: unknown): string[] | undefined {\n  if (!isPlainObject(payload)) {\n    return undefined;\n  }\n  const status = payload.status;\n  if (!isPlainObject(status)) {\n    return undefined;\n  }\n  const details = status.details;\n  if (typeof details === \"string\") {\n    return [details];\n  }\n  if (!Array.isArray(details)) {\n    return undefined;\n  }\n  const mapped = details.filter((item): item is string => typeof item === \"string\");\n  return mapped.length > 0 ? mapped : undefined;\n}\n\nfunction isSuspendedCertificateStatus(details: string[]): boolean {\n  return details.some((detail) => {\n    const normalized = normalizeForMatch(detail);\n    const hasCertificate = normalized.includes(\"certyfikat\") || normalized.includes(\"certificate\");\n    const hasSuspended = normalized.includes(\"zawiesz\") || normalized.includes(\"suspend\");\n    return hasCertificate && hasSuspended;\n  });\n}\n\nfunction normalizeForMatch(value: string): string {\n  return value\n    .toLowerCase()\n    .normalize(\"NFD\")\n    .replace(/[\\u0300-\\u036f]/g, \"\");\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction computeRetryDelayMs(\n  retryAfter: string | undefined,\n  attempt: number,\n  maxDelayMs: number,\n): number {\n  const clamp = (value: number) => Math.max(0, Math.min(maxDelayMs, value));\n\n  const retryAfterMs = parseRetryAfterMs(retryAfter);\n  if (retryAfterMs !== undefined) {\n    return clamp(retryAfterMs);\n  }\n\n  const base = Math.min(maxDelayMs, 500 * 2 ** Math.max(0, attempt - 1));\n  const jitter = Math.random() * 250;\n  return clamp(base + jitter);\n}\n\nfunction sleep(ms: number): Promise<void> {\n  if (ms <= 0) {\n    return Promise.resolve();\n  }\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import { fromBase64Url } from \"./base64url\";\n\nexport interface JwtPayload {\n  exp?: number;\n}\n\nexport function decodeJwtPayload(token: string): JwtPayload | null {\n  const parts = token.split(\".\");\n  const payloadPart = parts[1];\n  if (parts.length < 2 || !payloadPart) {\n    return null;\n  }\n  try {\n    const payload = fromBase64Url(payloadPart).toString(\"utf8\");\n    return JSON.parse(payload) as JwtPayload;\n  } catch {\n    return null;\n  }\n}\n\nexport function getJwtExpiryMs(token: string): number | null {\n  const payload = decodeJwtPayload(token);\n  if (!payload?.exp) {\n    return null;\n  }\n  return payload.exp * 1000;\n}\n","import { AuthClient } from \"../api/authClient\";\nimport { KsefSessionExpiredError } from \"../errors/errors\";\nimport { AuthenticationTokensResponse } from \"../types/common\";\nimport { getJwtExpiryMs } from \"../utils/jwt\";\n\nexport interface AuthManagerOptions {\n  refreshLeewayMs?: number;\n}\n\nexport class AuthManager {\n  private accessToken: string | null = null;\n  private refreshToken: string | null = null;\n  private accessTokenExpiryMs: number | null = null;\n  private refreshInFlight: Promise<string> | null = null;\n  private readonly refreshLeewayMs: number;\n  private readonly authClient: AuthClient;\n\n  constructor(authClient: AuthClient, options?: AuthManagerOptions) {\n    this.authClient = authClient;\n    this.refreshLeewayMs = options?.refreshLeewayMs ?? 60_000;\n  }\n\n  setTokens(tokens: AuthenticationTokensResponse): void {\n    this.accessToken = tokens.accessToken.token;\n    this.refreshToken = tokens.refreshToken.token;\n    this.accessTokenExpiryMs =\n      getJwtExpiryMs(tokens.accessToken.token) ?? Date.parse(tokens.accessToken.validUntil);\n  }\n\n  setAccessToken(token: string, validUntil?: string): void {\n    this.accessToken = token;\n    this.accessTokenExpiryMs =\n      getJwtExpiryMs(token) ?? (validUntil ? Date.parse(validUntil) : null);\n  }\n\n  async getAccessToken(): Promise<string | null> {\n    if (!this.accessToken) {\n      return null;\n    }\n    if (!this.accessTokenExpiryMs) {\n      return this.accessToken;\n    }\n    const now = Date.now();\n    if (this.accessTokenExpiryMs - now > this.refreshLeewayMs) {\n      return this.accessToken;\n    }\n    return await this.refreshAccessToken();\n  }\n\n  private async refreshAccessToken(): Promise<string> {\n    const refreshToken = this.refreshToken;\n    if (!refreshToken) {\n      throw new KsefSessionExpiredError(\"Refresh token is missing.\");\n    }\n    if (this.refreshInFlight) {\n      return await this.refreshInFlight;\n    }\n    this.refreshInFlight = (async () => {\n      const response = await this.authClient.refreshAccessToken(refreshToken);\n      this.setAccessToken(response.accessToken.token, response.accessToken.validUntil);\n      return this.accessToken ?? response.accessToken.token;\n    })();\n    try {\n      const refreshedAccessToken = await this.refreshInFlight;\n      this.refreshInFlight = null;\n      return refreshedAccessToken;\n    } catch {\n      this.accessToken = null;\n      this.refreshToken = null;\n      this.refreshInFlight = null;\n      throw new KsefSessionExpiredError(\"Failed to refresh access token.\");\n    }\n  }\n}\n","export type JsonValue =\n  | string\n  | number\n  | boolean\n  | null\n  | JsonValue[]\n  | { [key: string]: JsonValue };\n\nexport type JsonObject = { [key: string]: JsonValue };\n\nexport type HttpMethod = \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n\nexport type KsefEnvironment = \"TEST\" | \"DEMO\" | \"PRD\";\nexport type KsefLighthouseEnvironment = \"TEST\" | \"PROD\" | \"PRD\";\n\nexport const KSEF_ENV_URLS: Record<KsefEnvironment, string> = {\n  TEST: \"https://api-test.ksef.mf.gov.pl/v2\",\n  DEMO: \"https://api-demo.ksef.mf.gov.pl/v2\",\n  PRD: \"https://api.ksef.mf.gov.pl/v2\",\n};\n\nexport const KSEF_LIGHTHOUSE_URLS: Record<KsefLighthouseEnvironment, string> = {\n  TEST: \"https://api-latarnia-test.ksef.mf.gov.pl\",\n  PROD: \"https://api-latarnia.ksef.mf.gov.pl\",\n  PRD: \"https://api-latarnia.ksef.mf.gov.pl\",\n};\n\nexport const KSEF_LIGHTHOUSE_ENV_BY_KSEF_ENV: Record<KsefEnvironment, KsefLighthouseEnvironment> =\n  {\n    TEST: \"TEST\",\n    DEMO: \"TEST\",\n    PRD: \"PRD\",\n  };\n\nexport const KSEF_QR_URLS: Record<KsefEnvironment, string> = {\n  TEST: \"https://qr-test.ksef.mf.gov.pl\",\n  DEMO: \"https://qr-demo.ksef.mf.gov.pl\",\n  PRD: \"https://qr.ksef.mf.gov.pl\",\n};\n\nexport type ContextIdentifierType = \"Nip\" | \"InternalId\" | \"NipVatUe\" | \"PeppolId\";\n\nexport interface ContextIdentifier {\n  type: ContextIdentifierType;\n  value: string;\n}\n\nexport interface StatusInfo {\n  code: number;\n  description: string;\n  details?: string[];\n}\n\nexport interface TokenInfo {\n  token: string;\n  validUntil: string;\n}\n\nexport interface AuthenticationTokensResponse {\n  accessToken: TokenInfo;\n  refreshToken: TokenInfo;\n}\n\nexport interface AuthenticationInitResponse {\n  referenceNumber: string;\n  authenticationToken: TokenInfo;\n}\n\nexport type AuthenticationMethodCategory = \"XadesSignature\" | \"NationalNode\" | \"Token\" | \"Other\";\n\nexport type AuthenticationMethod =\n  | \"Token\"\n  | \"TrustedProfile\"\n  | \"InternalCertificate\"\n  | \"QualifiedSignature\"\n  | \"QualifiedSeal\"\n  | \"PersonalSignature\"\n  | \"PeppolSignature\";\n\nexport interface AuthenticationMethodInfo {\n  category: AuthenticationMethodCategory;\n  code: string;\n  displayName: string;\n}\n\nexport interface AuthenticationListItem {\n  startDate: string;\n  /**\n   * @deprecated Use `authenticationMethodInfo` instead.\n   */\n  authenticationMethod: AuthenticationMethod;\n  authenticationMethodInfo: AuthenticationMethodInfo;\n  status: StatusInfo;\n  isTokenRedeemed?: boolean;\n  lastTokenRefreshDate?: string | null;\n  refreshTokenValidUntil?: string | null;\n  referenceNumber: string;\n  isCurrent?: boolean;\n}\n\nexport interface AuthenticationListResponse {\n  continuationToken?: string;\n  items: AuthenticationListItem[];\n}\n\nexport interface AuthenticationOperationStatusResponse {\n  startDate: string;\n  authenticationMethodInfo: AuthenticationMethodInfo;\n  /**\n   * @deprecated Use `authenticationMethodInfo` instead.\n   */\n  authenticationMethod: AuthenticationMethod;\n  status: StatusInfo;\n  isTokenRedeemed?: boolean;\n  lastTokenRefreshDate?: string | null;\n  refreshTokenValidUntil?: string | null;\n}\n\nexport interface EncryptionInfo {\n  encryptedSymmetricKey: string;\n  initializationVector: string;\n}\n\nexport interface FileMetadata {\n  hashSha256Base64: string;\n  fileSize: number;\n}\n\nexport interface FormCode {\n  systemCode: string;\n  schemaVersion: string;\n  value: string;\n}\n\nexport interface Fa2FormCode extends FormCode {\n  systemCode: \"FA (2)\";\n  schemaVersion: \"1-0E\";\n  value: \"FA\";\n}\n\nexport interface Fa3FormCode extends FormCode {\n  systemCode: \"FA (3)\";\n  schemaVersion: \"1-0E\";\n  value: \"FA\";\n}\n\nexport interface Pef3FormCode extends FormCode {\n  systemCode: \"PEF (3)\";\n  schemaVersion: \"2-1\";\n  value: \"PEF\";\n}\n\nexport interface PefKor3FormCode extends FormCode {\n  systemCode: \"PEF_KOR (3)\";\n  schemaVersion: \"2-1\";\n  value: \"PEF\";\n}\n\nexport interface FaRr1LegacyFormCode extends FormCode {\n  systemCode: \"FA_RR (1)\";\n  schemaVersion: \"1-0E\";\n  value: \"RR\";\n}\n\nexport interface FaRr1TransitionFormCode extends FormCode {\n  systemCode: \"FA_RR (1)\";\n  schemaVersion: \"1-1E\";\n  value: \"RR\";\n}\n\nexport interface FaRr1FormCode extends FormCode {\n  systemCode: \"FA_RR (1)\";\n  schemaVersion: \"1-1E\";\n  value: \"FA_RR\";\n}\n\nexport type AnyFaRr1FormCode =\n  | FaRr1LegacyFormCode\n  | FaRr1TransitionFormCode\n  | FaRr1FormCode;\n\nexport type OnlineSessionFormCode =\n  | Fa2FormCode\n  | Fa3FormCode\n  | Pef3FormCode\n  | PefKor3FormCode\n  | AnyFaRr1FormCode;\n\nexport type BatchSessionFormCode = Fa2FormCode | Fa3FormCode | AnyFaRr1FormCode;\n\nexport interface AuthorizationPolicy {\n  allowedIps?: {\n    ip4Addresses?: string[];\n    ip4Masks?: string[];\n    ip4Ranges?: string[];\n  };\n}\n","import {\n  ActiveSessionsClient,\n  AuthClient,\n  CertificatesClient,\n  CollectiveIdentifiersClient,\n  InvoicesClient,\n  LighthouseClient,\n  LimitsClient,\n  PeppolClient,\n  PermissionsClient,\n  SecurityClient,\n  SessionsClient,\n  TestdataClient,\n  TokensClient,\n} from \"../api\";\nimport { AuthCoordinator } from \"../services/authCoordinator\";\nimport { BatchSessionWorkflow } from \"../services/batchSessionWorkflow\";\nimport { IncrementalExportWorkflow } from \"../services/incrementalExportWorkflow\";\nimport { InvoiceExportWorkflow } from \"../services/invoiceExportWorkflow\";\nimport { OfflineInvoiceWorkflow } from \"../services/offlineInvoiceWorkflow\";\nimport { OnlineSessionWorkflow } from \"../services/onlineSessionWorkflow\";\nimport { PersonTokenService } from \"../services/personTokenService\";\nimport { QrCodeService } from \"../services/qrCodeService\";\nimport { VerificationLinkService } from \"../services/verificationLinkService\";\nimport { HttpClient } from \"./httpClient\";\nimport { AuthManager } from \"./authManager\";\nimport {\n  AuthorizationPolicy,\n  ContextIdentifier,\n  KsefEnvironment,\n  KsefLighthouseEnvironment,\n  KSEF_LIGHTHOUSE_ENV_BY_KSEF_ENV,\n  KSEF_ENV_URLS,\n  KSEF_LIGHTHOUSE_URLS,\n  KSEF_QR_URLS,\n} from \"../types/common\";\n\nexport interface KsefClientOptions {\n  baseUrl?: string;\n  environment?: KsefEnvironment;\n  timeoutMs?: number;\n  appendV2?: boolean;\n  proxy?: string;\n  noProxy?: string;\n  headers?: Record<string, string>;\n  baseQrUrl?: string;\n  baseLighthouseUrl?: string;\n  lighthouseEnvironment?: KsefLighthouseEnvironment;\n  retryOn429?: boolean;\n  retryOn5xx?: boolean;\n  retryOnTimeout?: boolean;\n  maxRetryAttempts?: number;\n  maxRetryDelayMs?: number;\n  strictPresignedUrlValidation?: boolean;\n  allowedPresignedHosts?: string[];\n  allowPrivateNetworkPresignedUrls?: boolean;\n  requireExportPartHash?: boolean;\n  systemWarningHandler?: (warning: string) => void;\n}\n\nexport interface KsefConnectOptions extends KsefClientOptions {\n  token: string;\n  context: ContextIdentifier;\n  authorizationPolicy?: AuthorizationPolicy;\n  maxAttempts?: number;\n  pollIntervalMs?: number;\n  publicCertificateBase64Der?: string;\n}\n\nexport class KsefClient {\n  readonly auth: AuthClient;\n  readonly security: SecurityClient;\n  readonly sessions: SessionsClient;\n  readonly invoices: InvoicesClient;\n  readonly permissions: PermissionsClient;\n  readonly certificates: CertificatesClient;\n  readonly tokens: TokensClient;\n  readonly limits: LimitsClient;\n  readonly testdata: TestdataClient;\n  readonly collectiveIdentifiers: CollectiveIdentifiersClient;\n  readonly peppol: PeppolClient;\n  readonly lighthouse: LighthouseClient;\n  readonly activeSessions: ActiveSessionsClient;\n  readonly authManager: AuthManager;\n  readonly baseQrUrl: string;\n  readonly workflows: {\n    auth: AuthCoordinator;\n    sessions: {\n      online: OnlineSessionWorkflow;\n      batch: BatchSessionWorkflow;\n    };\n    offline: OfflineInvoiceWorkflow;\n    exports: InvoiceExportWorkflow;\n    exportsIncremental: IncrementalExportWorkflow;\n  };\n  readonly verificationLinks: VerificationLinkService;\n  readonly qr: QrCodeService;\n  readonly personToken: PersonTokenService;\n\n  private readonly http: HttpClient;\n\n  constructor(options: KsefClientOptions = {}) {\n    const baseUrl =\n      options.baseUrl ?? (options.environment ? KSEF_ENV_URLS[options.environment] : undefined);\n    if (!baseUrl) {\n      throw new Error(\"baseUrl or environment is required.\");\n    }\n    this.baseQrUrl =\n      options.baseQrUrl ??\n      (options.environment ? KSEF_QR_URLS[options.environment] : KSEF_QR_URLS.TEST);\n    const baseLighthouseUrl = resolveLighthouseBaseUrl(baseUrl, options);\n    const httpOptions = {\n      baseUrl,\n      ...(options.appendV2 !== undefined && { appendV2: options.appendV2 }),\n      ...(options.timeoutMs !== undefined && { timeoutMs: options.timeoutMs }),\n      ...(options.headers && { defaultHeaders: options.headers }),\n      ...(options.proxy && { proxy: options.proxy }),\n      ...(options.noProxy && { noProxy: options.noProxy }),\n      ...(options.retryOn429 !== undefined && { retryOn429: options.retryOn429 }),\n      ...(options.retryOn5xx !== undefined && { retryOn5xx: options.retryOn5xx }),\n      ...(options.retryOnTimeout !== undefined && { retryOnTimeout: options.retryOnTimeout }),\n      ...(options.maxRetryAttempts !== undefined && {\n        maxRetryAttempts: options.maxRetryAttempts,\n      }),\n      ...(options.maxRetryDelayMs !== undefined && {\n        maxRetryDelayMs: options.maxRetryDelayMs,\n      }),\n      ...(options.strictPresignedUrlValidation !== undefined && {\n        strictPresignedUrlValidation: options.strictPresignedUrlValidation,\n      }),\n      ...(options.allowedPresignedHosts && {\n        allowedPresignedHosts: options.allowedPresignedHosts,\n      }),\n      ...(options.allowPrivateNetworkPresignedUrls !== undefined && {\n        allowPrivateNetworkPresignedUrls: options.allowPrivateNetworkPresignedUrls,\n      }),\n      ...(options.systemWarningHandler && {\n        systemWarningHandler: options.systemWarningHandler,\n      }),\n    };\n    this.http = new HttpClient(httpOptions);\n\n    this.auth = new AuthClient(this.http);\n    this.authManager = new AuthManager(this.auth);\n    const tokenProvider = () => this.authManager.getAccessToken();\n\n    this.security = new SecurityClient(this.http, tokenProvider);\n    this.sessions = new SessionsClient(this.http, tokenProvider);\n    this.invoices = new InvoicesClient(this.http, tokenProvider);\n    this.permissions = new PermissionsClient(this.http, tokenProvider);\n    this.certificates = new CertificatesClient(this.http, tokenProvider);\n    this.tokens = new TokensClient(this.http, tokenProvider);\n    this.limits = new LimitsClient(this.http, tokenProvider);\n    this.testdata = new TestdataClient(this.http, tokenProvider);\n    this.collectiveIdentifiers = new CollectiveIdentifiersClient(this.http, tokenProvider);\n    this.peppol = new PeppolClient(this.http, tokenProvider);\n    this.lighthouse = new LighthouseClient(this.http, baseLighthouseUrl);\n    this.activeSessions = new ActiveSessionsClient(this.http, tokenProvider);\n\n    const onlineSessionWorkflow = new OnlineSessionWorkflow(\n      this.sessions,\n      this.security,\n      this.http,\n    );\n    const batchSessionWorkflow = new BatchSessionWorkflow(this.sessions, this.security, this.http);\n    const offlineInvoiceWorkflow = new OfflineInvoiceWorkflow(onlineSessionWorkflow);\n    const exportsWorkflow = new InvoiceExportWorkflow(this.invoices, this.security, this.http, {\n      ...(options.requireExportPartHash !== undefined && {\n        requireExportPartHash: options.requireExportPartHash,\n      }),\n    });\n    this.workflows = {\n      auth: new AuthCoordinator(this.auth, this.security),\n      sessions: {\n        online: onlineSessionWorkflow,\n        batch: batchSessionWorkflow,\n      },\n      offline: offlineInvoiceWorkflow,\n      exports: exportsWorkflow,\n      exportsIncremental: new IncrementalExportWorkflow(exportsWorkflow),\n    };\n\n    this.verificationLinks = new VerificationLinkService({\n      baseQrUrl: this.baseQrUrl,\n    });\n    this.qr = new QrCodeService();\n    this.personToken = new PersonTokenService();\n  }\n\n  static async connect(options: KsefConnectOptions): Promise<KsefClient> {\n    const client = new KsefClient(options);\n    const authOptions = {\n      token: options.token,\n      context: options.context,\n      ...(options.authorizationPolicy && {\n        authorizationPolicy: options.authorizationPolicy,\n      }),\n      ...(options.maxAttempts !== undefined && {\n        maxAttempts: options.maxAttempts,\n      }),\n      ...(options.pollIntervalMs !== undefined && {\n        pollIntervalMs: options.pollIntervalMs,\n      }),\n      ...(options.publicCertificateBase64Der && {\n        publicCertificateBase64Der: options.publicCertificateBase64Der,\n      }),\n    };\n    const tokens = await client.workflows.auth.authenticateWithKsefToken(authOptions);\n    client.authManager.setTokens(tokens);\n    return client;\n  }\n}\n\nfunction resolveLighthouseBaseUrl(baseUrl: string, options: KsefClientOptions): string {\n  if (options.baseLighthouseUrl) {\n    return trimTrailingSlash(options.baseLighthouseUrl);\n  }\n\n  if (options.lighthouseEnvironment) {\n    return KSEF_LIGHTHOUSE_URLS[options.lighthouseEnvironment];\n  }\n\n  if (options.environment) {\n    return KSEF_LIGHTHOUSE_URLS[KSEF_LIGHTHOUSE_ENV_BY_KSEF_ENV[options.environment]];\n  }\n\n  const normalizedBaseUrl = trimTrailingSlash(baseUrl);\n  for (const [environment, apiBaseUrl] of Object.entries(KSEF_ENV_URLS) as Array<\n    [KsefEnvironment, string]\n  >) {\n    const normalizedApiBaseUrl = trimTrailingSlash(apiBaseUrl);\n    const apiBaseWithoutV2 = normalizedApiBaseUrl.endsWith(\"/v2\")\n      ? normalizedApiBaseUrl.slice(0, -3)\n      : normalizedApiBaseUrl;\n    if (\n      normalizedBaseUrl.startsWith(normalizedApiBaseUrl) ||\n      normalizedBaseUrl.startsWith(apiBaseWithoutV2)\n    ) {\n      const lighthouseEnvironment = KSEF_LIGHTHOUSE_ENV_BY_KSEF_ENV[environment];\n      return KSEF_LIGHTHOUSE_URLS[lighthouseEnvironment];\n    }\n  }\n  return KSEF_LIGHTHOUSE_URLS.TEST;\n}\n\nfunction trimTrailingSlash(value: string): string {\n  return value.replace(/\\/+$/, \"\");\n}\n","export type CliOptionValue = string | boolean | string[];\nexport type CliOptions = Record<string, CliOptionValue>;\n\nexport interface ParsedArgv {\n  positionals: string[];\n  options: CliOptions;\n  json: boolean;\n  help: boolean;\n}\n\nconst VALUE_OPTIONS = new Set<string>([\n  \"profile\",\n  \"env\",\n  \"lighthouse-env\",\n  \"base-url\",\n  \"context-type\",\n  \"context-value\",\n  \"token-store-policy\",\n  \"token-store\",\n  \"token-file\",\n  \"access-token-env\",\n  \"refresh-token-env\",\n  \"ksef-token-env\",\n  \"token\",\n  \"page-size\",\n  \"ksef-number\",\n  \"output\",\n  \"filters-file\",\n  \"page-offset\",\n  \"sort-order\",\n  \"invoice-file\",\n  \"form-code\",\n  \"poll-interval-ms\",\n  \"max-attempts\",\n  \"hash-of-corrected-invoice\",\n  \"upo-output\",\n  \"session-ref\",\n  \"session-id\",\n  \"save-session\",\n  \"invoice-ref\",\n  \"upo-ref\",\n  \"out-dir\",\n  \"id\",\n  \"in\",\n  \"out\",\n  \"system-code\",\n  \"schema-version\",\n  \"form-value\",\n  \"invoice\",\n  \"poll-interval\",\n  \"save-upo\",\n  \"parallelism\",\n  \"zip\",\n  \"dir\",\n  \"from\",\n  \"to\",\n  \"iz\",\n  \"from-file\",\n]);\n\nconst MULTI_VALUE_OPTIONS = new Set<string>([\"ksef-number\", \"iz\"]);\n\nfunction assignOption(options: CliOptions, key: string, value: string): void {\n  if (MULTI_VALUE_OPTIONS.has(key)) {\n    const existing = options[key];\n    if (Array.isArray(existing)) {\n      existing.push(value);\n      return;\n    }\n    if (typeof existing === \"string\") {\n      options[key] = [existing, value];\n      return;\n    }\n    options[key] = value;\n    return;\n  }\n  options[key] = value;\n}\n\nexport function parseArgv(argv: string[]): ParsedArgv {\n  const positionals: string[] = [];\n  const options: CliOptions = {};\n\n  let i = 0;\n  while (i < argv.length) {\n    const token = argv[i];\n    if (token === undefined) {\n      break;\n    }\n    if (token === \"--\") {\n      positionals.push(...argv.slice(i + 1));\n      break;\n    }\n\n    if (token.startsWith(\"--\")) {\n      const equalIndex = token.indexOf(\"=\");\n      if (equalIndex > 2) {\n        const key = token.slice(2, equalIndex);\n        const value = token.slice(equalIndex + 1);\n        assignOption(options, key, value);\n        i += 1;\n        continue;\n      }\n\n      const key = token.slice(2);\n      const next = argv[i + 1];\n      if (VALUE_OPTIONS.has(key) && next !== undefined && !next.startsWith(\"-\")) {\n        assignOption(options, key, next);\n        i += 2;\n        continue;\n      }\n      options[key] = true;\n      i += 1;\n      continue;\n    }\n\n    if (token === \"-h\") {\n      options.help = true;\n      i += 1;\n      continue;\n    }\n\n    positionals.push(token);\n    i += 1;\n  }\n\n  return {\n    positionals,\n    options,\n    json: getBooleanOption(options, \"json\"),\n    help: getBooleanOption(options, \"help\"),\n  };\n}\n\nexport function getStringOption(options: CliOptions, key: string): string | undefined {\n  const value = options[key];\n  if (Array.isArray(value)) {\n    return value[value.length - 1];\n  }\n  return typeof value === \"string\" ? value : undefined;\n}\n\nexport function getStringListOption(options: CliOptions, key: string): string[] {\n  const value = options[key];\n  if (Array.isArray(value)) {\n    return value;\n  }\n  if (typeof value === \"string\") {\n    return [value];\n  }\n  return [];\n}\n\nexport function getBooleanOption(options: CliOptions, key: string): boolean {\n  const value = options[key];\n  if (typeof value === \"boolean\") {\n    return value;\n  }\n  if (typeof value === \"string\") {\n    if (value === \"false\" || value === \"0\") {\n      return false;\n    }\n    return value.length > 0;\n  }\n  return false;\n}\n\nexport function getNumberOption(options: CliOptions, key: string): number | undefined {\n  const value = getStringOption(options, key);\n  if (value === undefined) {\n    return undefined;\n  }\n  const parsed = Number(value);\n  return Number.isFinite(parsed) ? parsed : undefined;\n}\n","import os from \"node:os\";\nimport path from \"node:path\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { KSEF_ENV_URLS } from \"../index\";\nimport type { CliConfigFile, CliEnv, ProfileConfig } from \"./types\";\n\nexport const DEFAULT_PROFILE_NAME = \"default\";\nexport const CONFIG_FILE_NAME = \"config.json\";\n\nexport function resolveCliHome(env: CliEnv): string {\n  const custom = env.KSEF_CLI_HOME?.trim();\n  if (custom) {\n    return path.resolve(custom);\n  }\n  return path.join(os.homedir(), \".ksef-ts\");\n}\n\nexport function getConfigPath(cliHome: string): string {\n  return path.join(cliHome, CONFIG_FILE_NAME);\n}\n\nexport function createDefaultConfig(): CliConfigFile {\n  return {\n    version: 1,\n    currentProfile: DEFAULT_PROFILE_NAME,\n    profiles: {\n      [DEFAULT_PROFILE_NAME]: {\n        environment: \"TEST\",\n        lighthouseEnvironment: \"TEST\",\n        tokenStore: {\n          policy: \"plaintext\",\n        },\n      },\n    },\n  };\n}\n\nexport async function readConfig(cliHome: string): Promise<CliConfigFile> {\n  const configPath = getConfigPath(cliHome);\n  try {\n    const raw = await readFile(configPath, \"utf8\");\n    const parsed = JSON.parse(raw) as Partial<CliConfigFile>;\n    if (!parsed || typeof parsed !== \"object\") {\n      return createDefaultConfig();\n    }\n    const profiles = parsed.profiles && typeof parsed.profiles === \"object\" ? parsed.profiles : {};\n    const currentProfile =\n      typeof parsed.currentProfile === \"string\" && parsed.currentProfile.length > 0\n        ? parsed.currentProfile\n        : DEFAULT_PROFILE_NAME;\n    return {\n      version: 1,\n      currentProfile,\n      profiles: profiles as Record<string, ProfileConfig>,\n    };\n  } catch (error) {\n    if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n      return createDefaultConfig();\n    }\n    throw error;\n  }\n}\n\nexport async function writeConfig(cliHome: string, config: CliConfigFile): Promise<void> {\n  const configPath = getConfigPath(cliHome);\n  await mkdir(path.dirname(configPath), { recursive: true });\n  await writeFile(configPath, JSON.stringify(config, null, 2), \"utf8\");\n}\n\nexport function getProfile(config: CliConfigFile, profileName?: string): [string, ProfileConfig] {\n  const resolvedName = profileName ?? config.currentProfile;\n  const profile = config.profiles[resolvedName];\n  if (!profile) {\n    throw new Error(`Profile \"${resolvedName}\" not found.`);\n  }\n  return [resolvedName, profile];\n}\n\nexport function resolveBaseUrl(profile: ProfileConfig): string {\n  if (profile.baseUrl) {\n    return profile.baseUrl;\n  }\n  const env = profile.environment ?? \"TEST\";\n  return KSEF_ENV_URLS[env];\n}\n","import type { OnlineSessionFormCode } from \"../index\";\n\nconst FORM_CODE_MAP: Record<string, OnlineSessionFormCode> = {\n  FA2: {\n    systemCode: \"FA (2)\",\n    schemaVersion: \"1-0E\",\n    value: \"FA\",\n  },\n  FA3: {\n    systemCode: \"FA (3)\",\n    schemaVersion: \"1-0E\",\n    value: \"FA\",\n  },\n  PEF3: {\n    systemCode: \"PEF (3)\",\n    schemaVersion: \"2-1\",\n    value: \"PEF\",\n  },\n  PEFKOR3: {\n    systemCode: \"PEF_KOR (3)\",\n    schemaVersion: \"2-1\",\n    value: \"PEF\",\n  },\n  FARR1: {\n    systemCode: \"FA_RR (1)\",\n    schemaVersion: \"1-1E\",\n    value: \"FA_RR\",\n  },\n};\n\nexport function parseFormCode(value?: string): OnlineSessionFormCode {\n  const key = value?.trim().toUpperCase() ?? \"FA3\";\n  const formCode = FORM_CODE_MAP[key];\n  if (!formCode) {\n    throw new Error(`Unsupported form code \"${value}\". Allowed: ${Object.keys(FORM_CODE_MAP).join(\", \")}.`);\n  }\n  return formCode;\n}\n","import path from \"node:path\";\nimport { mkdir, readdir, readFile, rename, stat, unlink, writeFile } from \"node:fs/promises\";\nimport { randomUUID } from \"node:crypto\";\nimport { BatchSessionState } from \"../services/batchSessionWorkflow\";\nimport { OnlineSessionState } from \"../services/onlineSessionWorkflow\";\n\nconst CHECKPOINT_SCHEMA_VERSION = 1;\nconst SESSION_ID_RE = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/;\n\nexport function formatPersistenceError(error: unknown): string {\n  return error instanceof Error ? error.message : String(error);\n}\n\ntype SessionStoreErrorKind = \"validation\" | \"config\" | \"io\";\n\nexport class SessionStoreError extends Error {\n  readonly kind: SessionStoreErrorKind;\n\n  constructor(message: string, kind: SessionStoreErrorKind) {\n    super(message);\n    this.kind = kind;\n    this.name = \"SessionStoreError\";\n  }\n}\n\nexport interface BatchPayloadSource {\n  kind: \"zip\" | \"directory\";\n  path: string;\n  sourceSha256Base64: string;\n  sourceSize: number;\n}\n\ninterface SerializedEncryptionData {\n  cipherKeyBase64: string;\n  cipherIvBase64: string;\n  encryptionInfo: {\n    encryptedSymmetricKey: string;\n    initializationVector: string;\n  };\n}\n\ninterface SerializedOnlineSessionState {\n  referenceNumber: string;\n  encryptionData: SerializedEncryptionData;\n  upoV43?: boolean;\n}\n\ninterface SerializedBatchSessionState {\n  referenceNumber: string;\n  encryptionData: SerializedEncryptionData;\n  batchFile: BatchSessionState[\"batchFile\"];\n  partUploadRequests: BatchSessionState[\"partUploadRequests\"];\n  encryptedPartsBase64: string[];\n  upoV43?: boolean;\n  offlineMode?: boolean;\n}\n\nexport interface OnlineSessionCheckpoint {\n  schemaVersion: 1;\n  id: string;\n  profile: string;\n  baseUrl: string;\n  kind: \"online\";\n  createdAt: string;\n  updatedAt: string;\n  stage: string;\n  sessionState: SerializedOnlineSessionState;\n  lastInvoiceRef: string | null;\n  sentInvoiceRefs: string[];\n}\n\nexport interface BatchSessionCheckpoint {\n  schemaVersion: 1;\n  id: string;\n  profile: string;\n  baseUrl: string;\n  kind: \"batch\";\n  createdAt: string;\n  updatedAt: string;\n  stage: string;\n  sessionState: SerializedBatchSessionState;\n  payloadSource: BatchPayloadSource;\n  uploadedOrdinals: number[];\n  lastUpoRef: string | null;\n}\n\nexport type SessionCheckpoint = OnlineSessionCheckpoint | BatchSessionCheckpoint;\n\nexport interface SessionCheckpointSummary {\n  id: string;\n  kind: \"online\" | \"batch\";\n  profile: string;\n  baseUrl: string;\n  stage: string;\n  createdAt: string;\n  updatedAt: string;\n  sessionRef: string;\n  lastInvoiceRef?: string;\n  sentInvoiceCount?: number;\n  uploadedOrdinals?: number[];\n  lastUpoRef?: string;\n  payloadSource?: BatchPayloadSource;\n}\n\nexport function validateSessionId(sessionId: string): string {\n  const normalized = sessionId.trim();\n  if (!SESSION_ID_RE.test(normalized)) {\n    throw new SessionStoreError(\n      \"Invalid session id. Use 1-128 chars from: letters, digits, dot, dash, underscore.\",\n      \"validation\",\n    );\n  }\n  return normalized;\n}\n\nexport function summarizeCheckpoint(checkpoint: SessionCheckpoint): SessionCheckpointSummary {\n  const payload: SessionCheckpointSummary = {\n    id: checkpoint.id,\n    kind: checkpoint.kind,\n    profile: checkpoint.profile,\n    baseUrl: checkpoint.baseUrl,\n    stage: checkpoint.stage,\n    createdAt: checkpoint.createdAt,\n    updatedAt: checkpoint.updatedAt,\n    sessionRef: checkpoint.sessionState.referenceNumber,\n  };\n  if (checkpoint.kind === \"online\") {\n    payload.lastInvoiceRef = checkpoint.lastInvoiceRef ?? \"\";\n    payload.sentInvoiceCount = checkpoint.sentInvoiceRefs.length;\n  } else {\n    payload.uploadedOrdinals = [...checkpoint.uploadedOrdinals];\n    payload.lastUpoRef = checkpoint.lastUpoRef ?? \"\";\n    payload.payloadSource = { ...checkpoint.payloadSource };\n  }\n  return payload;\n}\n\nexport function serializeOnlineSessionState(state: OnlineSessionState): SerializedOnlineSessionState {\n  return {\n    referenceNumber: state.referenceNumber,\n    encryptionData: {\n      cipherKeyBase64: state.encryptionData.cipherKey.toString(\"base64\"),\n      cipherIvBase64: state.encryptionData.cipherIv.toString(\"base64\"),\n      encryptionInfo: {\n        ...state.encryptionData.encryptionInfo,\n      },\n    },\n    ...(state.upoV43 !== undefined ? { upoV43: state.upoV43 } : {}),\n  };\n}\n\nexport function deserializeOnlineSessionState(state: SerializedOnlineSessionState): OnlineSessionState {\n  return {\n    referenceNumber: state.referenceNumber,\n    encryptionData: {\n      cipherKey: Buffer.from(state.encryptionData.cipherKeyBase64, \"base64\"),\n      cipherIv: Buffer.from(state.encryptionData.cipherIvBase64, \"base64\"),\n      encryptionInfo: { ...state.encryptionData.encryptionInfo },\n    },\n    ...(state.upoV43 !== undefined ? { upoV43: state.upoV43 } : {}),\n  };\n}\n\nexport function serializeBatchSessionState(state: BatchSessionState): SerializedBatchSessionState {\n  return {\n    referenceNumber: state.referenceNumber,\n    encryptionData: {\n      cipherKeyBase64: state.encryptionData.cipherKey.toString(\"base64\"),\n      cipherIvBase64: state.encryptionData.cipherIv.toString(\"base64\"),\n      encryptionInfo: {\n        ...state.encryptionData.encryptionInfo,\n      },\n    },\n    batchFile: {\n      fileSize: state.batchFile.fileSize,\n      fileHash: state.batchFile.fileHash,\n      fileParts: state.batchFile.fileParts.map((part) => ({ ...part })),\n    },\n    partUploadRequests: state.partUploadRequests.map((item) => ({\n      ...item,\n      headers: { ...(item.headers ?? {}) },\n    })),\n    encryptedPartsBase64: [...state.encryptedPartsBase64],\n    ...(state.upoV43 !== undefined ? { upoV43: state.upoV43 } : {}),\n    ...(state.offlineMode !== undefined ? { offlineMode: state.offlineMode } : {}),\n  };\n}\n\nexport function deserializeBatchSessionState(state: SerializedBatchSessionState): BatchSessionState {\n  return {\n    referenceNumber: state.referenceNumber,\n    encryptionData: {\n      cipherKey: Buffer.from(state.encryptionData.cipherKeyBase64, \"base64\"),\n      cipherIv: Buffer.from(state.encryptionData.cipherIvBase64, \"base64\"),\n      encryptionInfo: { ...state.encryptionData.encryptionInfo },\n    },\n    batchFile: {\n      fileSize: state.batchFile.fileSize,\n      fileHash: state.batchFile.fileHash,\n      fileParts: state.batchFile.fileParts.map((part) => ({ ...part })),\n    },\n    partUploadRequests: state.partUploadRequests.map((item) => ({\n      ...item,\n      headers: { ...(item.headers ?? {}) },\n    })),\n    encryptedPartsBase64: [...state.encryptedPartsBase64],\n    ...(state.upoV43 !== undefined ? { upoV43: state.upoV43 } : {}),\n    ...(state.offlineMode !== undefined ? { offlineMode: state.offlineMode } : {}),\n  };\n}\n\nfunction nowIso(): string {\n  return new Date().toISOString();\n}\n\nfunction checkpointRoot(cliHome: string): string {\n  return path.join(cliHome, \"cache\", \"sessions\");\n}\n\nfunction checkpointPath(cliHome: string, profile: string, sessionId: string): string {\n  return path.join(checkpointRoot(cliHome), profile, `${validateSessionId(sessionId)}.json`);\n}\n\nasync function writeJsonAtomic(targetPath: string, payload: unknown): Promise<void> {\n  await mkdir(path.dirname(targetPath), { recursive: true });\n  const tempPath = path.join(\n    path.dirname(targetPath),\n    `.${path.basename(targetPath)}.${process.pid}.${randomUUID()}.tmp`,\n  );\n  const json = JSON.stringify(payload, null, 2);\n  try {\n    await writeFile(tempPath, json, \"utf8\");\n    await rename(tempPath, targetPath);\n  } catch (error) {\n    await unlink(tempPath).catch(() => undefined);\n    const message = formatPersistenceError(error);\n    throw new SessionStoreError(`Cannot persist session checkpoint: ${message}`, \"config\");\n  }\n}\n\nfunction ensureString(value: unknown, fieldName: string): string {\n  if (typeof value !== \"string\" || value.trim() === \"\") {\n    throw new SessionStoreError(`Invalid ${fieldName}: expected non-empty string.`, \"config\");\n  }\n  return value;\n}\n\nfunction ensureStringArray(value: unknown, fieldName: string): string[] {\n  if (!Array.isArray(value) || value.some((item) => typeof item !== \"string\")) {\n    throw new SessionStoreError(`Invalid ${fieldName}: expected string array.`, \"config\");\n  }\n  return value;\n}\n\nfunction ensureNumberArray(value: unknown, fieldName: string): number[] {\n  if (\n    !Array.isArray(value) ||\n    value.some((item) => !Number.isInteger(item) || (item as number) < 0)\n  ) {\n    throw new SessionStoreError(`Invalid ${fieldName}: expected integer array.`, \"config\");\n  }\n  return value as number[];\n}\n\nfunction parseCheckpoint(raw: unknown): SessionCheckpoint {\n  if (!raw || typeof raw !== \"object\") {\n    throw new SessionStoreError(\"Invalid session checkpoint payload.\", \"config\");\n  }\n\n  const payload = raw as Record<string, unknown>;\n  if (payload.schemaVersion !== CHECKPOINT_SCHEMA_VERSION) {\n    throw new SessionStoreError(\n      `Unsupported checkpoint schemaVersion: ${String(payload.schemaVersion)}.`,\n      \"config\",\n    );\n  }\n\n  const kind = payload.kind;\n  if (kind !== \"online\" && kind !== \"batch\") {\n    throw new SessionStoreError(`Unsupported checkpoint kind: ${String(kind)}.`, \"config\");\n  }\n\n  const common = {\n    schemaVersion: 1 as const,\n    id: validateSessionId(ensureString(payload.id, \"id\")),\n    profile: ensureString(payload.profile, \"profile\"),\n    baseUrl: ensureString(payload.baseUrl, \"baseUrl\"),\n    kind,\n    createdAt: ensureString(payload.createdAt, \"createdAt\"),\n    updatedAt: ensureString(payload.updatedAt, \"updatedAt\"),\n    stage: ensureString(payload.stage, \"stage\"),\n  };\n\n  if (kind === \"online\") {\n    return {\n      ...common,\n      kind: \"online\",\n      sessionState: payload.sessionState as SerializedOnlineSessionState,\n      lastInvoiceRef:\n        payload.lastInvoiceRef === null || payload.lastInvoiceRef === undefined\n          ? null\n          : ensureString(payload.lastInvoiceRef, \"lastInvoiceRef\"),\n      sentInvoiceRefs: ensureStringArray(payload.sentInvoiceRefs ?? [], \"sentInvoiceRefs\"),\n    };\n  }\n\n  if (!payload.payloadSource || typeof payload.payloadSource !== \"object\") {\n    throw new SessionStoreError(\"Invalid payloadSource: expected object.\", \"config\");\n  }\n  const source = payload.payloadSource as Record<string, unknown>;\n  const sourceKind = source.kind;\n  if (sourceKind !== \"zip\" && sourceKind !== \"directory\") {\n    throw new SessionStoreError(\"Invalid payloadSource.kind.\", \"config\");\n  }\n  const sourceSize = source.sourceSize;\n  if (!Number.isInteger(sourceSize) || (sourceSize as number) < 0) {\n    throw new SessionStoreError(\"Invalid payloadSource.sourceSize.\", \"config\");\n  }\n\n  return {\n    ...common,\n    kind: \"batch\",\n    sessionState: payload.sessionState as SerializedBatchSessionState,\n    payloadSource: {\n      kind: sourceKind,\n      path: ensureString(source.path, \"payloadSource.path\"),\n      sourceSha256Base64: ensureString(\n        source.sourceSha256Base64,\n        \"payloadSource.sourceSha256Base64\",\n      ),\n      sourceSize: sourceSize as number,\n    },\n    uploadedOrdinals: ensureNumberArray(payload.uploadedOrdinals ?? [], \"uploadedOrdinals\"),\n    lastUpoRef:\n      payload.lastUpoRef === null || payload.lastUpoRef === undefined\n        ? null\n        : ensureString(payload.lastUpoRef, \"lastUpoRef\"),\n  };\n}\n\nasync function readCheckpointFile(filePath: string): Promise<SessionCheckpoint> {\n  let rawText: string;\n  try {\n    rawText = await readFile(filePath, \"utf8\");\n  } catch (error) {\n    const message = formatPersistenceError(error);\n    throw new SessionStoreError(`Cannot read session checkpoint: ${message}`, \"config\");\n  }\n\n  let payload: unknown;\n  try {\n    payload = JSON.parse(rawText);\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    throw new SessionStoreError(`Invalid session checkpoint JSON: ${message}`, \"config\");\n  }\n  return parseCheckpoint(payload);\n}\n\nexport async function saveCheckpoint(\n  cliHome: string,\n  checkpoint: SessionCheckpoint,\n  options: { overwrite?: boolean } = {},\n): Promise<string> {\n  const filePath = checkpointPath(cliHome, checkpoint.profile, checkpoint.id);\n  const overwrite = options.overwrite ?? true;\n  if (!overwrite) {\n    try {\n      await stat(filePath);\n      throw new SessionStoreError(\n        `Session checkpoint \"${checkpoint.id}\" already exists. Choose a different --id.`,\n        \"validation\",\n      );\n    } catch (error) {\n      if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n        throw error;\n      }\n    }\n  }\n  await writeJsonAtomic(filePath, checkpoint);\n  return filePath;\n}\n\nexport async function loadCheckpoint(\n  cliHome: string,\n  profile: string,\n  sessionId: string,\n): Promise<SessionCheckpoint> {\n  const filePath = checkpointPath(cliHome, profile, sessionId);\n  try {\n    await stat(filePath);\n  } catch (error) {\n    if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n      throw new SessionStoreError(\n        `Session checkpoint \"${sessionId}\" does not exist. Create it first with session open.`,\n        \"config\",\n      );\n    }\n    throw error;\n  }\n  return readCheckpointFile(filePath);\n}\n\nexport async function listCheckpoints(\n  cliHome: string,\n  profile: string,\n): Promise<SessionCheckpoint[]> {\n  const directory = path.join(checkpointRoot(cliHome), profile);\n  let entries: string[];\n  try {\n    entries = await readdir(directory);\n  } catch (error) {\n    if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n      return [];\n    }\n    throw error;\n  }\n  const checkpoints: SessionCheckpoint[] = [];\n  for (const name of entries.filter((item) => item.endsWith(\".json\")).sort()) {\n    try {\n      checkpoints.push(await readCheckpointFile(path.join(directory, name)));\n    } catch {\n      // ignore malformed checkpoint files\n    }\n  }\n  return checkpoints;\n}\n\nexport async function deleteCheckpoint(\n  cliHome: string,\n  profile: string,\n  sessionId: string,\n): Promise<void> {\n  const filePath = checkpointPath(cliHome, profile, sessionId);\n  try {\n    await unlink(filePath);\n  } catch (error) {\n    if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n      throw new SessionStoreError(`Session checkpoint \"${sessionId}\" does not exist.`, \"config\");\n    }\n    const message = formatPersistenceError(error);\n    throw new SessionStoreError(`Cannot delete session checkpoint: ${message}`, \"config\");\n  }\n}\n\nexport async function updateCheckpoint(\n  cliHome: string,\n  checkpoint: SessionCheckpoint,\n  changes: Partial<SessionCheckpoint>,\n): Promise<SessionCheckpoint> {\n  const updated = {\n    ...checkpoint,\n    ...changes,\n    updatedAt: nowIso(),\n  } as SessionCheckpoint;\n  await saveCheckpoint(cliHome, updated, { overwrite: true });\n  return updated;\n}\n\nexport async function exportCheckpoint(\n  cliHome: string,\n  profile: string,\n  sessionId: string,\n  outPath: string,\n): Promise<string> {\n  const checkpoint = await loadCheckpoint(cliHome, profile, sessionId);\n  let target = path.resolve(outPath);\n  const normalizedOut = outPath.replace(/\\\\/g, \"/\");\n  if (normalizedOut.endsWith(\"/\")) {\n    target = path.join(target, `session-${checkpoint.id}.json`);\n  } else {\n    try {\n      const info = await stat(target);\n      if (info.isDirectory()) {\n        target = path.join(target, `session-${checkpoint.id}.json`);\n      }\n    } catch (error) {\n      if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n        throw error;\n      }\n    }\n  }\n  await writeJsonAtomic(target, checkpoint);\n  return target;\n}\n\nexport async function importCheckpoint(\n  cliHome: string,\n  profile: string,\n  sourcePath: string,\n  options: { sessionId?: string } = {},\n): Promise<SessionCheckpoint> {\n  const resolvedSource = path.resolve(sourcePath);\n  let sourceInfo;\n  try {\n    sourceInfo = await stat(resolvedSource);\n  } catch (error) {\n    if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n      throw new SessionStoreError(`Checkpoint file does not exist: ${resolvedSource}`, \"io\");\n    }\n    throw error;\n  }\n  if (!sourceInfo.isFile()) {\n    throw new SessionStoreError(`Checkpoint path is not a file: ${resolvedSource}`, \"io\");\n  }\n\n  const checkpoint = await readCheckpointFile(resolvedSource);\n  if (checkpoint.profile !== profile) {\n    throw new SessionStoreError(\n      `Checkpoint profile is \"${checkpoint.profile}\", selected profile is \"${profile}\".`,\n      \"validation\",\n    );\n  }\n\n  const imported: SessionCheckpoint = options.sessionId\n    ? { ...checkpoint, id: validateSessionId(options.sessionId), updatedAt: nowIso() }\n    : checkpoint;\n\n  await saveCheckpoint(cliHome, imported, { overwrite: true });\n  return imported;\n}\n","import path from \"node:path\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport type { CliEnv, ProfileConfig, StoredTokens, TokenStoreFile, TokenStorePolicy } from \"./types\";\n\nexport const TOKENS_FILE_NAME = \"tokens.json\";\nexport const DEFAULT_ACCESS_TOKEN_ENV = \"KSEF_ACCESS_TOKEN\";\nexport const DEFAULT_REFRESH_TOKEN_ENV = \"KSEF_REFRESH_TOKEN\";\nexport const DEFAULT_KSEF_TOKEN_ENV = \"KSEF_TOKEN\";\n\nexport interface ResolvedTokenStore {\n  policy: TokenStorePolicy;\n  filePath: string;\n  accessTokenEnvVar: string;\n  refreshTokenEnvVar: string;\n  ksefTokenEnvVar: string;\n}\n\nexport function resolveTokenStore(profile: ProfileConfig, cliHome: string): ResolvedTokenStore {\n  const tokenStore = profile.tokenStore;\n  return {\n    policy: tokenStore?.policy ?? \"plaintext\",\n    filePath: tokenStore?.filePath\n      ? path.resolve(tokenStore.filePath)\n      : path.join(cliHome, TOKENS_FILE_NAME),\n    accessTokenEnvVar: tokenStore?.accessTokenEnvVar ?? DEFAULT_ACCESS_TOKEN_ENV,\n    refreshTokenEnvVar: tokenStore?.refreshTokenEnvVar ?? DEFAULT_REFRESH_TOKEN_ENV,\n    ksefTokenEnvVar: tokenStore?.ksefTokenEnvVar ?? DEFAULT_KSEF_TOKEN_ENV,\n  };\n}\n\nexport async function loadStoredTokens(\n  profileName: string,\n  tokenStore: ResolvedTokenStore,\n  env: CliEnv,\n): Promise<StoredTokens | null> {\n  if (tokenStore.policy === \"env\") {\n    const accessToken = env[tokenStore.accessTokenEnvVar]?.trim();\n    if (!accessToken) {\n      return null;\n    }\n    const refreshToken = env[tokenStore.refreshTokenEnvVar]?.trim();\n    return {\n      accessToken,\n      ...(refreshToken ? { refreshToken } : {}),\n      updatedAt: new Date().toISOString(),\n    };\n  }\n\n  const file = await readTokenFile(tokenStore.filePath);\n  return file.profiles[profileName] ?? null;\n}\n\nexport async function saveStoredTokens(\n  profileName: string,\n  tokenStore: ResolvedTokenStore,\n  tokens: StoredTokens,\n): Promise<boolean> {\n  if (tokenStore.policy === \"env\") {\n    return false;\n  }\n\n  const file = await readTokenFile(tokenStore.filePath);\n  file.profiles[profileName] = tokens;\n  await writeTokenFile(tokenStore.filePath, file);\n  return true;\n}\n\nexport async function clearStoredTokens(\n  profileName: string,\n  tokenStore: ResolvedTokenStore,\n): Promise<boolean> {\n  if (tokenStore.policy === \"env\") {\n    return false;\n  }\n\n  const file = await readTokenFile(tokenStore.filePath);\n  if (!(profileName in file.profiles)) {\n    return true;\n  }\n  delete file.profiles[profileName];\n  await writeTokenFile(tokenStore.filePath, file);\n  return true;\n}\n\nexport function formatTokenStoreWarning(profileName: string, tokenStore: ResolvedTokenStore): string | null {\n  if (tokenStore.policy !== \"plaintext\") {\n    return null;\n  }\n  return `Warning: profile \"${profileName}\" stores access tokens in plaintext at ${tokenStore.filePath}.`;\n}\n\nasync function readTokenFile(filePath: string): Promise<TokenStoreFile> {\n  try {\n    const raw = await readFile(filePath, \"utf8\");\n    const parsed = JSON.parse(raw) as Partial<TokenStoreFile>;\n    if (!parsed || typeof parsed !== \"object\") {\n      return { version: 1, profiles: {} };\n    }\n    const profiles = parsed.profiles && typeof parsed.profiles === \"object\" ? parsed.profiles : {};\n    return {\n      version: 1,\n      profiles: profiles as Record<string, StoredTokens>,\n    };\n  } catch (error) {\n    if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n      return { version: 1, profiles: {} };\n    }\n    throw error;\n  }\n}\n\nasync function writeTokenFile(filePath: string, data: TokenStoreFile): Promise<void> {\n  await mkdir(path.dirname(filePath), { recursive: true });\n  await writeFile(filePath, JSON.stringify(data, null, 2), \"utf8\");\n}\n","import path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { mkdir, readdir, readFile, stat, writeFile } from \"node:fs/promises\";\nimport {\n  CryptographyService,\n  KsefApiError,\n  KsefClient,\n  KsefError,\n  KSEF_LIGHTHOUSE_URLS,\n  KsefSessionExpiredError,\n  KsefValidationError,\n  parseUpoXml,\n  type ContextIdentifier,\n  type KsefEnvironment,\n  type KsefLighthouseEnvironment,\n  type InvoiceQueryFilters,\n  type JsonValue,\n  type SessionStatusResponse,\n  createZip,\n} from \"../index\";\nimport {\n  getBooleanOption,\n  getNumberOption,\n  getStringListOption,\n  getStringOption,\n  parseArgv,\n  type CliOptions,\n} from \"./args\";\nimport {\n  PAGE_SIZE_INVOICES_MAX,\n  PAGE_SIZE_MAX,\n  PAGE_SIZE_MIN,\n} from \"../utils/collectiveIdentifier\";\nimport {\n  createDefaultConfig,\n  getConfigPath,\n  getProfile,\n  readConfig,\n  resolveBaseUrl,\n  resolveCliHome,\n  writeConfig,\n} from \"./configStore\";\nimport { parseFormCode } from \"./formCodes\";\nimport {\n  type BatchPayloadSource,\n  type BatchSessionCheckpoint,\n  type OnlineSessionCheckpoint,\n  type SessionCheckpoint,\n  SessionStoreError,\n  deleteCheckpoint,\n  deserializeBatchSessionState,\n  deserializeOnlineSessionState,\n  exportCheckpoint,\n  importCheckpoint,\n  listCheckpoints,\n  loadCheckpoint,\n  saveCheckpoint,\n  serializeBatchSessionState,\n  serializeOnlineSessionState,\n  summarizeCheckpoint,\n  updateCheckpoint,\n  validateSessionId,\n} from \"./sessionStore\";\nimport {\n  clearStoredTokens,\n  formatTokenStoreWarning,\n  loadStoredTokens,\n  resolveTokenStore,\n  saveStoredTokens,\n} from \"./tokenStore\";\nimport type { CliConfigFile, CliEnv, CliJson, ProfileConfig, StoredTokens } from \"./types\";\n\nconst EXIT_SUCCESS = 0;\nconst EXIT_USAGE = 2;\nconst EXIT_CONFIG = 3;\nconst EXIT_AUTH = 4;\nconst EXIT_REMOTE = 5;\nconst EXIT_UNEXPECTED = 1;\n\ninterface CliIo {\n  stdout: (message: string) => void;\n  stderr: (message: string) => void;\n}\n\ninterface RunCliOptions {\n  env?: CliEnv;\n  cwd?: string;\n  io?: CliIo;\n  fetchImpl?: typeof fetch;\n}\n\ninterface CommandContext {\n  env: CliEnv;\n  cwd: string;\n  cliHome: string;\n  json: boolean;\n  io: CliIo;\n  fetchImpl: typeof fetch;\n}\n\nclass CliError extends Error {\n  readonly exitCode: number;\n\n  constructor(message: string, exitCode = EXIT_USAGE) {\n    super(message);\n    this.exitCode = exitCode;\n    this.name = \"CliError\";\n  }\n}\n\nexport async function runCli(argv: string[], options: RunCliOptions = {}): Promise<number> {\n  const parsed = parseArgv(argv);\n  const env = options.env ?? process.env;\n  const cwd = options.cwd ?? process.cwd();\n  const io: CliIo = options.io ?? {\n    stdout: (message: string) => {\n      process.stdout.write(`${message}\\n`);\n    },\n    stderr: (message: string) => {\n      process.stderr.write(`${message}\\n`);\n    },\n  };\n\n  const context: CommandContext = {\n    env,\n    cwd,\n    cliHome: resolveCliHome(env),\n    json: parsed.json,\n    io,\n    fetchImpl: options.fetchImpl ?? fetch,\n  };\n\n  try {\n    const [command, ...rest] = parsed.positionals;\n    if (!command || parsed.help) {\n      emit(context, helpText());\n      return EXIT_SUCCESS;\n    }\n\n    switch (command) {\n      case \"init\": {\n        const result = await runInit(rest, parsed.options, context);\n        emit(context, result);\n        return EXIT_SUCCESS;\n      }\n      case \"profile\": {\n        const result = await runProfile(rest, parsed.options, context);\n        emit(context, result);\n        return EXIT_SUCCESS;\n      }\n      case \"auth\": {\n        const result = await runAuth(rest, parsed.options, context);\n        emit(context, result);\n        return EXIT_SUCCESS;\n      }\n      case \"health\": {\n        const result = await runHealth(parsed.options, context);\n        emit(context, result);\n        return EXIT_SUCCESS;\n      }\n      case \"lighthouse\": {\n        const result = await runLighthouse(parsed.options, context);\n        emit(context, result);\n        return EXIT_SUCCESS;\n      }\n      case \"iz\": {\n        const result = await runIz(rest, parsed.options, context);\n        emit(context, result);\n        return EXIT_SUCCESS;\n      }\n      case \"invoice\": {\n        const result = await runInvoice(rest, parsed.options, context);\n        emit(context, result);\n        return EXIT_SUCCESS;\n      }\n      case \"send\": {\n        const result = await runSend(parsed.options, context);\n        emit(context, result);\n        return EXIT_SUCCESS;\n      }\n      case \"session\": {\n        const result = await runSession(rest, parsed.options, context);\n        emit(context, toJsonValue(result));\n        return EXIT_SUCCESS;\n      }\n      case \"upo\": {\n        const result = await runUpo(rest, parsed.options, context);\n        emit(context, result);\n        return EXIT_SUCCESS;\n      }\n      case \"export\": {\n        const result = await runExport(parsed.options, context);\n        emit(context, result);\n        return EXIT_SUCCESS;\n      }\n      default:\n        throw new CliError(\n          `Unknown command \"${command}\". Use --help to list commands.`,\n          EXIT_USAGE,\n        );\n    }\n  } catch (error) {\n    const normalized = normalizeError(error);\n    emitError(context, normalized);\n    return normalized.exitCode;\n  }\n}\n\nasync function runInit(\n  _positionals: string[],\n  options: CliOptions,\n  context: CommandContext,\n): Promise<CliJson> {\n  const config = await readConfig(context.cliHome);\n  const requestedProfile = getStringOption(options, \"profile\");\n  const profileName = requestedProfile === undefined ? config.currentProfile : requestedProfile;\n  const current = config.profiles[profileName] ?? {};\n  const updated = applyProfilePatch(current, options);\n\n  config.profiles[profileName] = updated;\n  config.currentProfile = profileName;\n  await writeConfig(context.cliHome, config);\n\n  const warning = formatTokenStoreWarning(profileName, resolveTokenStore(updated, context.cliHome));\n  if (warning) {\n    context.io.stderr(warning);\n  }\n\n  return {\n    ok: true,\n    configPath: getConfigPath(context.cliHome),\n    profile: profileName,\n    activeProfile: config.currentProfile,\n    profileConfig: toJsonValue(updated),\n  };\n}\n\nasync function runProfile(\n  positionals: string[],\n  options: CliOptions,\n  context: CommandContext,\n): Promise<CliJson> {\n  const [subcommand, ...rest] = positionals;\n  const config = await readConfig(context.cliHome);\n\n  if (!subcommand || subcommand === \"show\") {\n    const requestedName = rest[0] ?? getStringOption(options, \"profile\");\n    const [profileName, profile] = getProfile(config, requestedName);\n    return {\n      profile: profileName,\n      activeProfile: config.currentProfile,\n      configPath: getConfigPath(context.cliHome),\n      profileConfig: toJsonValue(profile),\n    };\n  }\n\n  if (subcommand === \"list\") {\n    const names = Object.keys(config.profiles).sort();\n    return {\n      profiles: names,\n      activeProfile: config.currentProfile,\n    };\n  }\n\n  if (subcommand === \"use\") {\n    const profileName = rest[0];\n    if (!profileName) {\n      throw new CliError(\"profile use requires profile name.\");\n    }\n    if (!config.profiles[profileName]) {\n      throw new CliError(`Profile \"${profileName}\" does not exist.`, EXIT_CONFIG);\n    }\n    config.currentProfile = profileName;\n    await writeConfig(context.cliHome, config);\n    return {\n      ok: true,\n      activeProfile: profileName,\n    };\n  }\n\n  if (subcommand === \"set\") {\n    const profileName = rest[0];\n    if (!profileName) {\n      throw new CliError(\"profile set requires profile name.\");\n    }\n    const current = config.profiles[profileName] ?? {};\n    const updated = applyProfilePatch(current, options);\n    config.profiles[profileName] = updated;\n    await writeConfig(context.cliHome, config);\n\n    const warning = formatTokenStoreWarning(\n      profileName,\n      resolveTokenStore(updated, context.cliHome),\n    );\n    if (warning) {\n      context.io.stderr(warning);\n    }\n\n    return {\n      ok: true,\n      profile: profileName,\n      profileConfig: toJsonValue(updated),\n    };\n  }\n\n  throw new CliError(`Unknown profile subcommand \"${subcommand}\".`);\n}\n\nasync function runAuth(\n  positionals: string[],\n  options: CliOptions,\n  context: CommandContext,\n): Promise<CliJson> {\n  const [subcommand] = positionals;\n  if (!subcommand) {\n    throw new CliError(\"auth requires subcommand: login | refresh | status | logout.\");\n  }\n\n  const loaded = await loadProfileContext(options, context);\n  const { profileName, profile } = loaded;\n  const tokenStore = resolveTokenStore(profile, context.cliHome);\n  const client = createClient(profile);\n\n  if (subcommand === \"login\") {\n    const token =\n      getStringOption(options, \"token\") ?? context.env[tokenStore.ksefTokenEnvVar]?.trim();\n    if (!token) {\n      throw new CliError(\n        `Missing KSeF token. Use --token or set ${tokenStore.ksefTokenEnvVar}.`,\n        EXIT_AUTH,\n      );\n    }\n\n    const contextIdentifier = resolveContextIdentifier(profile, options);\n    const tokens = await client.workflows.auth.authenticateWithKsefToken({\n      token,\n      context: contextIdentifier,\n    });\n\n    const stored = await saveStoredTokens(profileName, tokenStore, {\n      accessToken: tokens.accessToken.token,\n      accessTokenValidUntil: tokens.accessToken.validUntil,\n      refreshToken: tokens.refreshToken.token,\n      refreshTokenValidUntil: tokens.refreshToken.validUntil,\n      updatedAt: new Date().toISOString(),\n    });\n\n    const warning = formatTokenStoreWarning(profileName, tokenStore);\n    if (warning) {\n      context.io.stderr(warning);\n    }\n\n    return {\n      ok: true,\n      profile: profileName,\n      tokenStorePolicy: tokenStore.policy,\n      stored,\n      accessTokenValidUntil: tokens.accessToken.validUntil,\n      refreshTokenValidUntil: tokens.refreshToken.validUntil,\n      context: toJsonValue(contextIdentifier),\n    };\n  }\n\n  if (subcommand === \"refresh\") {\n    const stored = await loadStoredTokens(profileName, tokenStore, context.env);\n    if (!stored?.refreshToken) {\n      throw new CliError(\"Refresh token not available for this profile.\", EXIT_AUTH);\n    }\n\n    const refreshed = await client.auth.refreshAccessToken(stored.refreshToken);\n    const saved = await saveStoredTokens(profileName, tokenStore, {\n      accessToken: refreshed.accessToken.token,\n      accessTokenValidUntil: refreshed.accessToken.validUntil,\n      refreshToken: stored.refreshToken,\n      ...(stored.refreshTokenValidUntil\n        ? { refreshTokenValidUntil: stored.refreshTokenValidUntil }\n        : {}),\n      updatedAt: new Date().toISOString(),\n    });\n\n    const warning = formatTokenStoreWarning(profileName, tokenStore);\n    if (warning) {\n      context.io.stderr(warning);\n    }\n\n    return {\n      ok: true,\n      profile: profileName,\n      tokenStorePolicy: tokenStore.policy,\n      stored: saved,\n      accessTokenValidUntil: refreshed.accessToken.validUntil,\n    };\n  }\n\n  if (subcommand === \"status\") {\n    const authClient = await createAuthenticatedClient(profileName, profile, context);\n    const sessions = await authClient.activeSessions.listActiveSessions(\n      getNumberOption(options, \"page-size\"),\n    );\n    return {\n      ok: true,\n      profile: profileName,\n      activeSessions: toJsonValue(sessions),\n    };\n  }\n\n  if (subcommand === \"logout\") {\n    const cleared = await clearStoredTokens(profileName, tokenStore);\n    return {\n      ok: true,\n      profile: profileName,\n      tokenStorePolicy: tokenStore.policy,\n      cleared,\n    };\n  }\n\n  throw new CliError(`Unknown auth subcommand \"${subcommand}\".`);\n}\n\nasync function runHealth(options: CliOptions, context: CommandContext): Promise<CliJson> {\n  const loaded = await loadProfileContext(options, context);\n  const client = createClient(loaded.profile);\n\n  const challengeStartedAt = Date.now();\n  const challenge = await client.auth.getChallenge();\n  const challengeLatencyMs = Date.now() - challengeStartedAt;\n\n  const certStartedAt = Date.now();\n  const certificates = await client.security.getPublicKeyCertificates();\n  const certLatencyMs = Date.now() - certStartedAt;\n\n  const withAuth = getBooleanOption(options, \"with-auth\");\n  let rateLimits: JsonValue | undefined;\n\n  if (withAuth) {\n    const authClient = await createAuthenticatedClient(loaded.profileName, loaded.profile, context);\n    rateLimits = toJsonValue(await authClient.limits.getRateLimits());\n  }\n\n  return {\n    ok: true,\n    profile: loaded.profileName,\n    baseUrl: resolveBaseUrl(loaded.profile),\n    challengeLatencyMs,\n    challengeTimestamp: challenge.timestamp,\n    publicCertificates: certificates.length,\n    certificatesLatencyMs: certLatencyMs,\n    ...(rateLimits !== undefined ? { rateLimits } : {}),\n  };\n}\n\nasync function runLighthouse(options: CliOptions, context: CommandContext): Promise<CliJson> {\n  const loaded = await loadProfileContext(options, context);\n  const environment = resolveLighthouseEnvironment(loaded.profile, options);\n  const baseUrl = KSEF_LIGHTHOUSE_URLS[environment];\n  const candidates = [\"/api/status\", \"/status\", \"/api/v1/status\"];\n  const errors: string[] = [];\n\n  for (const candidate of candidates) {\n    const url = `${baseUrl}${candidate}`;\n    try {\n      const startedAt = Date.now();\n      const response = await context.fetchImpl(url, {\n        method: \"GET\",\n        headers: {\n          Accept: \"application/json\",\n        },\n      });\n      const elapsedMs = Date.now() - startedAt;\n      if (!response.ok) {\n        errors.push(`${url} => HTTP ${response.status}`);\n        continue;\n      }\n      const payload = (await response.json()) as Record<string, JsonValue>;\n      return {\n        ok: true,\n        environment,\n        url,\n        responseTimeMs: elapsedMs,\n        lighthouse: toJsonValue(payload),\n      };\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error);\n      errors.push(`${url} => ${message}`);\n    }\n  }\n\n  throw new CliError(`Failed to query lighthouse endpoint. ${errors.join(\"; \")}`, EXIT_REMOTE);\n}\n\nfunction rethrowIzValidation(error: unknown): never {\n  if (\n    error instanceof Error &&\n    !(error instanceof CliError) &&\n    !(error instanceof KsefError) &&\n    !(error instanceof KsefApiError)\n  ) {\n    throw new CliError(error.message, EXIT_USAGE);\n  }\n  throw error;\n}\n\nfunction resolveIzPageSize(options: CliOptions, maximum: number): number {\n  const pageSize = getNumberOption(options, \"page-size\") ?? PAGE_SIZE_MIN;\n  if (pageSize < PAGE_SIZE_MIN || pageSize > maximum) {\n    throw new CliError(`--page-size must be between ${PAGE_SIZE_MIN} and ${maximum}.`, EXIT_USAGE);\n  }\n  return pageSize;\n}\n\nasync function createIzClient(\n  options: CliOptions,\n  context: CommandContext,\n): Promise<{ profileName: string; client: KsefClient }> {\n  const loaded = await loadProfileContext(options, context);\n  const baseUrl = getStringOption(options, \"base-url\");\n  const client = baseUrl\n    ? await createAuthenticatedClientForBaseUrl(\n        loaded.profileName,\n        loaded.profile,\n        baseUrl,\n        context,\n      )\n    : await createAuthenticatedClient(loaded.profileName, loaded.profile, context);\n  return { profileName: loaded.profileName, client };\n}\n\nasync function readKsefNumbersFile(filePath: string, cwd: string): Promise<string[]> {\n  const absolute = path.resolve(cwd, filePath);\n  const raw = await readFile(absolute, \"utf8\");\n  return raw\n    .split(/\\r?\\n/u)\n    .map((line) => line.trim())\n    .filter((line) => line.length > 0 && !line.startsWith(\"#\"));\n}\n\nasync function runIz(\n  positionals: string[],\n  options: CliOptions,\n  context: CommandContext,\n): Promise<CliJson> {\n  const [subcommand] = positionals;\n  if (!subcommand) {\n    throw new CliError(\"iz requires subcommand: generate | query | invoices | by-ksef.\");\n  }\n\n  if (subcommand === \"generate\") {\n    const fromFile = getStringOption(options, \"from-file\");\n    const numbers = [...getStringListOption(options, \"ksef-number\")];\n    if (fromFile) {\n      numbers.push(...(await readKsefNumbersFile(fromFile, context.cwd)));\n    }\n    if (numbers.length === 0) {\n      throw new CliError(\"iz generate requires --ksef-number and/or --from-file.\");\n    }\n    try {\n      const { client } = await createIzClient(options, context);\n      const response = await client.collectiveIdentifiers.generateForKsefNumbers(numbers);\n      return toJsonValue(response);\n    } catch (error) {\n      rethrowIzValidation(error);\n    }\n  }\n\n  if (subcommand === \"query\") {\n    const dateFrom = getStringOption(options, \"from\");\n    const dateTo = getStringOption(options, \"to\");\n    if (!dateFrom || !dateTo) {\n      throw new CliError(\"iz query requires --from and --to.\");\n    }\n    const pageSize = resolveIzPageSize(options, PAGE_SIZE_MAX);\n    const fetchAll = getBooleanOption(options, \"all\");\n    const izNumber = getStringOption(options, \"iz\");\n    try {\n      const { client } = await createIzClient(options, context);\n      const request = {\n        dateCreatedFrom: dateFrom,\n        dateCreatedTo: dateTo,\n        ...(izNumber ? { collectiveIdentifierNumber: izNumber } : {}),\n      };\n      if (fetchAll) {\n        const items = [];\n        for await (const item of client.collectiveIdentifiers.iterQuery(request, { pageSize })) {\n          items.push(item);\n        }\n        return {\n          count: items.length,\n          items: toJsonValue(items),\n          continuationToken: \"\",\n        };\n      }\n      const response = await client.collectiveIdentifiers.queryByCreatedRange(dateFrom, dateTo, {\n        pageSize,\n        ...(izNumber ? { collectiveIdentifierNumber: izNumber } : {}),\n      });\n      return {\n        count: response.collectiveIdentifiers.length,\n        items: toJsonValue(response.collectiveIdentifiers),\n        continuationToken: response.continuationToken ?? \"\",\n      };\n    } catch (error) {\n      rethrowIzValidation(error);\n    }\n  }\n\n  if (subcommand === \"invoices\") {\n    const izNumbers = getStringListOption(options, \"iz\");\n    if (izNumbers.length === 0) {\n      throw new CliError(\"iz invoices requires --iz at least once.\");\n    }\n    const pageSize = resolveIzPageSize(options, PAGE_SIZE_INVOICES_MAX);\n    const fetchAll = getBooleanOption(options, \"all\");\n    try {\n      const { client } = await createIzClient(options, context);\n      if (fetchAll) {\n        const items = [];\n        for await (const item of client.collectiveIdentifiers.iterInvoices(izNumbers, {\n          pageSize,\n        })) {\n          items.push(item);\n        }\n        return {\n          count: items.length,\n          items: toJsonValue(items),\n          continuationToken: \"\",\n        };\n      }\n      const response = await client.collectiveIdentifiers.listInvoices(izNumbers, { pageSize });\n      return {\n        count: response.invoices.length,\n        items: toJsonValue(response.invoices),\n        continuationToken: response.continuationToken ?? \"\",\n      };\n    } catch (error) {\n      rethrowIzValidation(error);\n    }\n  }\n\n  if (subcommand === \"by-ksef\") {\n    const ksefNumber = getStringOption(options, \"ksef-number\");\n    if (!ksefNumber) {\n      throw new CliError(\"iz by-ksef requires --ksef-number.\");\n    }\n    const pageSize = resolveIzPageSize(options, PAGE_SIZE_MAX);\n    const fetchAll = getBooleanOption(options, \"all\");\n    try {\n      const { client } = await createIzClient(options, context);\n      if (fetchAll) {\n        const items = [];\n        for await (const item of client.collectiveIdentifiers.iterByKsefNumber(ksefNumber, {\n          pageSize,\n        })) {\n          items.push(item);\n        }\n        return {\n          count: items.length,\n          items: toJsonValue(items),\n          continuationToken: \"\",\n        };\n      }\n      const response = await client.collectiveIdentifiers.listByKsefNumber(ksefNumber, {\n        pageSize,\n      });\n      return {\n        count: response.collectiveIdentifiers.length,\n        items: toJsonValue(response.collectiveIdentifiers),\n        continuationToken: response.continuationToken ?? \"\",\n      };\n    } catch (error) {\n      rethrowIzValidation(error);\n    }\n  }\n\n  throw new CliError(`Unknown iz subcommand \"${subcommand}\".`);\n}\n\nasync function runInvoice(\n  positionals: string[],\n  options: CliOptions,\n  context: CommandContext,\n): Promise<CliJson | string> {\n  const [subcommand, ...rest] = positionals;\n  if (!subcommand) {\n    throw new CliError(\"invoice requires subcommand: get | query.\");\n  }\n\n  const loaded = await loadProfileContext(options, context);\n  const client = await createAuthenticatedClient(loaded.profileName, loaded.profile, context);\n\n  if (subcommand === \"get\") {\n    const ksefNumber = rest[0] ?? getStringOption(options, \"ksef-number\");\n    if (!ksefNumber) {\n      throw new CliError(\"invoice get requires KSeF number.\");\n    }\n    const xml = await client.invoices.getInvoice(ksefNumber);\n    const outputFile = getStringOption(options, \"output\");\n    if (outputFile) {\n      await writeOutputFile(outputFile, xml, context.cwd);\n      return {\n        ok: true,\n        ksefNumber,\n        output: path.resolve(context.cwd, outputFile),\n        bytes: Buffer.byteLength(xml, \"utf8\"),\n      };\n    }\n    return context.json\n      ? {\n          ksefNumber,\n          xml,\n        }\n      : xml;\n  }\n\n  if (subcommand === \"query\") {\n    const filtersFile = getStringOption(options, \"filters-file\");\n    if (!filtersFile) {\n      throw new CliError(\"invoice query requires --filters-file.\");\n    }\n    const filters = await readJsonFile<InvoiceQueryFilters>(filtersFile, context.cwd);\n    const metadata = await client.invoices.queryInvoiceMetadata(\n      filters,\n      getNumberOption(options, \"page-offset\"),\n      getNumberOption(options, \"page-size\"),\n      parseSortOrder(getStringOption(options, \"sort-order\")),\n    );\n    return {\n      ok: true,\n      filtersFile: path.resolve(context.cwd, filtersFile),\n      metadata: toJsonValue(metadata),\n    };\n  }\n\n  throw new CliError(`Unknown invoice subcommand \"${subcommand}\".`);\n}\n\nasync function runSend(options: CliOptions, context: CommandContext): Promise<CliJson> {\n  const loaded = await loadProfileContext(options, context);\n  const client = await createAuthenticatedClient(loaded.profileName, loaded.profile, context);\n  const invoiceFile = getStringOption(options, \"invoice-file\");\n  if (!invoiceFile) {\n    throw new CliError(\"send requires --invoice-file.\");\n  }\n\n  const invoiceXml = await readFile(path.resolve(context.cwd, invoiceFile), \"utf8\");\n  const formCode = parseFormCode(getStringOption(options, \"form-code\"));\n  const waitForUpo = getBooleanOption(options, \"wait-upo\");\n  const pollIntervalMs = waitForUpo ? resolvePollIntervalMs(options, 2000) : 2000;\n  const maxAttempts = waitForUpo ? resolveMaxAttempts(options, 60) : 60;\n  const hashOfCorrectedInvoice = getStringOption(options, \"hash-of-corrected-invoice\");\n  const sessionId =\n    getStringOption(options, \"session-id\") ?? getStringOption(options, \"save-session\");\n  const upoOutput = getStringOption(options, \"upo-output\") ?? getStringOption(options, \"save-upo\");\n  const saveUpoOverwrite = getBooleanOption(options, \"save-upo-overwrite\");\n  if (upoOutput && !waitForUpo) {\n    throw new CliError(\"Option --save-upo/--upo-output requires --wait-upo.\");\n  }\n\n  const session = await client.workflows.sessions.online.open({\n    formCode,\n    upoV43: getBooleanOption(options, \"upo-v43\"),\n  });\n  let checkpoint: OnlineSessionCheckpoint | null = null;\n  if (sessionId) {\n    const normalizedSessionId = validateSessionId(sessionId);\n    checkpoint = {\n      schemaVersion: 1,\n      id: normalizedSessionId,\n      profile: loaded.profileName,\n      baseUrl: resolveBaseUrl(loaded.profile),\n      kind: \"online\",\n      createdAt: new Date().toISOString(),\n      updatedAt: new Date().toISOString(),\n      stage: \"opened\",\n      sessionState: serializeOnlineSessionState(session.getState()),\n      lastInvoiceRef: null,\n      sentInvoiceRefs: [],\n    };\n    try {\n      await saveCheckpoint(context.cliHome, checkpoint, { overwrite: false });\n    } catch (error) {\n      await session.close().catch(() => undefined);\n      throw error;\n    }\n  }\n  let closed = false;\n  try {\n    const sendResponse = await session.sendInvoice({\n      invoice: invoiceXml,\n      offlineMode: getBooleanOption(options, \"offline\"),\n      ...(hashOfCorrectedInvoice ? { hashOfCorrectedInvoice } : {}),\n    });\n    if (checkpoint) {\n      checkpoint = (await updateCheckpoint(context.cliHome, checkpoint, {\n        stage: \"invoice_sent\",\n        lastInvoiceRef: sendResponse.referenceNumber,\n        sentInvoiceRefs: [...checkpoint.sentInvoiceRefs, sendResponse.referenceNumber],\n      })) as OnlineSessionCheckpoint;\n    }\n    await session.close();\n    closed = true;\n    if (checkpoint) {\n      checkpoint = (await updateCheckpoint(context.cliHome, checkpoint, {\n        stage: \"closed\",\n      })) as OnlineSessionCheckpoint;\n    }\n\n    let upoXml: string | null = null;\n    let upo: JsonValue | null = null;\n    if (waitForUpo) {\n      upoXml = await session.waitForUpo({ pollIntervalMs, maxAttempts });\n      if (upoXml) {\n        upo = toJsonValue(parseUpoXml(upoXml));\n        if (upoOutput) {\n          await saveOutputFile(upoOutput, upoXml, context.cwd, { overwrite: saveUpoOverwrite });\n        }\n      }\n    }\n\n    return {\n      ok: true,\n      profile: loaded.profileName,\n      sessionReferenceNumber: session.referenceNumber,\n      invoiceReferenceNumber: sendResponse.referenceNumber,\n      waitForUpo,\n      ...(checkpoint ? { sessionId: checkpoint.id } : {}),\n      ...(upoXml ? { upoXml } : {}),\n      ...(upo ? { upo } : {}),\n    };\n  } finally {\n    if (!closed) {\n      await session.close().catch(() => undefined);\n    }\n  }\n}\n\nasync function runSession(\n  positionals: string[],\n  options: CliOptions,\n  context: CommandContext,\n): Promise<unknown> {\n  const [subcommand, ...rest] = positionals;\n  if (!subcommand) {\n    throw new CliError(\n      \"session requires subcommand: list | show | status | export | import | drop | online | batch.\",\n    );\n  }\n\n  if (subcommand === \"online\") {\n    return runSessionOnline(rest, options, context);\n  }\n\n  if (subcommand === \"batch\") {\n    return runSessionBatch(rest, options, context);\n  }\n\n  const loaded = await loadProfileContext(options, context);\n  const profileName = loaded.profileName;\n\n  if (subcommand === \"list\") {\n    const checkpoints = await listCheckpoints(context.cliHome, profileName);\n    return {\n      count: checkpoints.length,\n      items: checkpoints.map((item) => summarizeCheckpoint(item)),\n    };\n  }\n\n  if (subcommand === \"show\") {\n    const sessionId = requireSessionId(options, rest[0]);\n    const checkpoint = await loadCheckpoint(context.cliHome, profileName, sessionId);\n    return {\n      ...summarizeCheckpoint(checkpoint),\n      checkpoint: toJsonValue(checkpoint),\n    };\n  }\n\n  if (subcommand === \"status\") {\n    const sessionId = requireSessionId(options, rest[0]);\n    const invoiceRef = getStringOption(options, \"invoice-ref\");\n    const checkpoint = await loadCheckpoint(context.cliHome, profileName, sessionId);\n    const client = await createAuthenticatedClientForBaseUrl(\n      profileName,\n      loaded.profile,\n      checkpoint.baseUrl,\n      context,\n    );\n    const sessionRef = checkpoint.sessionState.referenceNumber;\n    const status = await client.sessions.getSessionStatus(sessionRef);\n    const payload: Record<string, unknown> = {\n      id: checkpoint.id,\n      kind: checkpoint.kind,\n      stage: checkpoint.stage,\n      sessionRef,\n      status: toJsonValue(status),\n    };\n    if (invoiceRef) {\n      payload.invoiceStatus = toJsonValue(\n        await client.sessions.getSessionInvoiceStatus(sessionRef, invoiceRef),\n      );\n    }\n    return payload;\n  }\n\n  if (subcommand === \"export\") {\n    const sessionId = requireSessionId(options, rest[0]);\n    const out = getStringOption(options, \"out\");\n    if (!out) {\n      throw new CliError(\"session export requires --out.\");\n    }\n    const exportedPath = await exportCheckpoint(context.cliHome, profileName, sessionId, out);\n    return {\n      id: sessionId,\n      profile: profileName,\n      path: exportedPath,\n    };\n  }\n\n  if (subcommand === \"import\") {\n    const sourcePath = getStringOption(options, \"in\");\n    if (!sourcePath) {\n      throw new CliError(\"session import requires --in.\");\n    }\n    const sessionIdOverride = getStringOption(options, \"id\");\n    const imported = await importCheckpoint(context.cliHome, profileName, sourcePath, {\n      ...(sessionIdOverride ? { sessionId: sessionIdOverride } : {}),\n    });\n    return summarizeCheckpoint(imported);\n  }\n\n  if (subcommand === \"drop\") {\n    const sessionId = requireSessionId(options, rest[0]);\n    await deleteCheckpoint(context.cliHome, profileName, sessionId);\n    return {\n      id: sessionId,\n      profile: profileName,\n      deleted: true,\n    };\n  }\n\n  throw new CliError(`Unknown session subcommand \"${subcommand}\".`);\n}\n\nasync function runSessionOnline(\n  positionals: string[],\n  options: CliOptions,\n  context: CommandContext,\n): Promise<unknown> {\n  const [subcommand] = positionals;\n  if (!subcommand) {\n    throw new CliError(\"session online requires subcommand: open | send | close.\");\n  }\n  const loaded = await loadProfileContext(options, context);\n  const profileName = loaded.profileName;\n\n  if (subcommand === \"open\") {\n    const sessionId = requireSessionId(options);\n    const client = await createAuthenticatedClient(profileName, loaded.profile, context);\n    const formCode = parseSessionFormCode(options);\n    const handle = await client.workflows.sessions.online.open({\n      formCode: formCode as never,\n      upoV43: getBooleanOption(options, \"upo-v43\"),\n    });\n\n    const checkpoint: OnlineSessionCheckpoint = {\n      schemaVersion: 1,\n      id: sessionId,\n      profile: profileName,\n      baseUrl: resolveBaseUrl(loaded.profile),\n      kind: \"online\",\n      createdAt: new Date().toISOString(),\n      updatedAt: new Date().toISOString(),\n      stage: \"opened\",\n      sessionState: serializeOnlineSessionState(handle.getState()),\n      lastInvoiceRef: null,\n      sentInvoiceRefs: [],\n    };\n\n    try {\n      await saveCheckpoint(context.cliHome, checkpoint, { overwrite: false });\n    } catch (error) {\n      await handle.close().catch(() => undefined);\n      throw error;\n    }\n\n    return summarizeCheckpoint(checkpoint);\n  }\n\n  if (subcommand === \"send\") {\n    const sessionId = requireSessionId(options);\n    const invoiceFile =\n      getStringOption(options, \"invoice-file\") ?? getStringOption(options, \"invoice\");\n    if (!invoiceFile) {\n      throw new CliError(\"session online send requires --invoice-file.\");\n    }\n    const waitStatus = getBooleanOption(options, \"wait-status\");\n    const waitUpo = getBooleanOption(options, \"wait-upo\");\n    const saveUpo = getStringOption(options, \"save-upo\");\n    const saveUpoOverwrite = getBooleanOption(options, \"save-upo-overwrite\");\n    if (saveUpo && !waitUpo) {\n      throw new CliError(\"Option --save-upo requires --wait-upo.\");\n    }\n    const pollIntervalMs = resolvePollIntervalMs(options, 2000);\n    const maxAttempts = resolveMaxAttempts(options, 60);\n\n    const checkpoint = await requireOnlineCheckpoint(context, profileName, sessionId);\n    ensureCheckpointNotClosed(checkpoint, \"ksef-ts session online send\");\n    const client = await createAuthenticatedClientForBaseUrl(\n      profileName,\n      loaded.profile,\n      checkpoint.baseUrl,\n      context,\n    );\n    const handle = client.workflows.sessions.online.resume(\n      deserializeOnlineSessionState(checkpoint.sessionState),\n    );\n    const invoiceXml = await readFile(path.resolve(context.cwd, invoiceFile), \"utf8\");\n    const sendResponse = await handle.sendInvoice({ invoice: invoiceXml });\n    const invoiceRef = sendResponse.referenceNumber;\n    if (!invoiceRef) {\n      throw new CliError(\"Send response does not contain invoice reference number.\", EXIT_REMOTE);\n    }\n\n    const sentInvoiceRefs = checkpoint.sentInvoiceRefs.includes(invoiceRef)\n      ? [...checkpoint.sentInvoiceRefs]\n      : [...checkpoint.sentInvoiceRefs, invoiceRef];\n    const updated = (await updateCheckpoint(context.cliHome, checkpoint, {\n      stage: \"invoice_sent\",\n      lastInvoiceRef: invoiceRef,\n      sentInvoiceRefs,\n    })) as OnlineSessionCheckpoint;\n\n    const result: Record<string, unknown> = {\n      id: updated.id,\n      sessionRef: updated.sessionState.referenceNumber,\n      invoiceRef,\n      stage: updated.stage,\n    };\n\n    if (waitStatus || waitUpo) {\n      const invoiceStatus = await waitForInvoiceStatus(\n        handle,\n        invoiceRef,\n        pollIntervalMs,\n        maxAttempts,\n      );\n      result.invoiceStatus = toJsonValue(invoiceStatus);\n      result.statusCode = extractStatusCode(invoiceStatus);\n      result.ksefNumber = extractKsefNumber(invoiceStatus) ?? \"\";\n    }\n\n    if (waitUpo) {\n      const upoXml = await waitForInvoiceUpo(handle, invoiceRef, pollIntervalMs, maxAttempts);\n      result.upoBytes = Buffer.byteLength(upoXml, \"utf8\");\n      if (saveUpo) {\n        const outputPath = resolveOutputPath(\n          saveUpo,\n          `upo-${updated.sessionState.referenceNumber}-${invoiceRef}.xml`,\n        );\n        await saveOutputFile(outputPath, upoXml, context.cwd, { overwrite: saveUpoOverwrite });\n        result.upoPath = path.resolve(context.cwd, outputPath);\n      } else {\n        result.upoPath = \"\";\n      }\n    }\n\n    return result;\n  }\n\n  if (subcommand === \"close\") {\n    const sessionId = requireSessionId(options);\n    const checkpoint = await requireOnlineCheckpoint(context, profileName, sessionId);\n    ensureCheckpointNotClosed(checkpoint, \"ksef-ts session online close\");\n    const client = await createAuthenticatedClientForBaseUrl(\n      profileName,\n      loaded.profile,\n      checkpoint.baseUrl,\n      context,\n    );\n    const handle = client.workflows.sessions.online.resume(\n      deserializeOnlineSessionState(checkpoint.sessionState),\n    );\n    await handle.close();\n    const updated = (await updateCheckpoint(context.cliHome, checkpoint, {\n      stage: \"closed\",\n    })) as OnlineSessionCheckpoint;\n    return summarizeCheckpoint(updated);\n  }\n\n  throw new CliError(`Unknown session online subcommand \"${subcommand}\".`);\n}\n\nasync function runSessionBatch(\n  positionals: string[],\n  options: CliOptions,\n  context: CommandContext,\n): Promise<unknown> {\n  const [subcommand] = positionals;\n  if (!subcommand) {\n    throw new CliError(\"session batch requires subcommand: open | upload | close.\");\n  }\n  const loaded = await loadProfileContext(options, context);\n  const profileName = loaded.profileName;\n\n  if (subcommand === \"open\") {\n    const sessionId = requireSessionId(options);\n    const formCode = parseSessionFormCode(options);\n    const { zipBytes, payloadSource } = await buildBatchPayloadSource(context.cwd, options);\n    const client = await createAuthenticatedClient(profileName, loaded.profile, context);\n    const handle = await client.workflows.sessions.batch.open({\n      formCode: formCode as never,\n      zipBytes,\n      upoV43: getBooleanOption(options, \"upo-v43\"),\n    });\n    const checkpoint: BatchSessionCheckpoint = {\n      schemaVersion: 1,\n      id: sessionId,\n      profile: profileName,\n      baseUrl: resolveBaseUrl(loaded.profile),\n      kind: \"batch\",\n      createdAt: new Date().toISOString(),\n      updatedAt: new Date().toISOString(),\n      stage: \"opened\",\n      sessionState: serializeBatchSessionState(handle.getState()),\n      payloadSource,\n      uploadedOrdinals: [],\n      lastUpoRef: null,\n    };\n\n    try {\n      await saveCheckpoint(context.cliHome, checkpoint, { overwrite: false });\n    } catch (error) {\n      await handle.close().catch(() => undefined);\n      throw error;\n    }\n\n    return summarizeCheckpoint(checkpoint);\n  }\n\n  if (subcommand === \"upload\") {\n    const sessionId = requireSessionId(options);\n    const parallelism = getNumberOption(options, \"parallelism\") ?? 4;\n    if (!Number.isInteger(parallelism) || parallelism <= 0) {\n      throw new CliError(\"Invalid --parallelism. It must be a positive integer.\");\n    }\n    let checkpoint = await requireBatchCheckpoint(context, profileName, sessionId);\n    ensureCheckpointNotClosed(checkpoint, \"ksef-ts session batch upload\");\n\n    const client = await createAuthenticatedClientForBaseUrl(\n      profileName,\n      loaded.profile,\n      checkpoint.baseUrl,\n      context,\n    );\n    const zipBytes = await loadBatchPayloadSourceBytes(checkpoint.payloadSource, context.cwd);\n    const uploaded = new Set<number>(checkpoint.uploadedOrdinals);\n    const state = deserializeBatchSessionState(checkpoint.sessionState);\n    const totalParts = state.partUploadRequests.length;\n    if (uploaded.size >= totalParts && totalParts > 0) {\n      return {\n        ...summarizeCheckpoint(checkpoint),\n        uploadedCount: uploaded.size,\n        totalParts,\n      };\n    }\n    const handle = await client.workflows.sessions.batch.resume(state, { zipBytes });\n    let updateQueue = Promise.resolve();\n    await handle.uploadParts({\n      parallelism,\n      skipOrdinals: [...uploaded],\n      progressCallback: (ordinalNumber) => {\n        updateQueue = updateQueue.then(async () => {\n          if (!uploaded.has(ordinalNumber)) {\n            uploaded.add(ordinalNumber);\n            checkpoint = (await updateCheckpoint(context.cliHome, checkpoint, {\n              stage: \"uploading\",\n              uploadedOrdinals: [...uploaded].sort((a, b) => a - b),\n            })) as BatchSessionCheckpoint;\n          }\n        });\n        return updateQueue;\n      },\n    });\n    await updateQueue;\n    checkpoint = (await updateCheckpoint(context.cliHome, checkpoint, {\n      stage: \"uploaded\",\n      uploadedOrdinals: [...uploaded].sort((a, b) => a - b),\n    })) as BatchSessionCheckpoint;\n\n    return {\n      ...summarizeCheckpoint(checkpoint),\n      uploadedCount: checkpoint.uploadedOrdinals.length,\n      totalParts,\n    };\n  }\n\n  if (subcommand === \"close\") {\n    const sessionId = requireSessionId(options);\n    const waitStatus = getBooleanOption(options, \"wait-status\");\n    const waitUpo = getBooleanOption(options, \"wait-upo\");\n    const saveUpo = getStringOption(options, \"save-upo\");\n    const saveUpoOverwrite = getBooleanOption(options, \"save-upo-overwrite\");\n    if (saveUpo && !waitUpo) {\n      throw new CliError(\"Option --save-upo requires --wait-upo.\");\n    }\n    const pollIntervalMs = resolvePollIntervalMs(options, 2000);\n    const maxAttempts = resolveMaxAttempts(options, 120);\n\n    let checkpoint = await requireBatchCheckpoint(context, profileName, sessionId);\n    if (checkpoint.stage === \"closed\" && !waitStatus && !waitUpo) {\n      return summarizeCheckpoint(checkpoint);\n    }\n    const client = await createAuthenticatedClientForBaseUrl(\n      profileName,\n      loaded.profile,\n      checkpoint.baseUrl,\n      context,\n    );\n    if (checkpoint.stage !== \"closed\") {\n      const zipBytes = await loadBatchPayloadSourceBytes(checkpoint.payloadSource, context.cwd);\n      const handle = await client.workflows.sessions.batch.resume(\n        deserializeBatchSessionState(checkpoint.sessionState),\n        { zipBytes },\n      );\n      await handle.close();\n      checkpoint = (await updateCheckpoint(context.cliHome, checkpoint, {\n        stage: \"closed\",\n      })) as BatchSessionCheckpoint;\n    }\n\n    const result: Record<string, unknown> = {\n      ...summarizeCheckpoint(checkpoint),\n    };\n\n    if (waitStatus || waitUpo) {\n      const status = await waitForSessionStatus(\n        () => client.sessions.getSessionStatus(checkpoint.sessionState.referenceNumber),\n        pollIntervalMs,\n        maxAttempts,\n      );\n      result.status = toJsonValue(status);\n      result.statusCode = extractStatusCode(status);\n      const upoRef = status.upo?.pages?.[0]?.referenceNumber ?? \"\";\n      if (upoRef) {\n        checkpoint = (await updateCheckpoint(context.cliHome, checkpoint, {\n          lastUpoRef: upoRef,\n        })) as BatchSessionCheckpoint;\n      }\n      result.upoRef = upoRef;\n      if (waitUpo) {\n        if (!upoRef) {\n          throw new CliError(\n            \"UPO reference number is not available in session status.\",\n            EXIT_REMOTE,\n          );\n        }\n        const upoXml = await client.sessions.getSessionUpo(\n          checkpoint.sessionState.referenceNumber,\n          upoRef,\n        );\n        result.upoBytes = Buffer.byteLength(upoXml, \"utf8\");\n        if (saveUpo) {\n          const outputPath = resolveOutputPath(\n            saveUpo,\n            `upo-${checkpoint.sessionState.referenceNumber}-${upoRef}.xml`,\n          );\n          await saveOutputFile(outputPath, upoXml, context.cwd, { overwrite: saveUpoOverwrite });\n          result.upoPath = path.resolve(context.cwd, outputPath);\n        } else {\n          result.upoPath = \"\";\n        }\n      }\n    }\n\n    return result;\n  }\n\n  throw new CliError(`Unknown session batch subcommand \"${subcommand}\".`);\n}\n\nasync function runUpo(\n  positionals: string[],\n  options: CliOptions,\n  context: CommandContext,\n): Promise<CliJson | string> {\n  const loaded = await loadProfileContext(options, context);\n  const client = await createAuthenticatedClient(loaded.profileName, loaded.profile, context);\n  const command = positionals[0];\n  if (command && command !== \"get\") {\n    throw new CliError(`Unknown upo subcommand \"${command}\". Use \"upo get\".`);\n  }\n\n  const sessionReference = positionals[1] ?? getStringOption(options, \"session-ref\");\n  if (!sessionReference) {\n    throw new CliError(\"upo get requires --session-ref (or positional session reference).\");\n  }\n\n  const invoiceReference = getStringOption(options, \"invoice-ref\");\n  const ksefNumber = getStringOption(options, \"ksef-number\");\n  const upoReference = getStringOption(options, \"upo-ref\");\n\n  const provided = [invoiceReference, ksefNumber, upoReference].filter(Boolean);\n  if (provided.length !== 1) {\n    throw new CliError(\n      \"upo get requires exactly one selector: --invoice-ref or --ksef-number or --upo-ref.\",\n    );\n  }\n\n  let xml: string;\n  if (invoiceReference) {\n    xml = await client.sessions.getSessionInvoiceUpoByReferenceNumber(\n      sessionReference,\n      invoiceReference,\n    );\n  } else if (ksefNumber) {\n    xml = await client.sessions.getSessionInvoiceUpoByKsefNumber(sessionReference, ksefNumber);\n  } else {\n    xml = await client.sessions.getSessionUpo(sessionReference, upoReference as string);\n  }\n\n  const outputFile = getStringOption(options, \"output\");\n  if (outputFile) {\n    await writeOutputFile(outputFile, xml, context.cwd);\n  }\n\n  if (getBooleanOption(options, \"parse\")) {\n    return {\n      ok: true,\n      sessionReference,\n      ...(outputFile ? { output: path.resolve(context.cwd, outputFile) } : {}),\n      upo: toJsonValue(parseUpoXml(xml)),\n      ...(context.json ? { upoXml: xml } : {}),\n    };\n  }\n\n  if (outputFile) {\n    return {\n      ok: true,\n      sessionReference,\n      output: path.resolve(context.cwd, outputFile),\n      bytes: Buffer.byteLength(xml, \"utf8\"),\n    };\n  }\n\n  return context.json\n    ? {\n        sessionReference,\n        upoXml: xml,\n      }\n    : xml;\n}\n\nasync function runExport(options: CliOptions, context: CommandContext): Promise<CliJson> {\n  const loaded = await loadProfileContext(options, context);\n  const client = await createAuthenticatedClient(loaded.profileName, loaded.profile, context);\n  const filtersFile = getStringOption(options, \"filters-file\");\n  if (!filtersFile) {\n    throw new CliError(\"export requires --filters-file.\");\n  }\n  const filters = await readJsonFile<InvoiceQueryFilters>(filtersFile, context.cwd);\n  const onlyMetadata = getBooleanOption(options, \"only-metadata\");\n\n  const started = await client.workflows.exports.startExport({\n    filters,\n    ...(onlyMetadata ? { onlyMetadata: true } : {}),\n  });\n  const wait = !getBooleanOption(options, \"no-wait\");\n  if (!wait) {\n    return {\n      ok: true,\n      profile: loaded.profileName,\n      referenceNumber: started.referenceNumber,\n      state: \"started\",\n    };\n  }\n\n  const pollIntervalMs = getNumberOption(options, \"poll-interval-ms\");\n  const maxAttempts = getNumberOption(options, \"max-attempts\");\n  const status = await client.workflows.exports.waitForExport(started.referenceNumber, {\n    ...(pollIntervalMs !== undefined ? { pollIntervalMs } : {}),\n    ...(maxAttempts !== undefined ? { maxAttempts } : {}),\n  });\n\n  const noDownload = getBooleanOption(options, \"no-download\");\n  if (noDownload) {\n    return {\n      ok: true,\n      profile: loaded.profileName,\n      referenceNumber: started.referenceNumber,\n      state: \"completed\",\n      status: toJsonValue(status),\n    };\n  }\n\n  const processed = await client.workflows.exports.downloadAndProcessPackage(\n    status,\n    started.encryptionData,\n    {\n      verifyHashes: getBooleanOption(options, \"verify-hashes\"),\n    },\n  );\n\n  const outDir = getStringOption(options, \"out-dir\");\n  let resolvedOutDir: string | undefined;\n  if (outDir) {\n    resolvedOutDir = path.resolve(context.cwd, outDir);\n    await mkdir(resolvedOutDir, { recursive: true });\n    const metadataPath = path.join(resolvedOutDir, \"_metadata.json\");\n    await writeFile(metadataPath, JSON.stringify(processed.metadataSummaries, null, 2), \"utf8\");\n    for (const [name, xml] of Object.entries(processed.invoiceXmlFiles)) {\n      const safeName = path.basename(name);\n      await writeFile(path.join(resolvedOutDir, safeName), xml, \"utf8\");\n    }\n  }\n\n  return {\n    ok: true,\n    profile: loaded.profileName,\n    referenceNumber: started.referenceNumber,\n    state: \"completed\",\n    metadataCount: processed.metadataSummaries.length,\n    invoiceFileCount: Object.keys(processed.invoiceXmlFiles).length,\n    ...(resolvedOutDir ? { outDir: resolvedOutDir } : {}),\n  };\n}\n\nfunction requireSessionId(options: CliOptions, fallback?: string): string {\n  const value = fallback ?? getStringOption(options, \"id\");\n  if (!value) {\n    throw new CliError(\"Missing session id. Use --id <SESSION_ID>.\");\n  }\n  try {\n    return validateSessionId(value);\n  } catch (error) {\n    throw new CliError(formatSessionIdError(error), EXIT_USAGE);\n  }\n}\n\nfunction formatSessionIdError(error: unknown): string {\n  return error instanceof SessionStoreError ? error.message : String(error);\n}\n\nfunction parseSessionFormCode(options: CliOptions): {\n  systemCode: string;\n  schemaVersion: string;\n  value: string;\n} {\n  const formCodeAlias = getStringOption(options, \"form-code\");\n  if (formCodeAlias) {\n    return parseFormCode(formCodeAlias);\n  }\n  return {\n    systemCode: getStringOption(options, \"system-code\") ?? \"FA (3)\",\n    schemaVersion: getStringOption(options, \"schema-version\") ?? \"1-0E\",\n    value: getStringOption(options, \"form-value\") ?? \"FA\",\n  };\n}\n\nfunction resolvePollIntervalMs(options: CliOptions, defaultValue: number): number {\n  const explicitMs = getNumberOption(options, \"poll-interval-ms\");\n  if (explicitMs !== undefined) {\n    if (!Number.isFinite(explicitMs) || explicitMs <= 0) {\n      throw new CliError(\"--poll-interval-ms must be greater than zero.\");\n    }\n    return explicitMs;\n  }\n  const seconds = getNumberOption(options, \"poll-interval\");\n  if (seconds !== undefined) {\n    if (!Number.isFinite(seconds) || seconds <= 0) {\n      throw new CliError(\"--poll-interval must be greater than zero.\");\n    }\n    return Math.max(1, Math.round(seconds * 1000));\n  }\n  return defaultValue;\n}\n\nfunction resolveMaxAttempts(options: CliOptions, defaultValue: number): number {\n  const value = getNumberOption(options, \"max-attempts\");\n  if (value === undefined) {\n    return defaultValue;\n  }\n  if (!Number.isInteger(value) || value <= 0) {\n    throw new CliError(\"--max-attempts must be a positive integer.\");\n  }\n  return value;\n}\n\nfunction ensureCheckpointNotClosed(checkpoint: SessionCheckpoint, commandName: string): void {\n  if (checkpoint.stage === \"closed\") {\n    throw new CliError(\n      `Session checkpoint \"${checkpoint.id}\" is already closed. Open a new one before running \"${commandName}\".`,\n      EXIT_USAGE,\n    );\n  }\n}\n\nasync function requireOnlineCheckpoint(\n  context: CommandContext,\n  profileName: string,\n  sessionId: string,\n): Promise<OnlineSessionCheckpoint> {\n  const checkpoint = await loadCheckpoint(context.cliHome, profileName, sessionId);\n  if (checkpoint.kind !== \"online\") {\n    throw new CliError(\n      `Session checkpoint \"${sessionId}\" is not an online session. Use \"session batch\" commands.`,\n      EXIT_USAGE,\n    );\n  }\n  return checkpoint;\n}\n\nasync function requireBatchCheckpoint(\n  context: CommandContext,\n  profileName: string,\n  sessionId: string,\n): Promise<BatchSessionCheckpoint> {\n  const checkpoint = await loadCheckpoint(context.cliHome, profileName, sessionId);\n  if (checkpoint.kind !== \"batch\") {\n    throw new CliError(\n      `Session checkpoint \"${sessionId}\" is not a batch session. Use \"session online\" commands.`,\n      EXIT_USAGE,\n    );\n  }\n  return checkpoint;\n}\n\nasync function createAuthenticatedClientForBaseUrl(\n  profileName: string,\n  profile: ProfileConfig,\n  baseUrl: string,\n  context: CommandContext,\n): Promise<KsefClient> {\n  const client = createClientForBaseUrl(baseUrl, profile);\n  const tokenStore = resolveTokenStore(profile, context.cliHome);\n  const tokens = await loadStoredTokens(profileName, tokenStore, context.env);\n  if (!tokens?.accessToken) {\n    throw new CliError(\n      `No access token found for profile \"${profileName}\". Run \"ksef-ts auth login\" first.`,\n      EXIT_AUTH,\n    );\n  }\n  applyTokens(client, tokens);\n  const warning = formatTokenStoreWarning(profileName, tokenStore);\n  if (warning) {\n    context.io.stderr(warning);\n  }\n  return client;\n}\n\nasync function buildBatchPayloadSource(\n  cwd: string,\n  options: CliOptions,\n): Promise<{ zipBytes: Buffer; payloadSource: BatchPayloadSource }> {\n  const zipPath = getStringOption(options, \"zip\");\n  const directory = getStringOption(options, \"dir\");\n  const selected = [Boolean(zipPath), Boolean(directory)].filter(Boolean).length;\n  if (selected !== 1) {\n    throw new CliError(\"Select exactly one batch input source: --zip or --dir.\");\n  }\n\n  if (zipPath) {\n    const normalizedPath = path.resolve(cwd, zipPath);\n    const zipBytes = await readFile(normalizedPath);\n    return {\n      zipBytes,\n      payloadSource: {\n        kind: \"zip\",\n        path: normalizedPath,\n        sourceSha256Base64: CryptographyService.sha256Base64(zipBytes),\n        sourceSize: zipBytes.length,\n      },\n    };\n  }\n\n  const normalizedDirectory = path.resolve(cwd, directory as string);\n  const zipBytes = await buildZipFromDirectory(normalizedDirectory);\n  return {\n    zipBytes,\n    payloadSource: {\n      kind: \"directory\",\n      path: normalizedDirectory,\n      sourceSha256Base64: CryptographyService.sha256Base64(zipBytes),\n      sourceSize: zipBytes.length,\n    },\n  };\n}\n\nasync function loadBatchPayloadSourceBytes(\n  source: BatchPayloadSource,\n  cwd: string,\n): Promise<Buffer> {\n  const sourcePath = path.isAbsolute(source.path) ? source.path : path.resolve(cwd, source.path);\n  const zipBytes =\n    source.kind === \"zip\" ? await readFile(sourcePath) : await buildZipFromDirectory(sourcePath);\n  const currentHash = CryptographyService.sha256Base64(zipBytes);\n  if (currentHash !== source.sourceSha256Base64 || zipBytes.length !== source.sourceSize) {\n    throw new CliError(\n      \"Batch payload source changed since checkpoint creation. Restore original source or open new session.\",\n      EXIT_USAGE,\n    );\n  }\n  return zipBytes;\n}\n\nasync function buildZipFromDirectory(directoryPath: string): Promise<Buffer> {\n  const info = await stat(directoryPath);\n  if (!info.isDirectory()) {\n    throw new CliError(`--dir path is not a directory: ${directoryPath}`);\n  }\n  const xmlFiles = await listXmlFilesRecursive(directoryPath);\n  if (xmlFiles.length === 0) {\n    throw new CliError(`No .xml files found in directory: ${directoryPath}`);\n  }\n  const entries = await Promise.all(\n    xmlFiles.map(async (absolutePath) => {\n      const relative = path.relative(directoryPath, absolutePath).replace(/\\\\/g, \"/\");\n      return {\n        fileName: relative,\n        content: await readFile(absolutePath),\n      };\n    }),\n  );\n  return createZip(entries);\n}\n\nasync function listXmlFilesRecursive(directoryPath: string): Promise<string[]> {\n  const out: string[] = [];\n  const entries = await readdir(directoryPath, { withFileTypes: true });\n  for (const entry of entries) {\n    const fullPath = path.join(directoryPath, entry.name);\n    if (entry.isDirectory()) {\n      out.push(...(await listXmlFilesRecursive(fullPath)));\n      continue;\n    }\n    if (entry.isFile() && entry.name.toLowerCase().endsWith(\".xml\")) {\n      out.push(fullPath);\n    }\n  }\n  out.sort((a, b) => a.localeCompare(b));\n  return out;\n}\n\nfunction resolveOutputPath(target: string, defaultFilename: string): string {\n  const normalized = target.replace(/\\\\/g, \"/\");\n  if (normalized.endsWith(\"/\")) {\n    return path.join(target, defaultFilename);\n  }\n  return target;\n}\n\nasync function waitForInvoiceStatus(\n  handle: ReturnType<KsefClient[\"workflows\"][\"sessions\"][\"online\"][\"resume\"]>,\n  invoiceRef: string,\n  pollIntervalMs: number,\n  maxAttempts: number,\n): Promise<Record<string, unknown>> {\n  for (let attempt = 0; attempt < maxAttempts; attempt += 1) {\n    const status = await handle.getInvoiceStatus(invoiceRef);\n    const code = extractStatusCode(status);\n    if (code === 200 || code === 400 || code === 410) {\n      return status;\n    }\n    await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));\n  }\n  throw new CliError(\"Timed out while waiting for invoice status.\", EXIT_REMOTE);\n}\n\nasync function waitForInvoiceUpo(\n  handle: ReturnType<KsefClient[\"workflows\"][\"sessions\"][\"online\"][\"resume\"]>,\n  invoiceRef: string,\n  pollIntervalMs: number,\n  maxAttempts: number,\n): Promise<string> {\n  let lastError: unknown;\n  for (let attempt = 0; attempt < maxAttempts; attempt += 1) {\n    try {\n      return await handle.getInvoiceUpoByReference(invoiceRef);\n    } catch (error) {\n      lastError = error;\n      await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));\n    }\n  }\n  if (lastError instanceof Error) {\n    throw new CliError(\n      `Timed out while waiting for invoice UPO: ${lastError.message}`,\n      EXIT_REMOTE,\n    );\n  }\n  throw new CliError(\"Timed out while waiting for invoice UPO.\", EXIT_REMOTE);\n}\n\nasync function waitForSessionStatus(\n  fetchStatus: () => Promise<SessionStatusResponse>,\n  pollIntervalMs: number,\n  maxAttempts: number,\n): Promise<SessionStatusResponse> {\n  for (let attempt = 0; attempt < maxAttempts; attempt += 1) {\n    const status = await fetchStatus();\n    const code = status.status?.code;\n    if (code === 200 || code === 400 || code === 410) {\n      return status;\n    }\n    await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));\n  }\n  throw new CliError(\"Timed out while waiting for session status.\", EXIT_REMOTE);\n}\n\nfunction extractStatusCode(payload: unknown): number | null {\n  if (!payload || typeof payload !== \"object\") {\n    return null;\n  }\n  const status = (payload as Record<string, unknown>).status;\n  if (!status || typeof status !== \"object\") {\n    return null;\n  }\n  const code = (status as Record<string, unknown>).code;\n  return typeof code === \"number\" ? code : null;\n}\n\nfunction extractKsefNumber(payload: unknown): string | null {\n  if (!payload || typeof payload !== \"object\") {\n    return null;\n  }\n  const direct = (payload as Record<string, unknown>).ksefNumber;\n  if (typeof direct === \"string\" && direct) {\n    return direct;\n  }\n  const invoice = (payload as Record<string, unknown>).invoice;\n  if (invoice && typeof invoice === \"object\") {\n    const nested = (invoice as Record<string, unknown>).ksefNumber;\n    if (typeof nested === \"string\" && nested) {\n      return nested;\n    }\n  }\n  return null;\n}\n\nasync function createAuthenticatedClient(\n  profileName: string,\n  profile: ProfileConfig,\n  context: CommandContext,\n): Promise<KsefClient> {\n  const client = createClient(profile);\n  const tokenStore = resolveTokenStore(profile, context.cliHome);\n  const tokens = await loadStoredTokens(profileName, tokenStore, context.env);\n  if (!tokens?.accessToken) {\n    throw new CliError(\n      `No access token found for profile \"${profileName}\". Run \"ksef-ts auth login\" first.`,\n      EXIT_AUTH,\n    );\n  }\n  applyTokens(client, tokens);\n  const warning = formatTokenStoreWarning(profileName, tokenStore);\n  if (warning) {\n    context.io.stderr(warning);\n  }\n  return client;\n}\n\nfunction applyTokens(client: KsefClient, tokens: StoredTokens): void {\n  if (tokens.refreshToken && tokens.refreshTokenValidUntil) {\n    client.authManager.setTokens({\n      accessToken: {\n        token: tokens.accessToken,\n        validUntil:\n          tokens.accessTokenValidUntil ?? new Date(Date.now() + 3600 * 1000).toISOString(),\n      },\n      refreshToken: {\n        token: tokens.refreshToken,\n        validUntil: tokens.refreshTokenValidUntil,\n      },\n    });\n    return;\n  }\n\n  client.authManager.setAccessToken(tokens.accessToken, tokens.accessTokenValidUntil);\n}\n\nfunction createClient(profile: ProfileConfig): KsefClient {\n  const baseOptions = profile.baseUrl\n    ? { baseUrl: profile.baseUrl }\n    : { environment: profile.environment ?? \"TEST\" };\n\n  return createClientForBaseUrl(\n    \"baseUrl\" in baseOptions ? baseOptions.baseUrl : resolveBaseUrl(profile),\n    profile,\n  );\n}\n\nfunction createClientForBaseUrl(baseUrl: string, profile: ProfileConfig): KsefClient {\n  return new KsefClient({\n    baseUrl,\n    ...(profile.strictPresignedUrlValidation !== undefined && {\n      strictPresignedUrlValidation: profile.strictPresignedUrlValidation,\n    }),\n    ...(profile.allowedPresignedHosts\n      ? { allowedPresignedHosts: profile.allowedPresignedHosts }\n      : {}),\n    ...(profile.allowPrivateNetworkPresignedUrls !== undefined && {\n      allowPrivateNetworkPresignedUrls: profile.allowPrivateNetworkPresignedUrls,\n    }),\n  });\n}\n\nasync function loadProfileContext(\n  options: CliOptions,\n  context: CommandContext,\n): Promise<{ config: CliConfigFile; profileName: string; profile: ProfileConfig }> {\n  const config = await readConfig(context.cliHome);\n  if (Object.keys(config.profiles).length === 0) {\n    const bootstrap = createDefaultConfig();\n    await writeConfig(context.cliHome, bootstrap);\n    config.currentProfile = bootstrap.currentProfile;\n    config.profiles = bootstrap.profiles;\n  }\n  const selectedName = getStringOption(options, \"profile\") ?? config.currentProfile;\n  const selected = config.profiles[selectedName];\n  if (!selected) {\n    throw new CliError(`Profile \"${selectedName}\" not found.`, EXIT_CONFIG);\n  }\n  return {\n    config,\n    profileName: selectedName,\n    profile: selected,\n  };\n}\n\nfunction resolveContextIdentifier(profile: ProfileConfig, options: CliOptions): ContextIdentifier {\n  const contextType = getStringOption(options, \"context-type\");\n  const contextValue = getStringOption(options, \"context-value\");\n  if (contextType && contextValue) {\n    return {\n      type: contextType as ContextIdentifier[\"type\"],\n      value: contextValue,\n    };\n  }\n  if (profile.context?.type && profile.context.value) {\n    return profile.context;\n  }\n  throw new CliError(\n    \"Missing context identifier. Set profile context or pass --context-type and --context-value.\",\n    EXIT_CONFIG,\n  );\n}\n\nfunction resolveLighthouseEnvironment(\n  profile: ProfileConfig,\n  options: CliOptions,\n): KsefLighthouseEnvironment {\n  const explicitLighthouseEnvironmentValue = getStringOption(options, \"lighthouse-env\");\n  if (explicitLighthouseEnvironmentValue !== undefined) {\n    const explicitLighthouseEnvironment = parseLighthouseEnvironment(\n      explicitLighthouseEnvironmentValue,\n    );\n    if (explicitLighthouseEnvironment) {\n      return explicitLighthouseEnvironment;\n    }\n    throw new CliError(\n      `Unsupported --lighthouse-env \"${explicitLighthouseEnvironmentValue}\". Use TEST, PROD or PRD.`,\n      EXIT_USAGE,\n    );\n  }\n\n  const envValue = getStringOption(options, \"env\");\n  if (envValue !== undefined) {\n    const inferredFromEnv = parseLighthouseEnvironment(envValue);\n    if (inferredFromEnv) {\n      return inferredFromEnv;\n    }\n    throw new CliError(`Unsupported --env \"${envValue}\". Use TEST, DEMO or PRD.`, EXIT_USAGE);\n  }\n\n  if (profile.lighthouseEnvironment) {\n    return profile.lighthouseEnvironment;\n  }\n  if (profile.environment === \"PRD\") {\n    return \"PRD\";\n  }\n  return \"TEST\";\n}\n\nfunction parseLighthouseEnvironment(value?: string): KsefLighthouseEnvironment | undefined {\n  const normalized = value?.trim().toUpperCase();\n  if (!normalized) {\n    return undefined;\n  }\n\n  if (normalized === \"DEMO\") {\n    return \"TEST\";\n  }\n\n  if (normalized === \"TEST\" || normalized === \"PROD\" || normalized === \"PRD\") {\n    return normalized;\n  }\n\n  return undefined;\n}\n\nfunction parseSortOrder(value?: string): \"Asc\" | \"Desc\" | undefined {\n  if (!value) {\n    return undefined;\n  }\n  const normalized = value.toLowerCase();\n  if (normalized === \"asc\") {\n    return \"Asc\";\n  }\n  if (normalized === \"desc\") {\n    return \"Desc\";\n  }\n  throw new CliError(`Unsupported sort order \"${value}\". Use Asc or Desc.`);\n}\n\nfunction applyProfilePatch(profile: ProfileConfig, options: CliOptions): ProfileConfig {\n  const updated: ProfileConfig = {\n    ...profile,\n    ...(profile.tokenStore ? { tokenStore: { ...profile.tokenStore } } : {}),\n  };\n\n  const env = getStringOption(options, \"env\")?.toUpperCase();\n  if (env) {\n    if (env !== \"TEST\" && env !== \"DEMO\" && env !== \"PRD\") {\n      throw new CliError(`Unsupported --env \"${env}\". Use TEST, DEMO or PRD.`);\n    }\n    updated.environment = env as KsefEnvironment;\n  }\n\n  const lighthouseEnv = getStringOption(options, \"lighthouse-env\")?.toUpperCase();\n  if (lighthouseEnv) {\n    if (lighthouseEnv !== \"TEST\" && lighthouseEnv !== \"PROD\" && lighthouseEnv !== \"PRD\") {\n      throw new CliError(`Unsupported --lighthouse-env \"${lighthouseEnv}\". Use TEST, PROD or PRD.`);\n    }\n    updated.lighthouseEnvironment = lighthouseEnv as KsefLighthouseEnvironment;\n  }\n\n  const baseUrl = getStringOption(options, \"base-url\");\n  if (baseUrl) {\n    updated.baseUrl = baseUrl;\n  }\n\n  const contextType = getStringOption(options, \"context-type\");\n  const contextValue = getStringOption(options, \"context-value\");\n  if (contextType || contextValue) {\n    if (!contextType || !contextValue) {\n      throw new CliError(\"Both --context-type and --context-value are required together.\");\n    }\n    updated.context = {\n      type: contextType as ContextIdentifier[\"type\"],\n      value: contextValue,\n    };\n  }\n\n  const tokenPolicy =\n    getStringOption(options, \"token-store-policy\") ?? getStringOption(options, \"token-store\");\n  if (tokenPolicy) {\n    if (tokenPolicy !== \"plaintext\" && tokenPolicy !== \"env\") {\n      throw new CliError(`Unsupported token store policy \"${tokenPolicy}\".`);\n    }\n    updated.tokenStore = {\n      ...(updated.tokenStore ?? { policy: \"plaintext\" }),\n      policy: tokenPolicy,\n    };\n  }\n\n  const tokenFile = getStringOption(options, \"token-file\");\n  if (tokenFile) {\n    updated.tokenStore = {\n      ...(updated.tokenStore ?? { policy: \"plaintext\" }),\n      filePath: tokenFile,\n    };\n  }\n\n  const accessTokenEnvVar = getStringOption(options, \"access-token-env\");\n  if (accessTokenEnvVar) {\n    updated.tokenStore = {\n      ...(updated.tokenStore ?? { policy: \"plaintext\" }),\n      accessTokenEnvVar,\n    };\n  }\n\n  const refreshTokenEnvVar = getStringOption(options, \"refresh-token-env\");\n  if (refreshTokenEnvVar) {\n    updated.tokenStore = {\n      ...(updated.tokenStore ?? { policy: \"plaintext\" }),\n      refreshTokenEnvVar,\n    };\n  }\n\n  const ksefTokenEnvVar = getStringOption(options, \"ksef-token-env\");\n  if (ksefTokenEnvVar) {\n    updated.tokenStore = {\n      ...(updated.tokenStore ?? { policy: \"plaintext\" }),\n      ksefTokenEnvVar,\n    };\n  }\n\n  return updated;\n}\n\nasync function readJsonFile<T>(filePath: string, cwd: string): Promise<T> {\n  const absolute = path.resolve(cwd, filePath);\n  const raw = await readFile(absolute, \"utf8\");\n  return JSON.parse(raw) as T;\n}\n\nasync function writeOutputFile(filePath: string, content: string, cwd: string): Promise<void> {\n  const absolute = path.resolve(cwd, filePath);\n  await mkdir(path.dirname(absolute), { recursive: true });\n  await writeFile(absolute, content, \"utf8\");\n}\n\nasync function saveOutputFile(\n  filePath: string,\n  content: string,\n  cwd: string,\n  options: { overwrite: boolean },\n): Promise<void> {\n  const absolute = path.resolve(cwd, filePath);\n  await mkdir(path.dirname(absolute), { recursive: true });\n  if (!options.overwrite) {\n    try {\n      await stat(absolute);\n      throw new CliError(`Output file already exists: ${absolute}. Use --save-upo-overwrite.`);\n    } catch (error) {\n      if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n        throw error;\n      }\n    }\n  }\n  await writeFile(absolute, content, \"utf8\");\n}\n\nfunction normalizeError(error: unknown): { message: string; exitCode: number; name: string } {\n  if (error instanceof CliError) {\n    return {\n      message: error.message,\n      exitCode: error.exitCode,\n      name: error.name,\n    };\n  }\n\n  if (error instanceof KsefValidationError) {\n    return {\n      message: error.message,\n      exitCode: EXIT_USAGE,\n      name: error.name,\n    };\n  }\n\n  if (error instanceof KsefSessionExpiredError) {\n    return {\n      message: error.message,\n      exitCode: EXIT_AUTH,\n      name: error.name,\n    };\n  }\n\n  if (error instanceof KsefApiError || error instanceof KsefError) {\n    return {\n      message: error.message,\n      exitCode: EXIT_REMOTE,\n      name: error.name,\n    };\n  }\n\n  if (error instanceof SessionStoreError) {\n    return {\n      message: error.message,\n      exitCode: error.kind === \"validation\" ? EXIT_USAGE : EXIT_CONFIG,\n      name: error.name,\n    };\n  }\n\n  const message = error instanceof Error ? error.message : String(error);\n  return {\n    message,\n    exitCode: EXIT_UNEXPECTED,\n    name: \"Error\",\n  };\n}\n\nfunction emit(context: CommandContext, payload: CliJson | string): void {\n  if (context.json) {\n    context.io.stdout(JSON.stringify(payload, null, 2));\n    return;\n  }\n\n  if (typeof payload === \"string\") {\n    context.io.stdout(payload);\n    return;\n  }\n\n  context.io.stdout(JSON.stringify(payload, null, 2));\n}\n\nfunction emitError(\n  context: CommandContext,\n  error: { message: string; exitCode: number; name: string },\n): void {\n  if (context.json) {\n    context.io.stderr(\n      JSON.stringify(\n        {\n          ok: false,\n          error: {\n            name: error.name,\n            message: error.message,\n            exitCode: error.exitCode,\n          },\n        },\n        null,\n        2,\n      ),\n    );\n    return;\n  }\n  context.io.stderr(`Error: ${error.message}`);\n}\n\nfunction helpText(): string {\n  return [\n    \"ksef-ts - KSeF TypeScript CLI\",\n    \"\",\n    \"Usage:\",\n    \"  ksef-ts [--json] <command> [options]\",\n    \"\",\n    \"Commands:\",\n    \"  init        Initialize CLI config/profile\",\n    \"  profile     Manage profiles (list, show, set, use)\",\n    \"  auth        Authenticate (login, refresh, status, logout)\",\n    \"  health      Basic API health checks using SDK\",\n    \"  lighthouse  Query KSeF lighthouse status endpoint\",\n    \"  iz          Collective identifiers (generate, query, invoices, by-ksef)\",\n    \"  invoice     Invoice operations (get, query)\",\n    \"  send        Open session and send invoice XML\",\n    \"  session     Manage resumable session checkpoints\",\n    \"  upo         Download UPO by session + invoice selector\",\n    \"  export      Start/wait/download invoice export\",\n    \"\",\n    \"Examples:\",\n    \"  ksef-ts init --profile prod --env PRD --context-type Nip --context-value 1111111111\",\n    \"  ksef-ts auth login --token <ksef-token>\",\n    \"  ksef-ts health --with-auth\",\n    \"  ksef-ts iz generate --ksef-number <n1> --ksef-number <n2>\",\n    \"  ksef-ts invoice get <ksef-number> --output invoice.xml\",\n    \"  ksef-ts session online open --id demo-online --form-code FA3\",\n    \"  ksef-ts send --invoice-file ./invoice.xml --wait-upo --upo-output upo.xml\",\n    \"  ksef-ts export --filters-file ./filters.json --only-metadata --out-dir ./exports\",\n  ].join(\"\\n\");\n}\n\nfunction toJsonValue(value: unknown): JsonValue {\n  return JSON.parse(JSON.stringify(value)) as JsonValue;\n}\n\nfunction isDirectExecution(): boolean {\n  const scriptPath = process.argv[1];\n  if (!scriptPath) {\n    return false;\n  }\n  return import.meta.url === pathToFileURL(scriptPath).href;\n}\n\nif (isDirectExecution()) {\n  void runCli(process.argv.slice(2)).then((exitCode) => {\n    process.exitCode = exitCode;\n  });\n}\n"]}