{"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/documents/fa3/index.ts","../src/documents/fa3/identifier.ts","../src/documents/fa3/enums.ts","../src/documents/fa3/xsd.ts","../src/documents/fa3/xml.ts","../src/documents/fa3/tax.ts","../src/documents/fa3/builder.ts","../src/documents/fa3/domain.ts","../src/documents/fa3/sections.ts","../src/documents/fa3/importer.ts","../src/documents/fa3/template.ts","../src/documents/fa3/publicApi.ts","../src/documents/fa3/xsdMap.ts","../src/documents/fa3/xsdAudit.ts","../src/types/openapi.generated.ts"],"names":["year","month","day","path","crypto","fs","xmlCrypto","DOMParser","xpath","XMLParser","XMLBuilder","document","DEFAULT_NAMESPACE","ZipFile","fromBuffer","gunzipSync","validateEncryptionData","isIP","isPlainObject","Headers","fetch","ProxyAgent","trimTrailingSlash","fileURLToPath","pathToFileURL","parseXml","toNumber","money","mkdir","writeFile"],"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 * from \"./types\";\nexport { PartyIdentifierKind, validatePartyIdentifier, mapPartyIdentityToXml, resolvePartyIdentifier } from \"./identifier\";\nexport type { PartyIdentifierKindValue, ResolvedPartyIdentifier } from \"./identifier\";\nexport * from \"./builder\";\nexport * from \"./domain\";\nexport * from \"./sections\";\nexport * from \"./enums\";\nexport * from \"./tax\";\nexport * from \"./xml\";\nexport * from \"./importer\";\nexport * from \"./template\";\nexport {\n  Annotation,\n  Attachment,\n  AttachmentBlock,\n  AttachmentTable,\n  BankAccount,\n  Contract,\n  CorrectionReference,\n  FA3InvoiceKind,\n  FA3Line,\n  FA3Party,\n  FA3ValidationIssue,\n  LineIdentifiers,\n  NewTransportMeans,\n  Order,\n  OrderLine,\n  PaymentTerms,\n  RawXmlExtension,\n  Settlement,\n  TransactionTerms,\n  Transport,\n  ValidationContext,\n} from \"./publicApi\";\nexport * from \"./xsdMap\";\nexport * from \"./xsdAudit\";\nexport * from \"./xsd\";\n","import { KsefValidationError } from \"../../errors/errors\";\nimport { XmlObject } from \"../../xml/xml\";\nimport type { FA3Party, FA3PartyIdentifier, FA3ValidationIssue } from \"./types\";\n\nexport const PartyIdentifierKind = {\n  NIP: \"NIP\",\n  EU_VAT: \"EU_VAT\",\n  FOREIGN: \"FOREIGN\",\n  INTERNAL: \"INTERNAL\",\n  NONE: \"NONE\",\n} as const;\n\nexport type PartyIdentifierKindValue = (typeof PartyIdentifierKind)[keyof typeof PartyIdentifierKind];\n\nexport type ResolvedPartyIdentifier = FA3PartyIdentifier;\n\nexport const SELLER_NIP_REQUIRED_MESSAGE =\n  \"Podmiot1/PodmiotUpowazniony wymaga identyfikatora NIP.\";\n\nconst EU_COUNTRY_CODES = new Set([\n  \"AT\",\n  \"BE\",\n  \"BG\",\n  \"CY\",\n  \"CZ\",\n  \"DE\",\n  \"DK\",\n  \"EE\",\n  \"EL\",\n  \"ES\",\n  \"FI\",\n  \"FR\",\n  \"HR\",\n  \"HU\",\n  \"IE\",\n  \"IT\",\n  \"LT\",\n  \"LU\",\n  \"LV\",\n  \"MT\",\n  \"NL\",\n  \"PL\",\n  \"PT\",\n  \"RO\",\n  \"SE\",\n  \"SI\",\n  \"SK\",\n]);\n\nfunction normalizeParty(party: FA3Party): FA3Party & { countryCode: string } {\n  return {\n    ...party,\n    countryCode: (party.countryCode ?? \"PL\").toUpperCase(),\n  };\n}\n\nexport function resolvePartyIdentifier(party: FA3Party): ResolvedPartyIdentifier {\n  if (party.identifier) {\n    const identifier = party.identifier;\n    return {\n      kind: identifier.kind,\n      ...(identifier.value !== undefined ? { value: identifier.value.trim() } : {}),\n      ...(identifier.countryCode\n        ? { countryCode: identifier.countryCode.toUpperCase() }\n        : {}),\n    };\n  }\n\n  const normalized = normalizeParty(party);\n  const taxId = normalized.taxId.trim();\n  const countryCode = normalized.countryCode;\n\n  if (normalized.internalId?.trim()) {\n    return {\n      kind: PartyIdentifierKind.INTERNAL,\n      value: normalized.internalId.trim(),\n    };\n  }\n\n  if (taxId.toUpperCase() === \"BRAK\") {\n    return { kind: PartyIdentifierKind.NONE };\n  }\n\n  const foreignMatch = /^([A-Z]{2}):(.*)$/i.exec(taxId);\n  if (foreignMatch?.[1] && foreignMatch[2]?.trim()) {\n    return {\n      kind: PartyIdentifierKind.FOREIGN,\n      countryCode: foreignMatch[1].toUpperCase(),\n      value: foreignMatch[2].trim(),\n    };\n  }\n\n  const vatPrefix = taxId.slice(0, 2).toUpperCase();\n  if (countryCode !== \"PL\" && EU_COUNTRY_CODES.has(vatPrefix) && taxId.length > 2) {\n    return {\n      kind: PartyIdentifierKind.EU_VAT,\n      countryCode: vatPrefix,\n      value: taxId.slice(2),\n    };\n  }\n\n  if (countryCode !== \"PL\") {\n    return {\n      kind: PartyIdentifierKind.FOREIGN,\n      countryCode,\n      value: taxId,\n    };\n  }\n\n  return {\n    kind: PartyIdentifierKind.NIP,\n    value: taxId,\n  };\n}\n\nexport function validatePartyIdentifier(\n  identifier: ResolvedPartyIdentifier,\n  path: string,\n): FA3ValidationIssue[] {\n  const issues: FA3ValidationIssue[] = [];\n  if (identifier.kind === PartyIdentifierKind.NONE) {\n    return issues;\n  }\n  if (!String(identifier.value ?? \"\").trim()) {\n    issues.push({\n      code: \"identifier_required\",\n      path: `${path}.identifier`,\n      message: `${path}: identyfikator jest wymagany.`,\n    });\n  }\n  if (\n    identifier.kind === PartyIdentifierKind.EU_VAT &&\n    !String(identifier.countryCode ?? \"\").trim()\n  ) {\n    issues.push({\n      code: \"eu_vat_country_required\",\n      path: `${path}.identifier.countryCode`,\n      message: `${path}: kod kraju UE jest wymagany dla numeru VAT UE.`,\n    });\n  }\n  return issues;\n}\n\nexport function validateSellerPartyIdentifier(\n  identifier: ResolvedPartyIdentifier,\n  path: string,\n): FA3ValidationIssue[] {\n  const issues = validatePartyIdentifier(identifier, path);\n  if (identifier.kind !== PartyIdentifierKind.NIP) {\n    issues.push({\n      code: \"seller_nip_required\",\n      path,\n      message: SELLER_NIP_REQUIRED_MESSAGE,\n    });\n  }\n  return issues;\n}\n\nexport function mapPartyIdentityToXml(\n  identifier: ResolvedPartyIdentifier,\n  name: string,\n  context: \"seller\" | \"buyer\",\n): XmlObject {\n  const baseName = { Nazwa: name };\n\n  if (context === \"seller\") {\n    if (identifier.kind !== PartyIdentifierKind.NIP) {\n      throw new KsefValidationError(SELLER_NIP_REQUIRED_MESSAGE);\n    }\n    return {\n      NIP: identifier.value ?? \"\",\n      ...baseName,\n    };\n  }\n\n  switch (identifier.kind) {\n    case PartyIdentifierKind.NIP:\n      return {\n        NIP: identifier.value ?? \"\",\n        ...baseName,\n      };\n    case PartyIdentifierKind.EU_VAT:\n      return {\n        KodUE: identifier.countryCode ?? \"\",\n        NrVatUE: identifier.value ?? \"\",\n        ...baseName,\n      };\n    case PartyIdentifierKind.FOREIGN:\n      return {\n        ...(identifier.countryCode ? { KodKraju: identifier.countryCode } : {}),\n        NrID: identifier.value ?? \"\",\n        ...baseName,\n      };\n    case PartyIdentifierKind.NONE:\n      return {\n        BrakID: \"1\",\n        ...baseName,\n      };\n    case PartyIdentifierKind.INTERNAL:\n      return {\n        IDWew: identifier.value ?? \"\",\n        ...baseName,\n      };\n    default:\n      return {\n        NIP: identifier.value ?? \"\",\n        ...baseName,\n      };\n  }\n}\n","export const FA3_FORM_VARIANT = \"3\" as const;\n\nexport const CorrectionType = {\n  TAX_BASE_OR_TAX: \"1\",\n  OTHER: \"2\",\n  NO_TAX_IMPACT: \"3\",\n} as const;\n\nexport const PaymentMethod = {\n  CASH: \"1\",\n  CARD: \"2\",\n  VOUCHER: \"3\",\n  CHECK: \"4\",\n  CREDIT: \"5\",\n  TRANSFER: \"6\",\n  COMPENSATION: \"7\",\n} as const;\n\nexport const VatRateCode = {\n  RATE_23: \"23\",\n  RATE_22: \"22\",\n  RATE_8: \"8\",\n  RATE_7: \"7\",\n  RATE_5: \"5\",\n  RATE_4: \"4\",\n  RATE_3: \"3\",\n  ZERO_DOMESTIC: \"0 KR\",\n  ZERO_WDT: \"0 WDT\",\n  ZERO_EXPORT: \"0 EX\",\n  EXEMPT: \"zw\",\n  REVERSE_CHARGE: \"oo\",\n  OUTSIDE_COUNTRY_1: \"np I\",\n  OUTSIDE_COUNTRY_2: \"np II\",\n} as const;\n\nexport const LineProcedure = {\n  WSTO_EE: \"WSTO_EE\",\n  IED: \"IED\",\n  TT_D: \"TT_D\",\n  I_42: \"I_42\",\n  I_63: \"I_63\",\n  B_SPV: \"B_SPV\",\n  B_SPV_DOSTAWA: \"B_SPV_DOSTAWA\",\n  B_MPV_PROWIZJA: \"B_MPV_PROWIZJA\",\n} as const;\n\nexport const OrderLineProcedure = {\n  WSTO_EE: \"WSTO_EE\",\n  IED: \"IED\",\n  TT_D: \"TT_D\",\n  B_SPV: \"B_SPV\",\n  B_SPV_DOSTAWA: \"B_SPV_DOSTAWA\",\n  B_MPV_PROWIZJA: \"B_MPV_PROWIZJA\",\n} as const;\n\nexport const GTUCode = {\n  GTU_01: \"GTU_01\",\n  GTU_02: \"GTU_02\",\n  GTU_03: \"GTU_03\",\n  GTU_04: \"GTU_04\",\n  GTU_05: \"GTU_05\",\n  GTU_06: \"GTU_06\",\n  GTU_07: \"GTU_07\",\n  GTU_08: \"GTU_08\",\n  GTU_09: \"GTU_09\",\n  GTU_10: \"GTU_10\",\n  GTU_11: \"GTU_11\",\n  GTU_12: \"GTU_12\",\n  GTU_13: \"GTU_13\",\n} as const;\n\nexport const TransportKind = {\n  SEA: \"1\",\n  RAIL: \"2\",\n  ROAD: \"3\",\n  AIR: \"4\",\n  POSTAL: \"5\",\n  FIXED_TRANSPORT: \"7\",\n  OTHER: \"8\",\n} as const;\n\nexport const MarginProcedure = {\n  TRAVEL: \"travel\",\n  USED_GOODS: \"used_goods\",\n  ART: \"art\",\n  COLLECTIBLES: \"collectibles\",\n} as const;\n\nexport type EnumValue<T extends Record<string, string>> = T[keyof T];\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport { KsefError } from \"../../errors/errors\";\n\nconst SCHEMA_FILE = \"schemat_FA(3)_v1-0E.xsd\";\nconst SCHEMA_IMPORT = \"http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2022/01/05/eD/DefinicjeTypy/StrukturyDanych_v10-0E.xsd\";\n\nfunction moduleDir(): string {\n  return path.dirname(fileURLToPath(import.meta.url));\n}\n\nexport function resolveFa3SchemaEntryPath(candidates?: string[]): string {\n  const localDir = moduleDir();\n  const searchPaths = candidates ?? [\n    path.join(localDir, \"schemas\", SCHEMA_FILE),\n    path.join(localDir, \"documents\", \"fa3\", \"schemas\", SCHEMA_FILE),\n    path.resolve(process.cwd(), \"dist\", \"documents\", \"fa3\", \"schemas\", SCHEMA_FILE),\n    path.resolve(process.cwd(), \"src\", \"documents\", \"fa3\", \"schemas\", SCHEMA_FILE),\n  ];\n  const schemaPath = searchPaths.find((candidate) => fs.existsSync(candidate));\n  if (!schemaPath) {\n    throw new KsefError(`Missing FA(3) schema file. Checked: ${searchPaths.join(\", \")}`);\n  }\n  return schemaPath;\n}\n\nexport function loadFa3SchemaWithLocalImports(): { schemaContent: string; schemaBaseUrl: string; schemaPath: string } {\n  const schemaPath = resolveFa3SchemaEntryPath();\n  const schemaBaseDir = path.dirname(schemaPath);\n  const bazowePath = path.join(schemaBaseDir, \"bazowe\", \"StrukturyDanych_v10-0E.xsd\");\n  const bazoweUrl = pathToFileURL(bazowePath).href;\n  const raw = fs.readFileSync(schemaPath, \"utf8\");\n  const schemaContent = raw.replace(\n    new RegExp(`schemaLocation=\"${SCHEMA_IMPORT.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}\"`, \"g\"),\n    `schemaLocation=\"${bazoweUrl}\"`,\n  );\n  return {\n    schemaContent,\n    schemaBaseUrl: pathToFileURL(`${schemaBaseDir}${path.sep}`).href,\n    schemaPath,\n  };\n}\n\ntype Fa3XmlParser = (\n  value: string,\n  options?: { baseUrl?: string },\n) => {\n  validate: (schema: unknown) => boolean;\n  validationErrors?: Array<{ message?: string }>;\n};\n\nexport async function validateFa3XmlWithParser(xml: string, parseXml: Fa3XmlParser): Promise<void> {\n  const { schemaContent, schemaBaseUrl } = loadFa3SchemaWithLocalImports();\n  const schemaDoc = parseXml(schemaContent, { baseUrl: schemaBaseUrl });\n  const xmlDoc = parseXml(xml);\n  const valid = xmlDoc.validate(schemaDoc);\n  if (!valid) {\n    const errors = (xmlDoc.validationErrors ?? [])\n      .map((err: { message?: string }) => String(err?.message ?? \"\").trim())\n      .filter(Boolean);\n    throw new KsefError(\n      errors.length > 0 ? `FA(3) XSD validation failed: ${errors.join(\" | \")}` : \"FA(3) XSD validation failed.\",\n    );\n  }\n}\n\nexport type Libxml = { parseXml: Fa3XmlParser };\n\nexport async function loadLibxml(): Promise<Libxml> {\n  // Indirect specifier keeps `libxmljs2` a runtime-only optional dependency:\n  // it must not be resolved at compile time (typecheck / dts build) because\n  // the native module is frequently absent (skipped optional install).\n  const moduleName: string = \"libxmljs2\";\n  return (await import(moduleName)) as unknown as Libxml;\n}\n\nexport async function validateFa3XmlXsd(\n  xml: string,\n  loadModule: () => Promise<Libxml> = loadLibxml,\n): Promise<void> {\n  let parseXml: Fa3XmlParser;\n  try {\n    const imported = await loadModule();\n    parseXml = imported.parseXml;\n  } catch {\n    throw new KsefError(\n      \"FA(3) XSD validation requires optional dependency `libxmljs2`. Install with `npm install libxmljs2` and retry.\",\n    );\n  }\n\n  await validateFa3XmlWithParser(xml, parseXml);\n}\n","import { KsefError } from \"../../errors/errors\";\nimport { validateFa3XmlXsd } from \"./xsd\";\nimport type { FA3Draft } from \"./builder\";\n\nexport class FA3XmlValidationError extends KsefError {\n  constructor(message: string) {\n    super(message);\n    this.name = \"FA3XmlValidationError\";\n  }\n}\n\nexport function toFa3XmlValidationMessage(error: unknown): string {\n  return error instanceof Error ? error.message : String(error);\n}\n\nexport async function validateFa3XmlWithValidator(\n  xml: string,\n  validator: (value: string) => Promise<void>,\n): Promise<void> {\n  try {\n    await validator(xml);\n  } catch (error) {\n    throw new FA3XmlValidationError(toFa3XmlValidationMessage(error));\n  }\n}\n\nexport async function validateFa3Xml(xml: string): Promise<void> {\n  return validateFa3XmlWithValidator(xml, validateFa3XmlXsd);\n}\n\nexport async function invoiceToXml(\n  draft: FA3Draft,\n  options: { pretty?: boolean; xsdValidate?: boolean } = {},\n): Promise<string> {\n  return draft.toXml(options);\n}\n\nexport const invoice_to_xml = invoiceToXml;\nexport const validate_fa3_xml_xsd = validateFa3XmlXsd;\n","import { KsefValidationError } from \"../../errors/errors\";\nimport { FA3Line } from \"./types\";\n\nfunction toNumber(value: number | string | null | undefined): number {\n  if (value == null || value === \"\") return 0;\n  const parsed = Number(String(value).replace(\",\", \".\"));\n  return Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction money(value: number): number {\n  return Number(value.toFixed(2));\n}\n\nfunction isNumericRateString(value: string): boolean {\n  return /^-?\\d+([.,]\\d+)?$/.test(value.trim());\n}\n\n/** Kubełki podsumowania VAT FA(3). */\nexport type FaVatBucketKey =\n  | \"23or22\"\n  | \"8or7\"\n  | \"5\"\n  | \"4or3\"\n  | \"0KR\"\n  | \"0WDT\"\n  | \"0EX\"\n  | \"zw\"\n  | \"npI\"\n  | \"npII\"\n  | \"oo\";\n\nconst BUCKET_ORDER: FaVatBucketKey[] = [\n  \"23or22\",\n  \"8or7\",\n  \"5\",\n  \"4or3\",\n  \"0KR\",\n  \"0WDT\",\n  \"0EX\",\n  \"zw\",\n  \"npI\",\n  \"npII\",\n  \"oo\",\n];\n\nconst BUCKET_TAGS: Record<FaVatBucketKey, { net: string; vat?: string; vatW?: string }> = {\n  \"23or22\": { net: \"P_13_1\", vat: \"P_14_1\", vatW: \"P_14_1W\" },\n  \"8or7\": { net: \"P_13_2\", vat: \"P_14_2\", vatW: \"P_14_2W\" },\n  \"5\": { net: \"P_13_3\", vat: \"P_14_3\", vatW: \"P_14_3W\" },\n  \"4or3\": { net: \"P_13_4\", vat: \"P_14_4\", vatW: \"P_14_4W\" },\n  \"0KR\": { net: \"P_13_6_1\" },\n  \"0WDT\": { net: \"P_13_6_2\" },\n  \"0EX\": { net: \"P_13_6_3\" },\n  zw: { net: \"P_13_7\" },\n  npI: { net: \"P_13_8\" },\n  npII: { net: \"P_13_9\" },\n  oo: { net: \"P_13_10\" },\n};\n\nexport interface TaxSummaryRow {\n  rateCode: string;\n  net: number;\n  vat: number;\n  gross: number;\n  vatPln: number;\n}\n\n/** Mapuje kod FA(3) / numeryczny rate na kubełek P_13_x. Pusty/nieznany → KsefValidationError. */\nexport function faVatBucketForCode(code: string | null | undefined): FaVatBucketKey {\n  const trimmed = code?.trim();\n  if (!trimmed) {\n    throw new KsefValidationError(\"Unknown FA(3) VAT rate code: (empty)\");\n  }\n  switch (trimmed) {\n    case \"23\":\n    case \"22\":\n      return \"23or22\";\n    case \"8\":\n    case \"7\":\n      return \"8or7\";\n    case \"5\":\n      return \"5\";\n    case \"4\":\n    case \"3\":\n      return \"4or3\";\n    case \"0 KR\":\n      return \"0KR\";\n    case \"0 WDT\":\n      return \"0WDT\";\n    case \"0 EX\":\n      return \"0EX\";\n    case \"zw\":\n      return \"zw\";\n    case \"np I\":\n      return \"npI\";\n    case \"np II\":\n      return \"npII\";\n    case \"oo\":\n      return \"oo\";\n    default:\n      throw new KsefValidationError(`Unknown FA(3) VAT rate code: ${trimmed}`);\n  }\n}\n\n/** Kod stawki do P_12 / grupowania: vatCode, potem nienumeryczny vatRate, potem liczba. */\nexport function resolveVatRateCode(line: FA3Line): string {\n  const fromCode = line.vatCode?.trim();\n  if (fromCode) return fromCode;\n\n  if (line.vatRate == null || line.vatRate === \"\") {\n    return \"0 KR\";\n  }\n\n  if (typeof line.vatRate === \"string\") {\n    const trimmed = line.vatRate.trim();\n    if (trimmed && !isNumericRateString(trimmed)) {\n      return trimmed;\n    }\n  }\n\n  const n = toNumber(line.vatRate);\n  if (Math.abs(n) < 1e-12) return \"0 KR\";\n  return String(n);\n}\n\nexport class TaxSummary {\n  static fromLines(\n    lines: FA3Line[],\n    options: { treatBeforeCorrectionAsNegative?: boolean } = {},\n  ): TaxSummaryRow[] {\n    const invertBefore = Boolean(options.treatBeforeCorrectionAsNegative);\n    const map = new Map<string, TaxSummaryRow>();\n    for (const line of lines) {\n      const qty = toNumber(line.quantity);\n      const unitNet = toNumber(line.unitNetPrice);\n      const rate = toNumber(line.vatRate);\n      const rateCode = resolveVatRateCode(line);\n      const sign = invertBefore && line.beforeCorrection ? -1 : 1;\n      const unsignedNet = toNumber(line.netAmount ?? qty * unitNet);\n      const unsignedVat = toNumber(line.vatAmount ?? (rate === 0 ? 0 : (unsignedNet * rate) / 100));\n      const unsignedGross = toNumber(line.grossAmount ?? unsignedNet + unsignedVat);\n      const prev = map.get(rateCode) ?? { rateCode, net: 0, vat: 0, gross: 0, vatPln: 0 };\n      prev.net = money(prev.net + sign * unsignedNet);\n      prev.vat = money(prev.vat + sign * unsignedVat);\n      prev.gross = money(prev.gross + sign * unsignedGross);\n      if (line.vatAmountPln != null && line.vatAmountPln !== \"\") {\n        prev.vatPln = money(prev.vatPln + sign * toNumber(line.vatAmountPln));\n      }\n      map.set(rateCode, prev);\n    }\n    return [...map.values()];\n  }\n}\n\ntype BucketAmounts = { net: number; vat: number; vatPln: number | null };\n\n/**\n * Zamienia wiersze TaxSummary na pola Fa (P_13_x / P_14_x / P_14_xW).\n * Wartości jako stringi xx.xx (jak money() w builderze).\n */\nexport function taxSummaryToFaFields(\n  rows: TaxSummaryRow[],\n  options: { includeVatPln?: boolean } = {},\n): Record<string, string> {\n  const includeVatPln = Boolean(options.includeVatPln);\n  const buckets = new Map<FaVatBucketKey, BucketAmounts>();\n\n  for (const row of rows) {\n    const key = faVatBucketForCode(row.rateCode);\n    const prev = buckets.get(key) ?? {\n      net: 0,\n      vat: 0,\n      vatPln: null,\n    };\n    prev.net = money(prev.net + row.net);\n    prev.vat = money(prev.vat + row.vat);\n    if (includeVatPln) {\n      prev.vatPln = money((prev.vatPln ?? 0) + (row.vatPln ?? 0));\n    }\n    buckets.set(key, prev);\n  }\n\n  const fields: Record<string, string> = {};\n  for (const key of BUCKET_ORDER) {\n    const amounts = buckets.get(key);\n    if (!amounts) continue;\n    const tags = BUCKET_TAGS[key];\n    fields[tags.net] = amounts.net.toFixed(2);\n    if (tags.vat) {\n      fields[tags.vat] = amounts.vat.toFixed(2);\n      if (includeVatPln && tags.vatW && amounts.vatPln != null) {\n        fields[tags.vatW] = amounts.vatPln.toFixed(2);\n      }\n    }\n  }\n  return fields;\n}\n","import path from \"node:path\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { createZip } from \"../../utils/zip\";\nimport { buildFakturaXml, FakturaInput } from \"../../xml/invoice\";\nimport { XmlObject } from \"../../xml/xml\";\nimport { KsefValidationError } from \"../../errors/errors\";\nimport { FA3_FORM_VARIANT } from \"./enums\";\nimport { validateFa3Xml } from \"./xml\";\nimport {\n  FA3AdvancePayment,\n  FA3BankAccount,\n  FA3DraftInput,\n  FA3InvoiceKind,\n  FA3Line,\n  FA3Party,\n  FA3PaymentMethod,\n  FA3PaymentDueDescription,\n  FA3PaymentTerms,\n  FA3Settlement,\n  FA3ValidationIssue,\n} from \"./types\";\nimport {\n  mapPartyIdentityToXml,\n  resolvePartyIdentifier,\n  validatePartyIdentifier,\n  validateSellerPartyIdentifier,\n} from \"./identifier\";\nimport { TaxSummary, resolveVatRateCode, taxSummaryToFaFields } from \"./tax\";\n\ninterface FA3XmlOptions {\n  pretty?: boolean;\n  xsdValidate?: boolean;\n}\n\ntype NormalizedFA3Draft = FA3DraftInput & {\n  kind: FA3InvoiceKind;\n  lines: FA3Line[];\n  issuePlace: string;\n  advancePayments: FA3AdvancePayment[];\n  additionalParties: FA3Party[];\n  rawExtensions: NonNullable<FA3DraftInput[\"rawExtensions\"]>;\n  additionalDescriptions: NonNullable<FA3DraftInput[\"additionalDescriptions\"]>;\n};\n\nconst KIND_CODE: Record<FA3InvoiceKind, string> = {\n  basic: \"VAT\",\n  simplified: \"UPR\",\n  correction: \"KOR\",\n  advance: \"ZAL\",\n  settlement: \"ROZ\",\n  advance_correction: \"KOR_ZAL\",\n  settlement_correction: \"KOR_ROZ\",\n};\n\nconst CORRECTION_KINDS = new Set<FA3InvoiceKind>([\n  \"correction\",\n  \"advance_correction\",\n  \"settlement_correction\",\n]);\n\nconst SETTLEMENT_KINDS = new Set<FA3InvoiceKind>([\"settlement\", \"settlement_correction\"]);\n\nconst CORRECTION_TYPE_TO_CODE: Record<string, string> = {\n  \"1\": \"1\",\n  \"2\": \"2\",\n  \"3\": \"3\",\n  tax_base_or_tax: \"1\",\n  other: \"2\",\n  no_tax_impact: \"3\",\n};\n\nconst PAYMENT_METHOD_TO_CODE: Record<string, string> = {\n  \"1\": \"1\",\n  \"2\": \"2\",\n  \"3\": \"3\",\n  \"4\": \"4\",\n  \"5\": \"5\",\n  \"6\": \"6\",\n  \"7\": \"7\",\n  cash: \"1\",\n  card: \"2\",\n  voucher: \"3\",\n  check: \"4\",\n  credit: \"5\",\n  transfer: \"6\",\n  compensation: \"7\",\n  mobile: \"2\",\n  other: \"7\",\n};\n\nconst THIRD_PARTY_ROLE_TO_CODE: Record<string, string> = {\n  \"1\": \"1\",\n  \"2\": \"2\",\n  \"3\": \"3\",\n  \"4\": \"4\",\n  \"8\": \"8\",\n  \"10\": \"10\",\n  \"11\": \"11\",\n  original_entity: \"1\",\n  additional_buyer: \"2\",\n  recipient: \"3\",\n  payer: \"4\",\n  jst_subunit: \"8\",\n  vat_group_member: \"10\",\n  other: \"11\",\n};\n\nconst TRANSPORT_KIND_TO_CODE: Record<string, string> = {\n  \"1\": \"1\",\n  \"2\": \"2\",\n  \"3\": \"3\",\n  \"4\": \"4\",\n  \"5\": \"5\",\n  \"7\": \"7\",\n  \"8\": \"8\",\n  sea: \"1\",\n  rail: \"2\",\n  road: \"3\",\n  air: \"4\",\n  postal: \"5\",\n  fixed_transport: \"7\",\n  other: \"8\",\n};\n\nfunction toNumber(value: number | string): number {\n  const parsed = typeof value === \"number\" ? value : Number(String(value).replace(\",\", \".\"));\n  if (!Number.isFinite(parsed)) {\n    throw new KsefValidationError(`Invalid numeric value: ${String(value)}`);\n  }\n  return parsed;\n}\n\nfunction money(value: number | string): string {\n  return toNumber(value).toFixed(2);\n}\n\nfunction percentage(value: number | string): string {\n  const numeric = toNumber(value);\n  if (Number.isInteger(numeric)) {\n    return String(numeric);\n  }\n  return String(numeric);\n}\n\nfunction mapXiiVatRate(value: number | string | null | undefined): string | undefined {\n  if (value === null || value === undefined || isZeroVat(value)) {\n    return undefined;\n  }\n  return percentage(value);\n}\n\nfunction toDateOnly(value: string): string {\n  return value.includes(\"T\") ? value.slice(0, 10) : value;\n}\n\nfunction isZeroVat(value: number | string | null | undefined): boolean {\n  if (value === null || value === undefined) {\n    return true;\n  }\n  return Math.abs(toNumber(value)) < 1e-12;\n}\n\nfunction normalizeCurrency(value: string | undefined): string {\n  return (value ?? \"PLN\").trim().toUpperCase();\n}\n\nfunction normalizePaymentMethod(value: string | undefined): string | undefined {\n  if (!value) {\n    return undefined;\n  }\n  return PAYMENT_METHOD_TO_CODE[value] ?? value;\n}\n\nfunction mapParty(party: FA3Party, context: \"seller\" | \"buyer\" = \"buyer\"): XmlObject {\n  const identifier = resolvePartyIdentifier(party);\n  return {\n    ...(party.eori ? { NrEORI: party.eori } : {}),\n    DaneIdentyfikacyjne: mapPartyIdentityToXml(identifier, party.name, context),\n    ...((party.countryCode ?? \"PL\") && party.addressLine1\n      ? {\n          Adres: {\n            KodKraju: party.countryCode ?? \"PL\",\n            AdresL1: party.addressLine1,\n            ...(party.addressLine2 ? { AdresL2: party.addressLine2 } : {}),\n            ...(party.addressLine3 ? { AdresL3: party.addressLine3 } : {}),\n          },\n        }\n      : {}),\n    ...(party.email || party.phone\n      ? {\n          DaneKontaktowe: {\n            ...(party.email ? { Email: party.email } : {}),\n            ...(party.phone ? { Telefon: party.phone } : {}),\n          },\n        }\n      : {}),\n  };\n}\n\nfunction mapBuyer(party: FA3Party): XmlObject {\n  return {\n    ...mapParty(party, \"buyer\"),\n    JST: party.isJstSubunit ? \"1\" : \"2\",\n    GV: party.isVatGroupMember ? \"1\" : \"2\",\n  };\n}\n\nfunction mapAdditionalParty(party: FA3Party): XmlObject {\n  const roleCode = party.role ? THIRD_PARTY_ROLE_TO_CODE[party.role] ?? party.role : \"2\";\n  const role: XmlObject =\n    roleCode === \"11\" || party.role === \"other\"\n      ? { RolaInna: \"1\", ...(party.otherRoleDescription ? { OpisRoli: party.otherRoleDescription } : {}) }\n      : { Rola: roleCode };\n  return {\n    ...(party.buyerId ? { IDNabywcy: party.buyerId } : {}),\n    ...mapParty(party, \"buyer\"),\n    ...role,\n    ...(party.share !== undefined ? { Udzial: String(party.share) } : {}),\n    ...(party.customerNumber ? { NrKlienta: party.customerNumber } : {}),\n  };\n}\n\nfunction computeLineAmounts(line: FA3Line): {\n  net: number;\n  vat: number;\n  gross: number;\n  vatRate: number;\n} {\n  const quantity = toNumber(line.quantity);\n  const unitNetPrice = toNumber(line.unitNetPrice);\n  const baseNet = quantity * unitNetPrice;\n  const vatRate = isZeroVat(line.vatRate) ? 0 : toNumber(line.vatRate as number | string);\n  const vat = vatRate === 0 ? 0 : (baseNet * vatRate) / 100;\n  const gross = baseNet + vat;\n  return {\n    net: toNumber(line.netAmount ?? baseNet),\n    vat: toNumber(line.vatAmount ?? vat),\n    gross: toNumber(line.grossAmount ?? gross),\n    vatRate,\n  };\n}\n\nfunction mapLine(line: FA3Line, index: number): XmlObject {\n  const amounts = computeLineAmounts(line);\n  const xiiVatRate = mapXiiVatRate(line.xiiVatRate);\n  return {\n    NrWierszaFa: String(index + 1),\n    P_7: line.description,\n    P_8A: line.unit,\n    P_8B: String(line.quantity),\n    P_9A: money(line.unitNetPrice),\n    P_11: money(amounts.net),\n    P_11Vat: money(amounts.vat),\n    P_12: resolveVatRateCode(line),\n    ...(xiiVatRate ? { P_12_XII: xiiVatRate } : {}),\n    ...(line.annex15 ? { P_12_Zal_15: \"1\" } : {}),\n    ...(line.serviceDate ? { P_6A: toDateOnly(line.serviceDate) } : {}),\n    ...(line.beforeCorrection ? { StanPrzed: \"1\" } : {}),\n    ...(line.uniqueId ? { UU_ID: line.uniqueId } : {}),\n    ...(line.gtu ? { GTU: line.gtu } : {}),\n    ...(line.procedure ? { Procedura: line.procedure } : {}),\n  };\n}\n\ntype AdvanceSplit = {\n  net: number;\n  vat: number;\n  gross: number;\n  vatRate: number;\n  vatCode: string;\n};\n\nfunction splitAdvancePayment(payment: FA3AdvancePayment): AdvanceSplit {\n  const gross = toNumber(payment.amount);\n  const vatRate = isZeroVat(payment.vatRate) ? null : toNumber(payment.vatRate as number | string);\n  if (vatRate === null) {\n    return { net: gross, vat: 0, gross, vatRate: 0, vatCode: \"0 KR\" };\n  }\n  const divisor = 1 + vatRate / 100;\n  const net = gross / divisor;\n  const vat = gross - net;\n  return { net, vat, gross, vatRate, vatCode: String(vatRate) };\n}\n\nfunction computeAdvanceNetVat(payments: FA3AdvancePayment[]): { net: number; vat: number; gross: number } {\n  return payments.reduce(\n    (acc, payment) => {\n      const split = splitAdvancePayment(payment);\n      acc.net += split.net;\n      acc.vat += split.vat;\n      acc.gross += split.gross;\n      return acc;\n    },\n    { net: 0, vat: 0, gross: 0 },\n  );\n}\n\n/** Synthetic FA lines so advancePayments contribute to P_13_x/P_14_x buckets (not FaWiersz). */\nfunction advancePaymentsAsLines(payments: FA3AdvancePayment[]): FA3Line[] {\n  return payments.map((payment) => {\n    const split = splitAdvancePayment(payment);\n    return {\n      description: \"Zaliczka\",\n      quantity: 1,\n      unit: \"szt\",\n      unitNetPrice: split.net,\n      vatRate: split.vatRate,\n      vatCode: split.vatCode,\n      netAmount: split.net,\n      vatAmount: split.vat,\n      grossAmount: split.gross,\n    };\n  });\n}\n\nfunction extractTotals(input: NormalizedFA3Draft): { net: number; vat: number; gross: number } {\n  const linesTotals = input.lines.reduce(\n    (acc, line) => {\n      const amounts = computeLineAmounts(line);\n      const sign = CORRECTION_KINDS.has(input.kind) && line.beforeCorrection ? -1 : 1;\n      acc.net += sign * amounts.net;\n      acc.vat += sign * amounts.vat;\n      acc.gross += sign * amounts.gross;\n      return acc;\n    },\n    { net: 0, vat: 0, gross: 0 },\n  );\n  const advanceTotals = computeAdvanceNetVat(input.advancePayments);\n  return {\n    net: linesTotals.net + advanceTotals.net,\n    vat: linesTotals.vat + advanceTotals.vat,\n    gross: linesTotals.gross + advanceTotals.gross,\n  };\n}\n\nfunction mapAdnotacje(input: NormalizedFA3Draft): XmlObject {\n  const hasAnnex15Line = input.lines.some((line) => line.annex15);\n  const gross = extractTotals(input).gross;\n  const splitPaymentRequested = input.splitPaymentAnnotation === true;\n\n  const p18a =\n    splitPaymentRequested || (hasAnnex15Line && gross > 15000) ? \"1\" : \"2\";\n\n  return {\n    Adnotacje: {\n      P_16: \"2\",\n      P_17: \"2\",\n      P_18: \"2\",\n      P_18A: p18a,\n      Zwolnienie: { P_19N: \"1\" },\n      NoweSrodkiTransportu: { P_22N: \"1\" },\n      P_23: \"2\",\n      PMarzy: { P_PMarzyN: \"1\" },\n    },\n  };\n}\n\nfunction mapDaneFaKorygowanej(input: NormalizedFA3Draft): XmlObject | undefined {\n  const correctedDate = input.correctedInvoiceDate?.trim();\n  const correctedNumber = input.correctedInvoiceNumber?.trim();\n  if (!correctedDate || !correctedNumber) {\n    return undefined;\n  }\n\n  const dane: XmlObject = {\n    DataWystFaKorygowanej: correctedDate,\n    NrFaKorygowanej: correctedNumber,\n  };\n\n  const correctedKsefNumber = input.correctedKsefNumber?.trim();\n  if (correctedKsefNumber) {\n    dane.NrKSeF = \"1\";\n    dane.NrKSeFFaKorygowanej = correctedKsefNumber;\n  } else {\n    dane.NrKSeFN = \"1\";\n  }\n\n  return dane;\n}\n\nfunction mapKindSpecificFields(input: NormalizedFA3Draft): XmlObject {\n  const kind = input.kind;\n  const payload: XmlObject = { RodzajFaktury: KIND_CODE[kind] };\n\n  if (CORRECTION_KINDS.has(kind)) {\n    if (input.correctionType) {\n      payload.TypKorekty = CORRECTION_TYPE_TO_CODE[input.correctionType] ?? input.correctionType;\n    }\n    if (input.correctionReason) {\n      payload.PrzyczynaKorekty = input.correctionReason;\n    }\n    if (input.correctedPeriod) {\n      payload.OkresFaKorygowanej = input.correctedPeriod;\n    }\n    if (input.correctedInvoiceNumberOverride) {\n      payload.NrFaKorygowany = input.correctedInvoiceNumberOverride;\n    }\n    const dane = mapDaneFaKorygowanej(input);\n    if (dane) {\n      payload.DaneFaKorygowanej = dane;\n    }\n  }\n\n  if (\n    kind === \"advance\" ||\n    kind === \"advance_correction\" ||\n    kind === \"settlement\" ||\n    kind === \"settlement_correction\"\n  ) {\n    if (input.advanceInvoiceNumber || input.advanceKsefNumber) {\n      payload.FakturaZaliczkowa = {\n        ...(input.advanceInvoiceNumber ? { NrFakturyZaliczkowej: input.advanceInvoiceNumber } : {}),\n        ...(input.advanceKsefNumber ? { NrKSeFFaZaliczkowej: input.advanceKsefNumber } : {}),\n      };\n    }\n  }\n\n  if (kind === \"advance\" || kind === \"advance_correction\") {\n    if (input.advancePayments.length > 0) {\n      payload.ZaliczkaCzesciowa = input.advancePayments.map((payment) => ({\n        P_15Z: money(payment.amount),\n        ...(payment.currencyRate !== undefined ? { KursWalutyZW: String(payment.currencyRate) } : {}),\n      }));\n    }\n    if (input.foreignCurrencyRate !== undefined) {\n      payload.KursWalutyZ = String(input.foreignCurrencyRate);\n    }\n  }\n\n  return payload;\n}\n\nfunction validateBusinessRules(input: NormalizedFA3Draft): FA3ValidationIssue[] {\n  const issues: FA3ValidationIssue[] = [];\n  const kind = input.kind;\n  const currency = normalizeCurrency(input.currency);\n  const lines = input.lines;\n\n  if (!input.invoiceNumber?.trim()) {\n    issues.push({ code: \"invoice_number_required\", path: \"invoice.invoiceNumber\", message: \"Numer faktury jest wymagany.\" });\n  }\n  if (!input.issueDate?.trim()) {\n    issues.push({ code: \"issue_date_required\", path: \"invoice.issueDate\", message: \"Data wystawienia jest wymagana.\" });\n  }\n  if (!input.seller?.name?.trim() || !input.seller?.taxId?.trim()) {\n    issues.push({ code: \"seller_required\", path: \"invoice.seller\", message: \"Dane sprzedawcy są wymagane.\" });\n  } else if (input.seller) {\n    issues.push(\n      ...validateSellerPartyIdentifier(\n        resolvePartyIdentifier(input.seller),\n        \"invoice.seller\",\n      ),\n    );\n  }\n  if (!input.buyer?.name?.trim() || !input.buyer?.taxId?.trim()) {\n    issues.push({ code: \"buyer_required\", path: \"invoice.buyer\", message: \"Dane nabywcy są wymagane.\" });\n  } else if (input.buyer) {\n    issues.push(\n      ...validatePartyIdentifier(resolvePartyIdentifier(input.buyer), \"invoice.buyer\"),\n    );\n  }\n  if (lines.length === 0 && kind !== \"advance\" && kind !== \"advance_correction\") {\n    issues.push({\n      code: \"lines_required\",\n      path: \"invoice.lines\",\n      message: \"Faktura wymaga co najmniej jednej pozycji.\",\n    });\n  }\n\n  if (CORRECTION_KINDS.has(kind)) {\n    if (!input.correctionReason?.trim()) {\n      issues.push({\n        code: \"correction_reason_required\",\n        path: \"invoice.correctionReason\",\n        message: \"Przyczyna korekty jest wymagana.\",\n      });\n    }\n    if (!input.correctedInvoiceNumber?.trim()) {\n      issues.push({\n        code: \"corrected_invoice_number_required\",\n        path: \"invoice.correctedInvoiceNumber\",\n        message: \"Numer faktury korygowanej jest wymagany.\",\n      });\n    }\n    if (!input.correctedInvoiceDate?.trim()) {\n      issues.push({\n        code: \"corrected_invoice_date_required\",\n        path: \"invoice.correctedInvoiceDate\",\n        message: \"Data faktury korygowanej jest wymagana.\",\n      });\n    }\n  }\n\n  if (SETTLEMENT_KINDS.has(kind)) {\n    if (!input.advanceInvoiceNumber && !input.advanceKsefNumber) {\n      issues.push({\n        code: \"advance_reference_required\",\n        path: \"invoice.advanceInvoice\",\n        message: \"Podaj numer faktury zaliczkowej albo numer KSeF.\",\n      });\n    }\n  }\n\n  if (input.advanceInvoiceNumber && input.advanceKsefNumber) {\n    issues.push({\n      code: \"advance_reference_conflict\",\n      path: \"invoice.advanceInvoice\",\n      message: \"Podaj numer faktury zaliczkowej albo numer KSeF, nie oba.\",\n    });\n  }\n\n  if (input.saleDate && (input.periodFrom || input.periodTo)) {\n    issues.push({\n      code: \"sale_date_period_conflict\",\n      path: \"invoice.saleDate\",\n      message: \"Podaj date sprzedaży albo okres faktury, nie oba.\",\n    });\n  }\n  if ((input.periodFrom && !input.periodTo) || (!input.periodFrom && input.periodTo)) {\n    issues.push({\n      code: \"half_period\",\n      path: \"invoice.period\",\n      message: \"Okres faktury wymaga obu dat: od i do.\",\n    });\n  }\n\n  const payment = input.paymentTerms;\n  if (payment?.paidDate && (payment.partialPayments?.length ?? 0) > 0) {\n    issues.push({\n      code: \"payment_paid_vs_partial_conflict\",\n      path: \"invoice.paymentTerms\",\n      message: \"Podaj date zapłaty albo płatności częściowe, nie oba.\",\n    });\n  }\n  if (payment?.method && payment.otherMethodDescription) {\n    issues.push({\n      code: \"payment_method_other_conflict\",\n      path: \"invoice.paymentTerms\",\n      message: \"Podaj forme płatności albo opis innej formy, nie oba.\",\n    });\n  }\n  for (const [index, partial] of (payment?.partialPayments ?? []).entries()) {\n    if (partial.method && partial.otherMethodDescription) {\n      issues.push({\n        code: \"partial_payment_method_other_conflict\",\n        path: `invoice.paymentTerms.partialPayments[${index + 1}]`,\n        message: \"Podaj forme płatności albo opis innej formy, nie oba.\",\n      });\n    }\n  }\n\n  const settlement = input.settlement;\n  if (settlement?.amountDue !== undefined && settlement.amountToSettle !== undefined) {\n    issues.push({\n      code: \"settlement_choice_conflict\",\n      path: \"invoice.settlement\",\n      message: \"Podaj DoZaplaty albo DoRozliczenia, nie oba.\",\n    });\n  }\n  if (settlement?.amountDue !== undefined) {\n    const totals = extractTotals(input);\n    const charges = (settlement.charges ?? []).reduce((sum, row) => sum + toNumber(row.amount), 0);\n    const deductions = (settlement.deductions ?? []).reduce((sum, row) => sum + toNumber(row.amount), 0);\n    const expectedDue = toNumber((totals.gross + charges - deductions).toFixed(2));\n    const providedDue = toNumber(settlement.amountDue);\n    if (Math.abs(expectedDue - providedDue) > 0.009) {\n      issues.push({\n        code: \"settlement_amount_due_inconsistent\",\n        path: \"invoice.settlement.amountDue\",\n        message:\n          `Rozliczenie niespójne; oczekiwane DoZaplaty=${money(expectedDue)} ` +\n          `(P_15 + SumaObciazen - SumaOdliczen), otrzymano ${money(providedDue)}.`,\n      });\n    }\n  }\n\n  if (input.rawExtensions.length > 0) {\n    issues.push({\n      code: \"raw_extension_unsupported\",\n      path: \"invoice.rawExtensions\",\n      message: \"Raw XML extension nie jest wspierany w typed FA(3) SDK.\",\n    });\n  }\n\n  if (input.simplifiedReceiptLike) {\n    const gross = extractTotals(input).gross;\n    if (currency !== \"PLN\") {\n      issues.push({\n        code: \"simplified_receipt_currency\",\n        path: \"invoice.currency\",\n        message: \"Faktura uproszczona paragonowa z limitem 450 PLN wymaga waluty PLN.\",\n      });\n    }\n    if (gross > 450.0 + 1e-9) {\n      issues.push({\n        code: \"simplified_receipt_limit\",\n        path: \"invoice.totalGross\",\n        message: \"Faktura uproszczona paragonowa nie może przekroczyć 450 PLN.\",\n      });\n    }\n  }\n\n  for (const [index, party] of input.additionalParties.entries()) {\n    const partyPath = `invoice.additionalParties[${index + 1}]`;\n    if (party.role === \"other\" && !party.otherRoleDescription?.trim()) {\n      issues.push({\n        code: \"third_party_other_description_required\",\n        path: partyPath,\n        message: \"otherRoleDescription jest wymagany dla roli 'other'.\",\n      });\n    }\n    issues.push(...validatePartyIdentifier(resolvePartyIdentifier(party), partyPath));\n  }\n\n  if (input.buyer?.isJstSubunit) {\n    const hasJst = input.additionalParties.some((party) => party.role === \"jst_subunit\");\n    if (!hasJst) {\n      issues.push({\n        code: \"jst_subunit_missing_party3\",\n        path: \"invoice.additionalParties\",\n        message: \"JST wymaga podmiotu dodatkowego z rolą jst_subunit.\",\n      });\n    }\n  }\n\n  if (input.buyer?.isVatGroupMember) {\n    const hasGv = input.additionalParties.some((party) => party.role === \"vat_group_member\");\n    if (!hasGv) {\n      issues.push({\n        code: \"vat_group_missing_party3\",\n        path: \"invoice.additionalParties\",\n        message: \"GV wymaga podmiotu dodatkowego z rolą vat_group_member.\",\n      });\n    }\n  }\n\n  return issues;\n}\n\nfunction mapBankAccount(account: FA3BankAccount): XmlObject {\n  return {\n    NrRB: account.number,\n    ...(account.swift ? { SWIFT: account.swift } : {}),\n    ...(account.ownBankAccountType ? { RachunekWlasnyBanku: account.ownBankAccountType } : {}),\n    ...(account.bankName ? { NazwaBanku: account.bankName } : {}),\n    ...(account.description ? { OpisRachunku: account.description } : {}),\n  };\n}\n\nfunction parseDueDescription(value: string): FA3PaymentDueDescription | undefined {\n  const match = /^(\\d+(?:[.,]\\d+)?)\\s+(.+?)\\s+od\\s+(.+)$/i.exec(value.trim());\n  if (!match?.[1] || !match[2] || !match[3]) {\n    return undefined;\n  }\n  return {\n    amount: match[1],\n    unit: match[2],\n    startsFrom: match[3],\n  };\n}\n\nfunction mapDueDescription(value: FA3PaymentDueDescription): XmlObject {\n  return {\n    Ilosc: String(value.amount),\n    Jednostka: value.unit,\n    ZdarzeniePoczatkowe: value.startsFrom,\n  };\n}\n\nfunction mapPaymentChoice(method?: string, otherMethodDescription?: string): XmlObject {\n  const normalized = normalizePaymentMethod(method);\n  if (normalized && normalized !== \"7\") {\n    return { FormaPlatnosci: normalized };\n  }\n  if (otherMethodDescription) {\n    return {\n      PlatnoscInna: \"1\",\n      OpisPlatnosci: otherMethodDescription,\n    };\n  }\n  return normalized ? { FormaPlatnosci: normalized } : {};\n}\n\nfunction mapPaymentTerms(paymentTerms?: FA3PaymentTerms): XmlObject | undefined {\n  if (!paymentTerms) {\n    return undefined;\n  }\n  const dueDescription = paymentTerms.dueDescriptionParts ?? (\n    paymentTerms.dueDescription ? parseDueDescription(paymentTerms.dueDescription) : undefined\n  );\n  const partialPayments = paymentTerms.partialPayments ?? [];\n  const bankAccounts = paymentTerms.bankAccounts ?? [];\n  const factorBankAccounts = paymentTerms.factorBankAccounts ?? [];\n  return {\n    ...(paymentTerms.paidDate ? { Zaplacono: \"1\", DataZaplaty: paymentTerms.paidDate } : {}),\n    ...(partialPayments.length > 0\n      ? {\n          ZnacznikZaplatyCzesciowej: \"1\",\n          ZaplataCzesciowa: partialPayments.map((partial) => ({\n            KwotaZaplatyCzesciowej: money(partial.amount),\n            DataZaplatyCzesciowej: partial.paidOn,\n            ...mapPaymentChoice(partial.method, partial.otherMethodDescription),\n          })),\n        }\n      : {}),\n    ...(paymentTerms.dueDate || dueDescription\n      ? {\n          TerminPlatnosci: {\n            ...(paymentTerms.dueDate ? { Termin: paymentTerms.dueDate } : {}),\n            ...(dueDescription ? { TerminOpis: mapDueDescription(dueDescription) } : {}),\n          },\n        }\n      : {}),\n    ...mapPaymentChoice(paymentTerms.method, paymentTerms.otherMethodDescription),\n    ...(bankAccounts.length > 0\n      ? { RachunekBankowy: bankAccounts.map(mapBankAccount) }\n      : {}),\n    ...(factorBankAccounts.length > 0\n      ? { RachunekBankowyFaktora: factorBankAccounts.map(mapBankAccount) }\n      : {}),\n    ...(paymentTerms.paymentLink ? { LinkDoPlatnosci: paymentTerms.paymentLink } : {}),\n    ...(paymentTerms.ipksef ? { IPKSeF: paymentTerms.ipksef } : {}),\n  };\n}\n\nfunction mapSettlement(input: NormalizedFA3Draft): XmlObject | undefined {\n  const settlement = input.settlement;\n  if (!settlement && input.settlementAmount === undefined) {\n    return undefined;\n  }\n  const charges = settlement?.charges ?? [];\n  const deductions = settlement?.deductions ?? [];\n  return {\n    ...(charges.length > 0\n      ? {\n          Obciazenia: charges.map((row) => ({\n            Kwota: money(row.amount),\n            Powod: row.reason,\n          })),\n          SumaObciazen: money(charges.reduce((sum, row) => sum + toNumber(row.amount), 0)),\n        }\n      : {}),\n    ...(deductions.length > 0\n      ? {\n          Odliczenia: deductions.map((row) => ({\n            Kwota: money(row.amount),\n            Powod: row.reason,\n          })),\n          SumaOdliczen: money(deductions.reduce((sum, row) => sum + toNumber(row.amount), 0)),\n        }\n      : {}),\n    ...(settlement?.amountDue !== undefined\n      ? { DoZaplaty: money(settlement.amountDue) }\n      : {}),\n    ...(settlement?.amountToSettle !== undefined\n      ? { DoRozliczenia: money(settlement.amountToSettle) }\n      : {}),\n    ...(input.settlementAmount !== undefined ? { DoZaplaty: money(input.settlementAmount) } : {}),\n  };\n}\n\nfunction mapOrder(input: NormalizedFA3Draft): XmlObject | undefined {\n  const order = input.order;\n  const orderLines = order?.lines ?? [];\n  if (!order || order.totalGross === undefined || orderLines.length === 0) {\n    return undefined;\n  }\n  return {\n    WartoscZamowienia: money(order.totalGross),\n    ZamowienieWiersz: orderLines.map((line, index) => {\n      const net = toNumber(line.quantity) * toNumber(line.unitNetPrice);\n      const vatRate = isZeroVat(line.vatRate) ? 0 : toNumber(line.vatRate as number | string);\n      const vat = vatRate === 0 ? 0 : (net * vatRate) / 100;\n      const xiiVatRate = mapXiiVatRate(line.xiiVatRate);\n      return {\n        NrWierszaZam: String(index + 1),\n        P_7Z: line.description,\n        P_8AZ: \"szt\",\n        P_8BZ: String(line.quantity),\n        P_9AZ: money(line.unitNetPrice),\n        P_11NettoZ: money(net),\n        P_11VatZ: money(vat),\n        ...(line.vatRate !== undefined ? { P_12Z: String(line.vatRate) } : {}),\n        ...(xiiVatRate ? { P_12Z_XII: xiiVatRate } : {}),\n      };\n    }),\n  };\n}\n\nfunction mapTransport(input: NormalizedFA3Draft): XmlObject | undefined {\n  const transport = input.transport;\n  if (!transport) {\n    return undefined;\n  }\n  const kind = TRANSPORT_KIND_TO_CODE[transport.kind] ?? transport.kind;\n  return {\n    ...(kind === \"8\"\n      ? { TransportInny: \"1\", OpisInnegoTransportu: transport.kind }\n      : { RodzajTransportu: kind }),\n    ...(transport.orderNumber ? { NrZleceniaTransportu: transport.orderNumber } : {}),\n    ...(transport.cargoDescription ? { OpisLadunku: transport.cargoDescription } : {}),\n    ...(transport.packageUnit ? { JednostkaOpakowania: transport.packageUnit } : {}),\n  };\n}\n\nexport class FA3Draft {\n  private readonly value: NormalizedFA3Draft;\n\n  constructor(value: FA3DraftInput) {\n    this.value = {\n      ...value,\n      kind: value.kind ?? \"basic\",\n      currency: normalizeCurrency(value.currency),\n      issuePlace: value.issuePlace ?? \"\",\n      lines: value.lines.map((line) => ({ ...line })),\n      advancePayments: (value.advancePayments ?? []).map((row) => ({ ...row })),\n      additionalParties: (value.additionalParties ?? []).map((row) => ({ ...row })),\n      rawExtensions: (value.rawExtensions ?? []).map((row) => ({ ...row })),\n      additionalDescriptions: (value.additionalDescriptions ?? []).map((row) => ({ ...row })),\n      ...(value.contract ? { contract: { ...value.contract } } : {}),\n      ...(value.order\n        ? {\n            order: {\n              ...value.order,\n              ...(value.order.lines ? { lines: value.order.lines.map((line) => ({ ...line })) } : {}),\n            },\n          }\n        : {}),\n      ...(value.transport ? { transport: { ...value.transport } } : {}),\n      ...(value.transactionTerms ? { transactionTerms: { ...value.transactionTerms } } : {}),\n      ...(value.attachment\n        ? {\n            attachment: {\n              blocks: value.attachment.blocks.map((block) => ({\n                ...block,\n                ...(block.paragraphs ? { paragraphs: [...block.paragraphs] } : {}),\n                ...(block.tables\n                  ? {\n                      tables: block.tables.map((table) => ({\n                        ...table,\n                        headers: [...table.headers],\n                        rows: table.rows.map((row) => [...row]),\n                      })),\n                    }\n                  : {}),\n              })),\n            },\n          }\n        : {}),\n    };\n  }\n\n  static fromDict(value: FA3DraftInput | (FA3DraftInput & Record<string, unknown>)): FA3Draft {\n    const source = value as Record<string, unknown>;\n    const normalized: FA3DraftInput = {\n      ...value,\n      invoiceNumber: String(value.invoiceNumber ?? source[\"invoice_number\"] ?? \"\"),\n      issueDate: String(value.issueDate ?? source[\"issue_date\"] ?? \"\"),\n      currency: normalizeCurrency(String(value.currency ?? source[\"waluta\"] ?? \"PLN\")),\n      seller: (value.seller ?? {}) as FA3Party,\n      buyer: (value.buyer ?? {}) as FA3Party,\n      lines: (value.lines ?? []) as FA3Line[],\n    };\n    return new FA3Draft(normalized);\n  }\n\n  toDict(): FA3DraftInput {\n    return JSON.parse(JSON.stringify(this.value)) as FA3DraftInput;\n  }\n\n  validate(): FA3ValidationIssue[] {\n    return validateBusinessRules(this.value);\n  }\n\n  toFakturaInput(): FakturaInput {\n    const kind = this.value.kind;\n    const lines = this.value.lines.map((line, index) => mapLine(line, index));\n    const totals = extractTotals(this.value);\n    const currency = normalizeCurrency(this.value.currency);\n    const includeVatPln =\n      currency !== \"PLN\" && this.value.lines.some((line) => line.vatAmountPln != null && line.vatAmountPln !== \"\");\n    const taxFields = taxSummaryToFaFields(\n      TaxSummary.fromLines(\n        [...this.value.lines, ...advancePaymentsAsLines(this.value.advancePayments)],\n        {\n          treatBeforeCorrectionAsNegative: CORRECTION_KINDS.has(kind),\n        },\n      ),\n      { includeVatPln },\n    );\n    const faPayload: XmlObject = {\n      KodWaluty: currency,\n      P_1: toDateOnly(this.value.issueDate),\n      ...(this.value.issuePlace?.trim() ? { P_1M: this.value.issuePlace.trim() } : {}),\n      P_2: this.value.invoiceNumber,\n      ...taxFields,\n      P_15: money(totals.gross),\n      ...mapAdnotacje(this.value),\n      FaWiersz: lines,\n      ...mapKindSpecificFields(this.value),\n    };\n\n    const payment = mapPaymentTerms(this.value.paymentTerms);\n    if (payment) {\n      faPayload.Platnosc = payment;\n    }\n\n    if (this.value.saleDate) {\n      faPayload.P_6 = toDateOnly(this.value.saleDate);\n    }\n    if (this.value.periodFrom && this.value.periodTo) {\n      faPayload.OkresFa = {\n        P_6_Od: toDateOnly(this.value.periodFrom),\n        P_6_Do: toDateOnly(this.value.periodTo),\n      };\n    }\n    if (this.value.attachmentText) {\n      faPayload.Zalacznik = {\n        Opis: this.value.attachmentText,\n      };\n    }\n    if (this.value.additionalDescriptions.length > 0) {\n      faPayload.DodatkowyOpis = this.value.additionalDescriptions.map((item) => ({\n        Klucz: item.key,\n        Wartosc: item.value,\n      }));\n    }\n    if (this.value.transactionTerms || this.value.contract || this.value.order?.number || this.value.order?.date) {\n      const transactionTerms: XmlObject = {\n        ...(this.value.contract\n          ? {\n              Umowy: [{\n                ...(this.value.contract.date ? { DataUmowy: this.value.contract.date } : {}),\n                NrUmowy: this.value.contract.number,\n              }],\n            }\n          : {}),\n        ...(this.value.order?.number || this.value.order?.date\n          ? {\n              Zamowienia: [{\n                ...(this.value.order.date ? { DataZamowienia: this.value.order.date } : {}),\n                ...(this.value.order.number ? { NrZamowienia: this.value.order.number } : {}),\n              }],\n            }\n          : {}),\n        ...(this.value.transactionTerms?.deliveryTerms\n          ? { WarunkiDostawy: this.value.transactionTerms.deliveryTerms }\n          : {}),\n        ...(this.value.transactionTerms?.contractualRate\n          ? { KursUmowny: this.value.transactionTerms.contractualRate }\n          : {}),\n        ...(this.value.transactionTerms?.contractualCurrency\n          ? { WalutaUmowna: this.value.transactionTerms.contractualCurrency }\n          : {}),\n        ...(this.value.transactionTerms?.intermediary !== undefined\n          ? { Posrednik: this.value.transactionTerms.intermediary ? \"1\" : \"0\" }\n          : {}),\n      };\n      faPayload.WarunkiTransakcji = transactionTerms;\n    }\n    const transport = mapTransport(this.value);\n    if (transport) {\n      faPayload.Transport = transport;\n    }\n    const order = mapOrder(this.value);\n    if (order) {\n      faPayload.Zamowienie = order;\n    }\n    if (this.value.attachment && this.value.attachment.blocks.length > 0) {\n      faPayload.Zalacznik = {\n        Blok: this.value.attachment.blocks.map((block) => {\n          const blockTables = block.tables ?? [];\n          return {\n            ...(block.header ? { Naglowek: block.header } : {}),\n            ...(block.paragraphs ? { Akapit: [...block.paragraphs] } : {}),\n            ...(blockTables.length > 0\n              ? {\n                  Tabela: blockTables.map((table) => ({\n                    Naglowki: table.headers,\n                    Wiersze: table.rows,\n                  })),\n                }\n              : {}),\n          };\n        }),\n      };\n    }\n    if (kind === \"advance\" || kind === \"advance_correction\") {\n      if (this.value.advancePayments.length > 0) {\n        faPayload.ZaliczkaCzesciowa = this.value.advancePayments.map((row) => ({\n          P_15Z: money(row.amount),\n          ...(row.currencyRate !== undefined ? { KursWalutyZW: String(row.currencyRate) } : {}),\n        }));\n      }\n    }\n    if (kind === \"settlement\" || kind === \"settlement_correction\") {\n      const settlement = mapSettlement(this.value);\n      if (settlement) {\n        faPayload.Rozliczenie = settlement;\n      }\n    }\n\n    const root: FakturaInput = {\n      Naglowek: {\n        KodFormularza: {\n          systemCode: \"FA (3)\",\n          schemaVersion: \"1-0E\",\n          value: \"FA\",\n        },\n        WariantFormularza: FA3_FORM_VARIANT,\n        DataWytworzeniaFa: this.value.issueDate,\n        SystemInfo: \"ksef-client-typescript-fa3\",\n      },\n      Podmiot1: mapParty(this.value.seller, \"seller\"),\n      Podmiot2: mapBuyer(this.value.buyer),\n      Fa: faPayload,\n    };\n    if (this.value.additionalParties.length > 0) {\n      root.Podmiot3 = this.value.additionalParties.map(mapAdditionalParty);\n    }\n    return {\n      ...root,\n    };\n  }\n\n  async toXml(options: FA3XmlOptions = {}): Promise<string> {\n    const issues = this.validate();\n    if (issues.length > 0) {\n      const detail = issues.map((issue) => issue.message).join(\" \");\n      throw new KsefValidationError(detail);\n    }\n    const xml = buildFakturaXml(this.toFakturaInput(), {\n      schema: \"FA3\",\n      ...(options.pretty !== undefined ? { pretty: options.pretty } : {}),\n    });\n    return options.xsdValidate ? validateAndReturnXml(xml) : xml;\n  }\n}\n\nexport async function validateAndReturnXml(\n  xml: string,\n  validate: (value: string) => Promise<void> = validateFa3Xml,\n): Promise<string> {\n  await validate(xml);\n  return xml;\n}\n\nexport class FA3InvoiceBuilder {\n  private readonly value: FA3DraftInput;\n\n  constructor(invoiceNumber: string, kind: FA3InvoiceKind = \"basic\") {\n    this.value = {\n      invoiceNumber,\n      issueDate: new Date().toISOString(),\n      seller: { name: \"\", taxId: \"\" },\n      buyer: { name: \"\", taxId: \"\" },\n      lines: [],\n      kind,\n      currency: \"PLN\",\n    };\n  }\n\n  issuedOn(value: Date): FA3InvoiceBuilder {\n    this.value.issueDate = value.toISOString();\n    return this;\n  }\n\n  issueDate(value: string): FA3InvoiceBuilder {\n    this.value.issueDate = value;\n    return this;\n  }\n\n  saleDate(value: string): FA3InvoiceBuilder {\n    this.value.saleDate = value;\n    return this;\n  }\n\n  period(from: string, to: string): FA3InvoiceBuilder {\n    this.value.periodFrom = from;\n    this.value.periodTo = to;\n    return this;\n  }\n\n  seller(value: FA3Party): FA3InvoiceBuilder {\n    this.value.seller = { ...value };\n    return this;\n  }\n\n  buyer(value: FA3Party): FA3InvoiceBuilder {\n    this.value.buyer = { ...value };\n    return this;\n  }\n\n  addParty(value: FA3Party): FA3InvoiceBuilder {\n    this.value.additionalParties = [...(this.value.additionalParties ?? []), { ...value }];\n    return this;\n  }\n\n  currency(value: string): FA3InvoiceBuilder {\n    this.value.currency = normalizeCurrency(value);\n    return this;\n  }\n\n  issuePlace(value: string): FA3InvoiceBuilder {\n    this.value.issuePlace = value;\n    return this;\n  }\n\n  additionalDescription(key: string, value: string): FA3InvoiceBuilder {\n    this.value.additionalDescriptions = [\n      ...(this.value.additionalDescriptions ?? []),\n      { key, value },\n    ];\n    return this;\n  }\n\n  contract(number: string, date?: string): FA3InvoiceBuilder {\n    this.value.contract = {\n      number,\n      ...(date ? { date } : {}),\n    };\n    return this;\n  }\n\n  orderReference(number: string, date?: string): FA3InvoiceBuilder {\n    const current = this.value.order ?? {};\n    this.value.order = {\n      ...current,\n      number,\n      ...(date ? { date } : {}),\n    };\n    return this;\n  }\n\n  order(totalGross: number | string): FA3InvoiceBuilder {\n    const current = this.value.order ?? {};\n    this.value.order = {\n      ...current,\n      totalGross,\n    };\n    return this;\n  }\n\n  orderLine(value: {\n    description: string;\n    quantity: number | string;\n    unitNetPrice: number | string;\n    vatRate?: number | string | null;\n  }): FA3InvoiceBuilder {\n    const current = this.value.order ?? {};\n    const lines = current.lines ?? [];\n    this.value.order = {\n      ...current,\n      lines: [...lines, { ...value }],\n    };\n    return this;\n  }\n\n  transactionTerms(value: {\n    deliveryTerms?: string;\n    contractualRate?: string;\n    contractualCurrency?: string;\n    intermediary?: boolean;\n  }): FA3InvoiceBuilder {\n    this.value.transactionTerms = { ...value };\n    return this;\n  }\n\n  transport(\n    kind: string,\n    options: { orderNumber?: string; cargoDescription?: string; packageUnit?: string } = {},\n  ): FA3InvoiceBuilder {\n    this.value.transport = {\n      kind,\n      ...(options.orderNumber ? { orderNumber: options.orderNumber } : {}),\n      ...(options.cargoDescription ? { cargoDescription: options.cargoDescription } : {}),\n      ...(options.packageUnit ? { packageUnit: options.packageUnit } : {}),\n    };\n    return this;\n  }\n\n  correction(value: {\n    reason: string;\n    correctedInvoiceNumber: string;\n    correctedInvoiceDate?: string;\n    correctedKsefNumber?: string;\n    correctionType?: string;\n  }): FA3InvoiceBuilder {\n    this.value.correctionReason = value.reason;\n    this.value.correctedInvoiceNumber = value.correctedInvoiceNumber;\n    if (value.correctedInvoiceDate !== undefined) {\n      this.value.correctedInvoiceDate = value.correctedInvoiceDate;\n    }\n    if (value.correctedKsefNumber !== undefined) {\n      this.value.correctedKsefNumber = value.correctedKsefNumber;\n    }\n    if (value.correctionType !== undefined) {\n      this.value.correctionType = value.correctionType;\n    }\n    return this;\n  }\n\n  correctedPeriod(value: string): FA3InvoiceBuilder {\n    this.value.correctedPeriod = value;\n    return this;\n  }\n\n  correctedInvoiceNumberOverride(value: string): FA3InvoiceBuilder {\n    this.value.correctedInvoiceNumberOverride = value;\n    return this;\n  }\n\n  settlesAdvance(value: { invoiceNumber?: string; ksefNumber?: string } = {}): FA3InvoiceBuilder {\n    if (value.invoiceNumber === undefined) {\n      delete this.value.advanceInvoiceNumber;\n    } else {\n      this.value.advanceInvoiceNumber = value.invoiceNumber;\n    }\n    if (value.ksefNumber === undefined) {\n      delete this.value.advanceKsefNumber;\n    } else {\n      this.value.advanceKsefNumber = value.ksefNumber;\n    }\n    return this;\n  }\n\n  advanceReference(value: { invoiceNumber?: string; ksefNumber?: string }): FA3InvoiceBuilder {\n    if (value.invoiceNumber === undefined) {\n      delete this.value.advanceInvoiceNumber;\n    } else {\n      this.value.advanceInvoiceNumber = value.invoiceNumber;\n    }\n    if (value.ksefNumber === undefined) {\n      delete this.value.advanceKsefNumber;\n    } else {\n      this.value.advanceKsefNumber = value.ksefNumber;\n    }\n    return this;\n  }\n\n  advancePayment(value: FA3AdvancePayment): FA3InvoiceBuilder {\n    this.value.advancePayments = [...(this.value.advancePayments ?? []), { ...value }];\n    return this;\n  }\n\n  settlementAmount(value: number | string): FA3InvoiceBuilder {\n    this.value.settlementAmount = value;\n    return this;\n  }\n\n  settlementDetails(value: FA3Settlement): FA3InvoiceBuilder {\n    this.value.settlement = {\n      ...value,\n      charges: (value.charges ?? []).map((row) => ({ ...row })),\n      deductions: (value.deductions ?? []).map((row) => ({ ...row })),\n    };\n    return this;\n  }\n\n  payment(value: FA3PaymentTerms): FA3InvoiceBuilder {\n    this.value.paymentTerms = {\n      ...value,\n      partialPayments: (value.partialPayments ?? []).map((row) => ({ ...row })),\n      bankAccounts: (value.bankAccounts ?? []).map((row) => ({ ...row })),\n      factorBankAccounts: (value.factorBankAccounts ?? []).map((row) => ({ ...row })),\n    };\n    return this;\n  }\n\n  bankAccount(value: FA3BankAccount): FA3InvoiceBuilder {\n    const current = this.value.paymentTerms ?? {};\n    this.value.paymentTerms = {\n      ...current,\n      bankAccounts: [...(current.bankAccounts ?? []), { ...value }],\n    };\n    return this;\n  }\n\n  paymentLink(value: string, ipksef?: string): FA3InvoiceBuilder {\n    const current = this.value.paymentTerms ?? {};\n    this.value.paymentTerms = {\n      ...current,\n      paymentLink: value,\n      ...(ipksef ? { ipksef } : {}),\n    };\n    return this;\n  }\n\n  paymentDue(\n    date: string,\n    method: \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" | \"transfer\" | \"cash\" | \"card\" | \"voucher\" | \"check\" | \"credit\" | \"compensation\" | \"other\" = \"6\",\n  ): FA3InvoiceBuilder {\n    const current = this.value.paymentTerms ?? {};\n    this.value.paymentTerms = {\n      ...current,\n      dueDate: date,\n      method,\n    };\n    return this;\n  }\n\n  paymentDueDescription(\n    amount: number,\n    unit: string,\n    startsFrom: string,\n    method: \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" | \"transfer\" | \"cash\" | \"card\" | \"voucher\" | \"check\" | \"credit\" | \"compensation\" | \"other\" = \"6\",\n  ): FA3InvoiceBuilder {\n    const current = this.value.paymentTerms ?? {};\n    this.value.paymentTerms = {\n      ...current,\n      dueDescription: `${amount} ${unit} od ${startsFrom}`,\n      method,\n    };\n    return this;\n  }\n\n  paid(value: string): FA3InvoiceBuilder {\n    const current = this.value.paymentTerms ?? {};\n    this.value.paymentTerms = {\n      ...current,\n      paidDate: value,\n    };\n    return this;\n  }\n\n  partiallyPaid(value: {\n    amount: number | string;\n    paidOn: string;\n    method?: FA3PaymentMethod;\n    otherMethodDescription?: string;\n  }): FA3InvoiceBuilder {\n    const current = this.value.paymentTerms ?? {};\n    const list = current.partialPayments ?? [];\n    this.value.paymentTerms = {\n      ...current,\n      partialPayments: [...list, { ...value }],\n    };\n    return this;\n  }\n\n  foreignCurrencyRate(value: number | string): FA3InvoiceBuilder {\n    this.value.foreignCurrencyRate = value;\n    return this;\n  }\n\n  asSimplifiedReceiptLike(): FA3InvoiceBuilder {\n    this.value.simplifiedReceiptLike = true;\n    return this;\n  }\n\n  attachmentText(value: string): FA3InvoiceBuilder {\n    this.value.attachmentText = value;\n    return this;\n  }\n\n  attachment(value: {\n    blocks: Array<{\n      header?: string;\n      paragraphs?: string[];\n      tables?: Array<{ headers: string[]; rows: string[][] }>;\n    }>;\n  }): FA3InvoiceBuilder {\n    this.value.attachment = {\n      blocks: value.blocks.map((block) => ({\n        ...block,\n        ...(block.paragraphs ? { paragraphs: [...block.paragraphs] } : {}),\n        ...(block.tables\n          ? {\n              tables: block.tables.map((table) => ({\n                headers: [...table.headers],\n                rows: table.rows.map((row) => [...row]),\n              })),\n            }\n          : {}),\n      })),\n    };\n    return this;\n  }\n\n  addLine(value: FA3Line): FA3InvoiceBuilder {\n    this.value.lines.push({ ...value });\n    return this;\n  }\n\n  addGoodsLine(\n    description: string,\n    options: {\n      quantity: number | string;\n      unitNetPrice: number | string;\n      unit?: string;\n      vatRate?: number | string | null;\n      vatCode?: string;\n      vatAmountPln?: number | string | null;\n      xiiVatRate?: number | string | null;\n      gtu?: string;\n      procedure?: string;\n      annex15?: boolean;\n      netAmount?: number | string;\n      vatAmount?: number | string;\n      grossAmount?: number | string;\n    },\n  ): FA3InvoiceBuilder {\n    return this.addLine({\n      description,\n      quantity: options.quantity,\n      unit: options.unit ?? \"szt\",\n      unitNetPrice: options.unitNetPrice,\n      ...(options.vatRate !== undefined ? { vatRate: options.vatRate } : {}),\n      ...(options.vatCode !== undefined ? { vatCode: options.vatCode } : {}),\n      ...(options.vatAmountPln !== undefined ? { vatAmountPln: options.vatAmountPln } : {}),\n      ...(options.xiiVatRate !== undefined ? { xiiVatRate: options.xiiVatRate } : {}),\n      ...(options.gtu !== undefined ? { gtu: options.gtu } : {}),\n      ...(options.procedure !== undefined ? { procedure: options.procedure } : {}),\n      ...(options.annex15 !== undefined ? { annex15: options.annex15 } : {}),\n      ...(options.netAmount !== undefined ? { netAmount: options.netAmount } : {}),\n      ...(options.vatAmount !== undefined ? { vatAmount: options.vatAmount } : {}),\n      ...(options.grossAmount !== undefined ? { grossAmount: options.grossAmount } : {}),\n    });\n  }\n\n  addServiceLine(\n    description: string,\n    options: Parameters<FA3InvoiceBuilder[\"addGoodsLine\"]>[1],\n  ): FA3InvoiceBuilder {\n    return this.addGoodsLine(description, options);\n  }\n\n  splitPayment(): FA3InvoiceBuilder {\n    const current = this.value.paymentTerms ?? {};\n    this.value.paymentTerms = {\n      ...current,\n      method: \"6\",\n    };\n    this.value.splitPaymentAnnotation = true;\n    return this;\n  }\n\n  addCorrectedLineBeforeAfter(value: { before: FA3Line; after: FA3Line }): FA3InvoiceBuilder {\n    this.value.lines.push({ ...value.before, beforeCorrection: true });\n    this.value.lines.push({ ...value.after, beforeCorrection: false });\n    return this;\n  }\n\n  rawExtension(pathValue: string, xml: string): FA3InvoiceBuilder {\n    this.value.rawExtensions = [...(this.value.rawExtensions ?? []), { path: pathValue, xml }];\n    return this;\n  }\n\n  build(): FA3Draft {\n    return new FA3Draft(this.value);\n  }\n\n  validate(): FA3ValidationIssue[] {\n    return this.build().validate();\n  }\n\n  async toXml(options: FA3XmlOptions = {}): Promise<string> {\n    return this.build().toXml(options);\n  }\n}\n\nexport class BasicInvoiceBuilder extends FA3InvoiceBuilder {\n  constructor(invoiceNumber: string) {\n    super(invoiceNumber, \"basic\");\n  }\n}\n\nexport class SimplifiedInvoiceBuilder extends FA3InvoiceBuilder {\n  constructor(invoiceNumber: string) {\n    super(invoiceNumber, \"simplified\");\n  }\n}\n\nexport class CorrectionInvoiceBuilder extends FA3InvoiceBuilder {\n  constructor(invoiceNumber: string, kind: FA3InvoiceKind = \"correction\") {\n    super(invoiceNumber, kind);\n  }\n}\n\nexport class AdvanceInvoiceBuilder extends FA3InvoiceBuilder {\n  constructor(invoiceNumber: string, kind: FA3InvoiceKind = \"advance\") {\n    super(invoiceNumber, kind);\n  }\n}\n\nexport class SettlementInvoiceBuilder extends FA3InvoiceBuilder {\n  constructor(invoiceNumber: string, kind: FA3InvoiceKind = \"settlement\") {\n    super(invoiceNumber, kind);\n  }\n}\n\nexport class AdvanceCorrectionInvoiceBuilder extends FA3InvoiceBuilder {\n  constructor(invoiceNumber: string) {\n    super(invoiceNumber, \"advance_correction\");\n  }\n}\n\nexport class SettlementCorrectionInvoiceBuilder extends FA3InvoiceBuilder {\n  constructor(invoiceNumber: string) {\n    super(invoiceNumber, \"settlement_correction\");\n  }\n}\n\nexport class FA3Invoice {\n  static basic(invoiceNumber: string): BasicInvoiceBuilder {\n    return new BasicInvoiceBuilder(invoiceNumber);\n  }\n\n  static simplified(invoiceNumber: string): SimplifiedInvoiceBuilder {\n    return new SimplifiedInvoiceBuilder(invoiceNumber);\n  }\n\n  static correction(invoiceNumber: string): CorrectionInvoiceBuilder {\n    return new CorrectionInvoiceBuilder(invoiceNumber);\n  }\n\n  static advance(invoiceNumber: string): AdvanceInvoiceBuilder {\n    return new AdvanceInvoiceBuilder(invoiceNumber);\n  }\n\n  static settlement(invoiceNumber: string): SettlementInvoiceBuilder {\n    return new SettlementInvoiceBuilder(invoiceNumber);\n  }\n\n  static advanceCorrection(invoiceNumber: string): AdvanceCorrectionInvoiceBuilder {\n    return new AdvanceCorrectionInvoiceBuilder(invoiceNumber);\n  }\n\n  static settlementCorrection(invoiceNumber: string): SettlementCorrectionInvoiceBuilder {\n    return new SettlementCorrectionInvoiceBuilder(invoiceNumber);\n  }\n\n  static advance_correction(invoiceNumber: string): AdvanceCorrectionInvoiceBuilder {\n    return new AdvanceCorrectionInvoiceBuilder(invoiceNumber);\n  }\n\n  static settlement_correction(invoiceNumber: string): SettlementCorrectionInvoiceBuilder {\n    return new SettlementCorrectionInvoiceBuilder(invoiceNumber);\n  }\n}\n\nexport class FA3BatchDraft {\n  readonly drafts: FA3Draft[];\n\n  constructor(drafts: FA3Draft[]) {\n    this.drafts = drafts;\n  }\n\n  toDict(): { drafts: FA3DraftInput[] } {\n    return {\n      drafts: this.drafts.map((draft) => draft.toDict()),\n    };\n  }\n\n  toJson(): string {\n    return JSON.stringify(this.toDict(), null, 2);\n  }\n\n  static fromJson(value: string): FA3BatchDraft {\n    const parsed = JSON.parse(value) as { drafts?: FA3DraftInput[] };\n    return new FA3BatchDraft((parsed.drafts ?? []).map((draft) => FA3Draft.fromDict(draft)));\n  }\n\n  async toXmlFiles(outDir: string, options: FA3XmlOptions = {}): Promise<string[]> {\n    const output = path.resolve(outDir);\n    await mkdir(output, { recursive: true });\n    const files: string[] = [];\n    for (let i = 0; i < this.drafts.length; i += 1) {\n      const draft = this.drafts[i];\n      if (!draft) {\n        continue;\n      }\n      const xml = await draft.toXml(options);\n      const fileName = `${sanitizeFileName(draft.toDict().invoiceNumber, `invoice-${i + 1}`)}.xml`;\n      const target = path.join(output, fileName);\n      await writeFile(target, xml, \"utf8\");\n      files.push(target);\n    }\n    return files;\n  }\n\n  async toXmlZip(targetPath: string, options: FA3XmlOptions = {}): Promise<string> {\n    const entries = [];\n    for (let i = 0; i < this.drafts.length; i += 1) {\n      const draft = this.drafts[i];\n      if (!draft) {\n        continue;\n      }\n      const xml = await draft.toXml(options);\n      entries.push({\n        fileName: `${sanitizeFileName(draft.toDict().invoiceNumber, `invoice-${i + 1}`)}.xml`,\n        content: Buffer.from(xml, \"utf8\"),\n      });\n    }\n    const zip = await createZip(entries);\n    const resolved = path.resolve(targetPath);\n    await mkdir(path.dirname(resolved), { recursive: true });\n    await writeFile(resolved, zip);\n    return resolved;\n  }\n}\n\nexport function sanitizeFileName(value: string, fallback = \"faktura\"): string {\n  const candidate = value.trim().replace(/[^A-Za-z0-9_.-]+/g, \"_\");\n  return candidate || fallback;\n}\n\nexport const BaseFA3Builder = FA3InvoiceBuilder;\n","import {\n  FA3BankAccount,\n  FA3Discount,\n  FA3Line,\n  FA3PartialPayment,\n  FA3Party,\n  FA3PartyIdentifier,\n  FA3PaymentMethod,\n  FA3PaymentTerms,\n  FA3Settlement,\n  FA3SettlementAdjustment,\n  FA3TaxCategory,\n  FA3ValidationIssue,\n} from \"./types\";\nimport { PartyIdentifierKind } from \"./identifier\";\n\nexport class FA3ValidationResult {\n  readonly errors: FA3ValidationIssue[];\n  readonly warnings: FA3ValidationIssue[];\n\n  constructor(errors: FA3ValidationIssue[] = [], warnings: FA3ValidationIssue[] = []) {\n    this.errors = errors;\n    this.warnings = warnings;\n  }\n}\n\nexport class Address {\n  static polish(line1: string, line2?: string, line3?: string): {\n    countryCode: \"PL\";\n    line1: string;\n    line2?: string;\n    line3?: string;\n  } {\n    return {\n      countryCode: \"PL\",\n      line1,\n      ...(line2 ? { line2 } : {}),\n      ...(line3 ? { line3 } : {}),\n    };\n  }\n\n  static foreign(\n    countryCode: string,\n    line1: string,\n    line2?: string,\n    line3?: string,\n  ): { countryCode: string; line1: string; line2?: string; line3?: string } {\n    return {\n      countryCode: countryCode.toUpperCase(),\n      line1,\n      ...(line2 ? { line2 } : {}),\n      ...(line3 ? { line3 } : {}),\n    };\n  }\n}\n\nexport class Contact {\n  static create(value: { email?: string; phone?: string }): { email?: string; phone?: string } {\n    return { ...value };\n  }\n}\n\nexport const ThirdPartyRole = {\n  ORIGINAL_ENTITY: \"1\",\n  ADDITIONAL_BUYER: \"2\",\n  RECIPIENT: \"3\",\n  PAYER: \"4\",\n  JST_SUBUNIT: \"8\",\n  VAT_GROUP_MEMBER: \"10\",\n  OTHER: \"11\",\n} as const;\n\nexport const AuthorizedPartyRole = {\n  REPRESENTATIVE: \"1\",\n  BAILIFF: \"2\",\n  ENFORCEMENT_AUTHORITY: \"3\",\n} as const;\n\nexport { PartyIdentifierKind } from \"./identifier\";\n\nexport class PartyIdentifier {\n  static polishNip(value: string): FA3PartyIdentifier {\n    return { kind: PartyIdentifierKind.NIP, value };\n  }\n\n  static euVat(countryCode: string, vatId: string): FA3PartyIdentifier {\n    return {\n      kind: PartyIdentifierKind.EU_VAT,\n      value: vatId,\n      countryCode: countryCode.toUpperCase(),\n    };\n  }\n\n  static foreign(identifier: string, countryCode?: string): FA3PartyIdentifier {\n    return {\n      kind: PartyIdentifierKind.FOREIGN,\n      value: identifier,\n      ...(countryCode ? { countryCode: countryCode.toUpperCase() } : {}),\n    };\n  }\n\n  static internal(value: string): FA3PartyIdentifier {\n    return { kind: PartyIdentifierKind.INTERNAL, value };\n  }\n\n  static none(): FA3PartyIdentifier {\n    return { kind: PartyIdentifierKind.NONE };\n  }\n}\n\nexport class InvoiceParty {\n  static polishCompany(input: {\n    nip: string;\n    name: string;\n    address?: string;\n    email?: string;\n    phone?: string;\n  }): FA3Party {\n    return {\n      name: input.name,\n      taxId: input.nip,\n      identifier: PartyIdentifier.polishNip(input.nip),\n      ...(input.address ? { addressLine1: input.address } : {}),\n      ...(input.email ? { email: input.email } : {}),\n      ...(input.phone ? { phone: input.phone } : {}),\n    };\n  }\n\n  static euCompany(input: {\n    vatId: string;\n    countryCode: string;\n    name: string;\n    address?: string;\n    email?: string;\n    phone?: string;\n  }): FA3Party {\n    const identifier = PartyIdentifier.euVat(input.countryCode, input.vatId);\n    return {\n      name: input.name,\n      taxId: `${input.countryCode.toUpperCase()}${input.vatId}`,\n      identifier,\n      countryCode: input.countryCode.toUpperCase(),\n      ...(input.address ? { addressLine1: input.address } : {}),\n      ...(input.email ? { email: input.email } : {}),\n      ...(input.phone ? { phone: input.phone } : {}),\n    };\n  }\n\n  static foreignCompany(input: {\n    identifier: string;\n    countryCode: string;\n    name: string;\n    address?: string;\n  }): FA3Party {\n    const identifier = PartyIdentifier.foreign(input.identifier, input.countryCode);\n    return {\n      name: input.name,\n      taxId: `${input.countryCode.toUpperCase()}:${input.identifier}`,\n      identifier,\n      countryCode: input.countryCode.toUpperCase(),\n      ...(input.address ? { addressLine1: input.address } : {}),\n    };\n  }\n\n  static withoutTaxId(input: { name: string; countryCode?: string; address?: string }): FA3Party {\n    return {\n      name: input.name,\n      taxId: \"BRAK\",\n      identifier: PartyIdentifier.none(),\n      countryCode: (input.countryCode ?? \"PL\").toUpperCase(),\n      ...(input.address ? { addressLine1: input.address } : {}),\n    };\n  }\n}\n\nexport const Party = InvoiceParty;\n\nexport class TaxCategory {\n  static standard23(): FA3TaxCategory {\n    return { code: \"23\", vatRate: 23 };\n  }\n  static standard22(): FA3TaxCategory {\n    return { code: \"22\", vatRate: 22 };\n  }\n  static reduced8(): FA3TaxCategory {\n    return { code: \"8\", vatRate: 8 };\n  }\n  static reduced7(): FA3TaxCategory {\n    return { code: \"7\", vatRate: 7 };\n  }\n  static reduced5(): FA3TaxCategory {\n    return { code: \"5\", vatRate: 5 };\n  }\n  static zeroDomestic(): FA3TaxCategory {\n    return { code: \"0 KR\", vatRate: 0 };\n  }\n  static zeroWdt(): FA3TaxCategory {\n    return { code: \"0 WDT\", vatRate: 0 };\n  }\n  static zeroExport(): FA3TaxCategory {\n    return { code: \"0 EX\", vatRate: 0 };\n  }\n  static exempt(basis: string): FA3TaxCategory {\n    return { code: \"zw\", exemptionBasis: basis, vatRate: null };\n  }\n  static outsideCountry(): FA3TaxCategory {\n    return { code: \"np I\", vatRate: null };\n  }\n  static serviceArticle100(): FA3TaxCategory {\n    return { code: \"np II\", vatRate: null };\n  }\n  static reverseCharge(): FA3TaxCategory {\n    return { code: \"oo\", vatRate: null };\n  }\n  static xii(rate: number | string): FA3TaxCategory {\n    return { xiiVatRate: rate, vatRate: null };\n  }\n}\n\nexport const VatClass = TaxCategory;\n\nexport class Discount {\n  static amount(value: number | string, reason?: string): FA3Discount {\n    return {\n      kind: \"amount\",\n      value,\n      ...(reason ? { reason } : {}),\n    };\n  }\n\n  static percent(value: number | string, reason?: string): FA3Discount {\n    return {\n      kind: \"percent\",\n      value,\n      ...(reason ? { reason } : {}),\n    };\n  }\n}\n\nexport class InvoiceLine {\n  static goods(\n    description: string,\n    input: {\n      quantity: number | string;\n      unitNetPrice: number | string;\n      unit?: string;\n      vatRate?: number | string | null;\n      beforeCorrection?: boolean;\n      gtu?: string;\n      procedure?: string;\n      annex15?: boolean;\n    },\n  ): FA3Line {\n    return {\n      description,\n      quantity: input.quantity,\n      unit: input.unit ?? \"szt\",\n      unitNetPrice: input.unitNetPrice,\n      ...(input.vatRate !== undefined ? { vatRate: input.vatRate } : {}),\n      ...(input.beforeCorrection !== undefined ? { beforeCorrection: input.beforeCorrection } : {}),\n      ...(input.gtu !== undefined ? { gtu: input.gtu } : {}),\n      ...(input.procedure !== undefined ? { procedure: input.procedure } : {}),\n      ...(input.annex15 !== undefined ? { annex15: input.annex15 } : {}),\n    };\n  }\n\n  static service(description: string, input: Parameters<typeof InvoiceLine.goods>[1]): FA3Line {\n    return InvoiceLine.goods(description, input);\n  }\n\n  static correctedBefore(\n    description: string,\n    input: Omit<Parameters<typeof InvoiceLine.goods>[1], \"beforeCorrection\">,\n  ): FA3Line {\n    return InvoiceLine.goods(description, { ...input, beforeCorrection: true });\n  }\n\n  static correctedAfter(\n    description: string,\n    input: Omit<Parameters<typeof InvoiceLine.goods>[1], \"beforeCorrection\">,\n  ): FA3Line {\n    return InvoiceLine.goods(description, { ...input, beforeCorrection: false });\n  }\n}\n\nexport interface CorrectionReference {\n  invoiceNumber: string;\n  issueDate?: string;\n  ksefNumber?: string;\n}\n\nexport type BankAccount = FA3BankAccount;\n\nexport interface PaymentTerms extends FA3PaymentTerms {\n  bankAccounts?: BankAccount[];\n  paymentLink?: string;\n  ipksef?: string;\n}\n\nexport class PartialPayment {\n  static create(\n    amount: number | string,\n    paidOn: string,\n    options: {\n      method?: FA3PaymentMethod;\n      otherMethodDescription?: string;\n    } = {},\n  ): FA3PartialPayment {\n    return {\n      amount,\n      paidOn,\n      ...(options.method !== undefined ? { method: options.method } : {}),\n      ...(options.otherMethodDescription !== undefined\n        ? { otherMethodDescription: options.otherMethodDescription }\n        : {}),\n    };\n  }\n}\n\nexport class SettlementAdjustment {\n  static create(amount: number | string, reason: string): FA3SettlementAdjustment {\n    return { amount, reason };\n  }\n}\n\nexport type Settlement = FA3Settlement;\n\nexport interface Annotation {\n  key: string;\n  value: string;\n}\n\nexport class AnnotationSet {\n  readonly items: Annotation[];\n\n  constructor(items: Annotation[] = []) {\n    this.items = items;\n  }\n\n  static default(): AnnotationSet {\n    return new AnnotationSet([]);\n  }\n\n  static splitPayment(): Annotation {\n    return { key: \"split_payment\", value: \"1\" };\n  }\n\n  static cashMethod(): Annotation {\n    return { key: \"cash_method\", value: \"1\" };\n  }\n}\n\nexport interface AttachmentTable {\n  headers: string[];\n  rows: string[][];\n  columnTypes?: string[];\n  metadata?: Array<[string, string]>;\n  description?: string;\n  footer?: string[];\n}\n\nexport interface AttachmentBlock {\n  header?: string;\n  metadata?: Array<[string, string]>;\n  paragraphs?: string[];\n  tables?: AttachmentTable[];\n}\n\nexport interface Attachment {\n  blocks: AttachmentBlock[];\n}\n\nexport interface RawXmlExtension {\n  path: string;\n  xml: string;\n}\n","import { FA3AdvancePayment } from \"./types\";\n\nexport class AdditionalDescription {\n  readonly key: string;\n  readonly value: string;\n\n  constructor(key: string, value: string) {\n    this.key = key;\n    this.value = value;\n  }\n\n  static keyValue(key: string, value: string): AdditionalDescription {\n    return new AdditionalDescription(key, value);\n  }\n}\n\nexport class Registry {\n  readonly kind: string;\n  readonly number: string;\n  readonly fullName: string | undefined;\n\n  constructor(kind: string, number: string, fullName?: string) {\n    this.kind = kind;\n    this.number = number;\n    this.fullName = fullName;\n  }\n\n  static krsEntry(number: string, fullName?: string): Registry {\n    return new Registry(\"KRS\", number, fullName);\n  }\n}\n\nexport class Footer {\n  readonly text: string;\n\n  constructor(text: string) {\n    this.text = text;\n  }\n}\n\nexport interface LineIdentifiers {\n  uniqueId?: string;\n  internalIndex?: string;\n  gtin?: string;\n  pkwiu?: string;\n  cn?: string;\n  pkob?: string;\n}\n\nexport class PaymentDue {\n  static date(value: string): string {\n    return value;\n  }\n\n  static description(amount: number, unit: string, startsFrom: string): string {\n    return `${amount} ${unit} od ${startsFrom}`;\n  }\n}\n\nexport interface NewTransportMeans {\n  allowedDate?: string;\n  rowNumber?: number;\n  kind?: string;\n  mileage?: string;\n  serialNumber?: string;\n  make?: string;\n  model?: string;\n}\n\nexport class CorrectedAdvanceState {\n  readonly text: string;\n  constructor(text: string) {\n    this.text = text;\n  }\n}\n\nexport class ExciseRefund {\n  readonly enabled: boolean;\n  constructor(enabled = true) {\n    this.enabled = enabled;\n  }\n}\n\nexport interface OrderLine {\n  description: string;\n  quantity: number | string;\n  unitNetPrice: number | string;\n  vatRate?: number | string | null;\n}\n\nexport interface Order {\n  number?: string;\n  date?: string;\n  totalGross?: number | string;\n  lines?: OrderLine[];\n}\n\nexport interface Contract {\n  number: string;\n  date?: string;\n}\n\nexport interface Transport {\n  kind: string;\n  orderNumber?: string;\n  cargoDescription?: string;\n  packageUnit?: string;\n}\n\nexport interface TransactionTerms {\n  deliveryTerms?: string;\n  contractualRate?: string;\n  contractualCurrency?: string;\n  intermediary?: boolean;\n}\n\nexport class AdvancePayment {\n  static create(\n    amount: number | string,\n    options: {\n      vatRate?: number | string | null;\n      paidOn?: string;\n      currencyRate?: number | string;\n    } = {},\n  ): FA3AdvancePayment {\n    return {\n      amount,\n      ...(options.vatRate !== undefined ? { vatRate: options.vatRate } : {}),\n      ...(options.paidOn !== undefined ? { paidOn: options.paidOn } : {}),\n      ...(options.currencyRate !== undefined ? { currencyRate: options.currencyRate } : {}),\n    };\n  }\n}\n\nexport interface ValidationContext {\n  source?: string;\n  rowNumber?: number;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { FA3BatchDraft, FA3Draft } from \"./builder\";\nimport type { FA3DraftInput, FA3ValidationIssue } from \"./types\";\n\nexport const ImportMode = {\n  NORMAL: \"normal\",\n  VALIDATE_ONLY: \"validate_only\",\n  FAIL_FAST: \"fail_fast\",\n} as const;\n\nexport type ImportModeValue = (typeof ImportMode)[keyof typeof ImportMode];\n\nexport class FA3InvalidRow {\n  readonly rowNumber: number | undefined;\n  readonly invoiceNumber: string | undefined;\n  readonly message: string;\n\n  constructor(message: string, rowNumber?: number, invoiceNumber?: string) {\n    this.message = message;\n    this.rowNumber = rowNumber;\n    this.invoiceNumber = invoiceNumber;\n  }\n}\n\nexport class FA3ImportResult {\n  readonly validDrafts: FA3Draft[];\n  readonly invalidRows: FA3InvalidRow[];\n  readonly errors: FA3ValidationIssue[];\n  readonly warnings: FA3ValidationIssue[];\n\n  constructor(value: {\n    validDrafts?: FA3Draft[];\n    invalidRows?: FA3InvalidRow[];\n    errors?: FA3ValidationIssue[];\n    warnings?: FA3ValidationIssue[];\n  } = {}) {\n    this.validDrafts = [...(value.validDrafts ?? [])];\n    this.invalidRows = [...(value.invalidRows ?? [])];\n    this.errors = [...(value.errors ?? [])];\n    this.warnings = [...(value.warnings ?? [])];\n  }\n}\n\nexport class FA3ImportError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"FA3ImportError\";\n  }\n}\n\nfunction toIssue(message: string): FA3ValidationIssue {\n  return {\n    code: \"import_error\",\n    message,\n  };\n}\n\nfunction loadPayload(source: string | Record<string, unknown>): unknown {\n  if (typeof source !== \"string\") {\n    return source;\n  }\n  const resolved = path.resolve(source);\n  if (fs.existsSync(resolved)) {\n    return JSON.parse(fs.readFileSync(resolved, \"utf8\"));\n  }\n  return JSON.parse(source);\n}\n\nfunction draftRows(payload: unknown): FA3DraftInput[] {\n  if (!payload || typeof payload !== \"object\") {\n    return [];\n  }\n  const raw = payload as Record<string, unknown>;\n  const rows = raw.drafts ?? raw.faktury;\n  if (!Array.isArray(rows)) {\n    return [];\n  }\n  return rows as FA3DraftInput[];\n}\n\nexport class FA3Importer {\n  static fromJson(\n    source: string | Record<string, unknown>,\n    options: { mode?: ImportModeValue } = {},\n  ): FA3ImportResult {\n    const mode = options.mode ?? ImportMode.NORMAL;\n    let payload: unknown;\n    try {\n      payload = loadPayload(source);\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error);\n      if (mode === ImportMode.FAIL_FAST) {\n        throw new FA3ImportError(`Nie można odczytać JSON: ${message}`);\n      }\n      return new FA3ImportResult({\n        validDrafts: [],\n        invalidRows: [new FA3InvalidRow(`Nie można odczytać JSON: ${message}`)],\n        errors: [toIssue(`Nie można odczytać JSON: ${message}`)],\n        warnings: [],\n      });\n    }\n\n    const rows = draftRows(payload);\n    if (rows.length === 0) {\n      const message = \"JSON draft jest nieprawidłowy: oczekiwano pola drafts lub faktury.\";\n      if (mode === ImportMode.FAIL_FAST) {\n        throw new FA3ImportError(message);\n      }\n      return new FA3ImportResult({\n        validDrafts: [],\n        invalidRows: [new FA3InvalidRow(message)],\n        errors: [toIssue(message)],\n        warnings: [],\n      });\n    }\n\n    const validDrafts: FA3Draft[] = [];\n    const invalidRows: FA3InvalidRow[] = [];\n    const errors: FA3ValidationIssue[] = [];\n    for (const [index, row] of rows.entries()) {\n      try {\n        const draft = FA3Draft.fromDict(row);\n        const issues = draft.validate();\n        if (issues.length > 0) {\n          const message = issues.map((item) => item.message).join(\" \");\n          if (mode === ImportMode.FAIL_FAST) {\n            throw new FA3ImportError(message);\n          }\n          invalidRows.push(new FA3InvalidRow(message, index + 1, draft.toDict().invoiceNumber));\n          errors.push(...issues);\n          continue;\n        }\n        if (mode !== ImportMode.VALIDATE_ONLY) {\n          validDrafts.push(draft);\n        }\n      } catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        if (mode === ImportMode.FAIL_FAST) {\n          throw new FA3ImportError(message);\n        }\n        invalidRows.push(new FA3InvalidRow(message, index + 1));\n        errors.push(toIssue(message));\n      }\n    }\n\n    return new FA3ImportResult({ validDrafts, invalidRows, errors, warnings: [] });\n  }\n\n  static fromXlsx(): never {\n    throw new FA3ImportError(\n      \"Import XLSX nie jest jeszcze dostępny w TypeScript SDK. Użyj importu JSON.\",\n    );\n  }\n\n  static from_json(\n    source: string | Record<string, unknown>,\n    options: { mode?: ImportModeValue } = {},\n  ): FA3ImportResult {\n    return FA3Importer.fromJson(source, options);\n  }\n}\n\nexport function toBatchDraft(result: FA3ImportResult): FA3BatchDraft {\n  return new FA3BatchDraft(result.validDrafts);\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { FA3BatchDraft, FA3Invoice } from \"./builder\";\n\nexport class FA3Template {\n  static sampleBatch(): FA3BatchDraft {\n    const draft = FA3Invoice.basic(\"FV/SAMPLE/1\")\n      .issueDate(\"2026-01-15\")\n      .seller({\n        name: \"Sprzedawca Sp. z o.o.\",\n        taxId: \"1234567890\",\n        addressLine1: \"ul. Prosta 1, 00-001 Warszawa\",\n      })\n      .buyer({\n        name: \"Nabywca Sp. z o.o.\",\n        taxId: \"1111111111\",\n        addressLine1: \"ul. Testowa 2, 00-002 Warszawa\",\n      })\n      .addLine({\n        description: \"Usługa\",\n        quantity: 1,\n        unit: \"szt\",\n        unitNetPrice: 100,\n        vatRate: 23,\n      })\n      .build();\n    return new FA3BatchDraft([draft]);\n  }\n\n  static createJson(targetPath: string): string {\n    const resolved = path.resolve(targetPath);\n    const batch = FA3Template.sampleBatch();\n    fs.mkdirSync(path.dirname(resolved), { recursive: true });\n    fs.writeFileSync(resolved, batch.toJson(), \"utf8\");\n    return resolved;\n  }\n\n  static create_xlsx(): never {\n    throw new Error(\n      \"Szablon XLSX nie jest jeszcze dostępny w TypeScript SDK. Użyj FA3Template.createJson(...).\",\n    );\n  }\n}\n","import type {\n  FA3InvoiceKind as FA3InvoiceKindType,\n  FA3Line as FA3LineType,\n  FA3Party as FA3PartyType,\n  FA3PaymentMethod,\n  FA3Settlement as FA3SettlementType,\n  FA3ValidationIssue as FA3ValidationIssueType,\n} from \"./types\";\nimport type {\n  Annotation as AnnotationType,\n  Attachment as AttachmentType,\n  AttachmentBlock as AttachmentBlockType,\n  AttachmentTable as AttachmentTableType,\n  BankAccount as BankAccountType,\n  CorrectionReference as CorrectionReferenceType,\n  PaymentTerms as PaymentTermsType,\n  RawXmlExtension as RawXmlExtensionType,\n} from \"./domain\";\nimport type {\n  Contract as ContractType,\n  LineIdentifiers as LineIdentifiersType,\n  NewTransportMeans as NewTransportMeansType,\n  Order as OrderType,\n  OrderLine as OrderLineType,\n  TransactionTerms as TransactionTermsType,\n  Transport as TransportType,\n  ValidationContext as ValidationContextType,\n} from \"./sections\";\n\nexport const FA3InvoiceKind = {\n  BASIC: \"basic\",\n  SIMPLIFIED: \"simplified\",\n  CORRECTION: \"correction\",\n  ADVANCE: \"advance\",\n  SETTLEMENT: \"settlement\",\n  ADVANCE_CORRECTION: \"advance_correction\",\n  SETTLEMENT_CORRECTION: \"settlement_correction\",\n} as const satisfies Record<string, FA3InvoiceKindType>;\n\nexport const FA3Party = {\n  create(input: FA3PartyType): FA3PartyType {\n    return { ...input };\n  },\n};\n\nexport const FA3Line = {\n  create(input: FA3LineType): FA3LineType {\n    return { ...input };\n  },\n};\n\nexport class FA3ValidationIssue implements FA3ValidationIssueType {\n  code: string;\n  message: string;\n  path?: string;\n\n  constructor(message: string, code = \"validation_issue\", path?: string) {\n    this.code = code;\n    this.message = message;\n    if (path !== undefined) {\n      this.path = path;\n    }\n  }\n\n  withLocation(path: string): FA3ValidationIssue {\n    return new FA3ValidationIssue(this.message, this.code, path);\n  }\n}\n\nexport const Annotation = {\n  create(key: string, value: string): AnnotationType {\n    return { key, value };\n  },\n  splitPayment(): AnnotationType {\n    return { key: \"split_payment\", value: \"1\" };\n  },\n  cashMethod(): AnnotationType {\n    return { key: \"cash_method\", value: \"1\" };\n  },\n};\n\nexport const AttachmentTable = {\n  create(input: AttachmentTableType): AttachmentTableType {\n    return {\n      headers: [...input.headers],\n      rows: input.rows.map((row) => [...row]),\n      ...(input.columnTypes ? { columnTypes: [...input.columnTypes] } : {}),\n      ...(input.metadata ? { metadata: [...input.metadata] } : {}),\n      ...(input.description ? { description: input.description } : {}),\n      ...(input.footer ? { footer: [...input.footer] } : {}),\n    };\n  },\n};\n\nexport const AttachmentBlock = {\n  create(input: AttachmentBlockType = {}): AttachmentBlockType {\n    return {\n      ...(input.header ? { header: input.header } : {}),\n      ...(input.metadata ? { metadata: [...input.metadata] } : {}),\n      ...(input.paragraphs ? { paragraphs: [...input.paragraphs] } : {}),\n      ...(input.tables ? { tables: [...input.tables] } : {}),\n    };\n  },\n};\n\nexport const Attachment = {\n  create(blocks: AttachmentBlockType[]): AttachmentType {\n    return { blocks: [...blocks] };\n  },\n  text(header: string, ...paragraphs: string[]): AttachmentType {\n    return {\n      blocks: [\n        {\n          header,\n          paragraphs,\n        },\n      ],\n    };\n  },\n};\n\nexport const BankAccount = {\n  create(number: string, description?: string): BankAccountType {\n    return {\n      number,\n      ...(description ? { description } : {}),\n    };\n  },\n};\n\nexport const Contract = {\n  create(number: string, date?: string): ContractType {\n    return {\n      number,\n      ...(date ? { date } : {}),\n    };\n  },\n};\n\nexport const CorrectionReference = {\n  create(invoiceNumber: string, issueDate?: string, ksefNumber?: string): CorrectionReferenceType {\n    return {\n      invoiceNumber,\n      ...(issueDate ? { issueDate } : {}),\n      ...(ksefNumber ? { ksefNumber } : {}),\n    };\n  },\n};\n\nexport const LineIdentifiers = {\n  create(value: LineIdentifiersType): LineIdentifiersType {\n    return { ...value };\n  },\n};\n\nexport const NewTransportMeans = {\n  create(value: NewTransportMeansType): NewTransportMeansType {\n    return { ...value };\n  },\n};\n\nexport const OrderLine = {\n  create(value: OrderLineType): OrderLineType {\n    return { ...value };\n  },\n};\n\nexport const Order = {\n  create(value: OrderType): OrderType {\n    return {\n      ...value,\n      ...(value.lines ? { lines: [...value.lines] } : {}),\n    };\n  },\n};\n\nexport const PaymentTerms = {\n  create(value: PaymentTermsType): PaymentTermsType {\n    return {\n      ...value,\n      ...(value.partialPayments ? { partialPayments: [...value.partialPayments] } : {}),\n      ...(value.bankAccounts ? { bankAccounts: [...value.bankAccounts] } : {}),\n    };\n  },\n  transfer(options: { dueDate?: string; bankAccount?: BankAccountType } = {}): PaymentTermsType {\n    return {\n      ...(options.dueDate ? { dueDate: options.dueDate } : {}),\n      method: \"6\" as FA3PaymentMethod,\n      ...(options.bankAccount ? { bankAccounts: [options.bankAccount] } : {}),\n    };\n  },\n};\n\nexport const RawXmlExtension = {\n  create(path: string, xml: string): RawXmlExtensionType {\n    return { path, xml };\n  },\n};\n\nexport const Settlement = {\n  create(value: FA3SettlementType): FA3SettlementType {\n    return {\n      ...value,\n      ...(value.charges ? { charges: [...value.charges] } : {}),\n      ...(value.deductions ? { deductions: [...value.deductions] } : {}),\n    };\n  },\n};\n\nexport const TransactionTerms = {\n  create(value: TransactionTermsType): TransactionTermsType {\n    return { ...value };\n  },\n};\n\nexport const Transport = {\n  create(value: TransportType): TransportType {\n    return { ...value };\n  },\n};\n\nexport const ValidationContext = {\n  create(source?: string, rowNumber?: number): ValidationContextType {\n    return {\n      ...(source ? { source } : {}),\n      ...(rowNumber !== undefined ? { rowNumber } : {}),\n    };\n  },\n};\n","import { DOMParser } from \"@xmldom/xmldom\";\n\ninterface XmlNodeListLike {\n  length: number;\n  item(index: number): XmlLikeNode | null;\n}\n\ninterface XmlLikeNode {\n  nodeName: string;\n  nodeType: number;\n  ELEMENT_NODE: number;\n  childNodes: XmlNodeListLike;\n  getAttribute?(name: string): string | null;\n  getElementsByTagNameNS?(namespace: string, localName: string): XmlNodeListLike;\n}\n\ntype XmlLikeElement = XmlLikeNode & {\n  getAttribute(name: string): string | null;\n  getElementsByTagNameNS(namespace: string, localName: string): XmlNodeListLike;\n};\n\nexport class XsdElement {\n  readonly path: string;\n  readonly name: string;\n  readonly typeName: string | undefined;\n  readonly minOccurs: string;\n  readonly maxOccurs: string;\n  readonly choices: number;\n  readonly enumValues: string[];\n\n  constructor(value: {\n    path: string;\n    name: string;\n    typeName?: string;\n    minOccurs?: string;\n    maxOccurs?: string;\n    choices?: number;\n    enumValues?: string[];\n  }) {\n    this.path = value.path;\n    this.name = value.name;\n    this.typeName = value.typeName;\n    this.minOccurs = value.minOccurs ?? \"1\";\n    this.maxOccurs = value.maxOccurs ?? \"1\";\n    this.choices = value.choices ?? 0;\n    this.enumValues = [...(value.enumValues ?? [])];\n  }\n}\n\nfunction localName(nodeName: string): string {\n  const index = nodeName.indexOf(\":\");\n  return index >= 0 ? nodeName.slice(index + 1) : nodeName;\n}\n\nfunction asElement(node: XmlLikeNode | null): XmlLikeElement | null {\n  if (!node || node.nodeType !== node.ELEMENT_NODE) {\n    return null;\n  }\n  return node as XmlLikeElement;\n}\n\nfunction elementChildren(node: XmlLikeNode): XmlLikeElement[] {\n  const out: XmlLikeElement[] = [];\n  for (let i = 0; i < node.childNodes.length; i += 1) {\n    const child = asElement(node.childNodes.item(i));\n    if (child) {\n      out.push(child);\n    }\n  }\n  return out;\n}\n\nfunction walkSimpleTypeEnums(root: XmlLikeElement): Map<string, string[]> {\n  const enums = new Map<string, string[]>();\n  const simpleTypes = root.getElementsByTagNameNS(\"*\", \"simpleType\");\n  for (let i = 0; i < simpleTypes.length; i += 1) {\n    const simpleType = simpleTypes.item(i) as XmlLikeElement;\n    const name = simpleType.getAttribute(\"name\");\n    if (!name) {\n      continue;\n    }\n    const values: string[] = [];\n    const enumNodes = simpleType.getElementsByTagNameNS(\"*\", \"enumeration\");\n    for (let enumIndex = 0; enumIndex < enumNodes.length; enumIndex += 1) {\n      const enumNode = asElement(enumNodes.item(enumIndex));\n      const value = enumNode?.getAttribute(\"value\");\n      if (value) {\n        values.push(value);\n      }\n    }\n    if (values.length > 0) {\n      enums.set(name, values);\n    }\n  }\n  return enums;\n}\n\nfunction countChoices(node: XmlLikeElement): number {\n  return node.getElementsByTagNameNS(\"*\", \"choice\").length;\n}\n\nfunction walkParticles(\n  node: XmlLikeElement,\n  path: string,\n  out: XsdElement[],\n  enums: Map<string, string[]>,\n): void {\n  for (const child of elementChildren(node)) {\n    const childLocalName = localName(child.nodeName);\n    if (childLocalName === \"element\") {\n      const name = child.getAttribute(\"name\");\n      if (name) {\n        walkElement(child, `${path}/${name}`, out, enums);\n      }\n      continue;\n    }\n    if (childLocalName === \"sequence\" || childLocalName === \"choice\" || childLocalName === \"all\") {\n      walkParticles(child, path, out, enums);\n    }\n  }\n}\n\nfunction walkElement(\n  node: XmlLikeElement,\n  path: string,\n  out: XsdElement[],\n  enums: Map<string, string[]>,\n): void {\n  const typeName = node.getAttribute(\"type\") || undefined;\n  const localTypeName = typeName ? localName(typeName) : undefined;\n  out.push(\n    new XsdElement({\n      path,\n      name: path.slice(path.lastIndexOf(\"/\") + 1),\n      ...(typeName ? { typeName } : {}),\n      minOccurs: node.getAttribute(\"minOccurs\") || \"1\",\n      maxOccurs: node.getAttribute(\"maxOccurs\") || \"1\",\n      choices: countChoices(node),\n      enumValues: localTypeName ? enums.get(localTypeName) ?? [] : [],\n    }),\n  );\n\n  for (const child of elementChildren(node)) {\n    if (localName(child.nodeName) === \"complexType\") {\n      walkParticles(child, path, out, enums);\n    }\n  }\n}\n\nexport function parseFa3XsdElements(schemaText: string): XsdElement[] {\n  const doc = new DOMParser().parseFromString(schemaText, \"text/xml\");\n  const root = doc?.documentElement;\n  if (!root) {\n    return [];\n  }\n  const enums = walkSimpleTypeEnums(root);\n  const allElements = root.getElementsByTagNameNS(\"*\", \"element\");\n  let fakturaElement: XmlLikeElement | null = null;\n  for (let i = 0; i < allElements.length; i += 1) {\n    const candidate = asElement(allElements.item(i));\n    if (candidate?.getAttribute(\"name\") === \"Faktura\") {\n      fakturaElement = candidate;\n      break;\n    }\n  }\n  if (!fakturaElement) {\n    return [];\n  }\n  const out: XsdElement[] = [];\n  walkElement(fakturaElement, \"/Faktura\", out, enums);\n  return out;\n}\n\nexport const parse_fa3_xsd_elements = parseFa3XsdElements;\n","import { parseFa3XsdElements, type XsdElement } from \"./xsdMap\";\nimport { loadFa3SchemaWithLocalImports } from \"./xsd\";\n\nexport const CoverageStatus = {\n  SUPPORTED: \"supported\",\n  PARTIALLY_SUPPORTED: \"partially_supported\",\n  RAW_EXTENSION: \"raw_extension\",\n  UNSUPPORTED: \"unsupported\",\n} as const;\n\nexport type CoverageStatusValue = (typeof CoverageStatus)[keyof typeof CoverageStatus];\n\nexport class XsdCoverageEntry {\n  readonly path: string;\n  readonly status: CoverageStatusValue;\n  readonly note: string;\n  readonly domainField: string | undefined;\n  readonly handler: string | undefined;\n\n  constructor(value: {\n    path: string;\n    status: CoverageStatusValue;\n    note: string;\n    domainField?: string;\n    handler?: string;\n  }) {\n    this.path = value.path;\n    this.status = value.status;\n    this.note = value.note;\n    this.domainField = value.domainField;\n    this.handler = value.handler;\n  }\n}\n\nexport class XsdCoverageReport {\n  readonly elements: XsdElement[];\n  readonly coverage: XsdCoverageEntry[];\n\n  constructor(elements: XsdElement[], coverage: XsdCoverageEntry[]) {\n    this.elements = elements;\n    this.coverage = coverage;\n  }\n}\n\nconst SUPPORTED_PATHS = new Set([\n  \"/Faktura\",\n  \"/Faktura/Naglowek\",\n  \"/Faktura/Naglowek/KodFormularza\",\n  \"/Faktura/Naglowek/WariantFormularza\",\n  \"/Faktura/Naglowek/DataWytworzeniaFa\",\n  \"/Faktura/Naglowek/SystemInfo\",\n  \"/Faktura/Podmiot1\",\n  \"/Faktura/Podmiot1/DaneIdentyfikacyjne\",\n  \"/Faktura/Podmiot1/DaneIdentyfikacyjne/NIP\",\n  \"/Faktura/Podmiot1/DaneIdentyfikacyjne/Nazwa\",\n  \"/Faktura/Podmiot1/Adres\",\n  \"/Faktura/Podmiot1/DaneKontaktowe\",\n  \"/Faktura/Podmiot2\",\n  \"/Faktura/Podmiot2/DaneIdentyfikacyjne\",\n  \"/Faktura/Podmiot2/Adres\",\n  \"/Faktura/Podmiot2/DaneKontaktowe\",\n  \"/Faktura/Podmiot2/JST\",\n  \"/Faktura/Podmiot2/GV\",\n  \"/Faktura/Podmiot3\",\n  \"/Faktura/Podmiot3/DaneIdentyfikacyjne\",\n  \"/Faktura/Podmiot3/Adres\",\n  \"/Faktura/Podmiot3/DaneKontaktowe\",\n  \"/Faktura/Podmiot3/Rola\",\n  \"/Faktura/Podmiot3/RolaInna\",\n  \"/Faktura/Podmiot3/OpisRoli\",\n  \"/Faktura/Podmiot3/Udzial\",\n  \"/Faktura/Fa\",\n  \"/Faktura/Fa/KodWaluty\",\n  \"/Faktura/Fa/P_1\",\n  \"/Faktura/Fa/P_1M\",\n  \"/Faktura/Fa/P_2\",\n  \"/Faktura/Fa/P_6\",\n  \"/Faktura/Fa/OkresFa\",\n  \"/Faktura/Fa/P_13_1\",\n  \"/Faktura/Fa/P_14_1\",\n  \"/Faktura/Fa/P_15\",\n  \"/Faktura/Fa/KursWalutyZ\",\n  \"/Faktura/Fa/Adnotacje\",\n  \"/Faktura/Fa/Adnotacje/P_16\",\n  \"/Faktura/Fa/Adnotacje/P_17\",\n  \"/Faktura/Fa/Adnotacje/P_18\",\n  \"/Faktura/Fa/Adnotacje/P_18A\",\n  \"/Faktura/Fa/Adnotacje/Zwolnienie\",\n  \"/Faktura/Fa/Adnotacje/NoweSrodkiTransportu\",\n  \"/Faktura/Fa/Adnotacje/P_23\",\n  \"/Faktura/Fa/Adnotacje/PMarzy\",\n  \"/Faktura/Fa/RodzajFaktury\",\n  \"/Faktura/Fa/PrzyczynaKorekty\",\n  \"/Faktura/Fa/TypKorekty\",\n  \"/Faktura/Fa/DaneFaKorygowanej\",\n  \"/Faktura/Fa/OkresFaKorygowanej\",\n  \"/Faktura/Fa/NrFaKorygowany\",\n  \"/Faktura/Fa/ZaliczkaCzesciowa\",\n  \"/Faktura/Fa/DodatkowyOpis\",\n  \"/Faktura/Fa/FakturaZaliczkowa\",\n  \"/Faktura/Fa/FaWiersz\",\n  \"/Faktura/Fa/Rozliczenie\",\n  \"/Faktura/Fa/Platnosc\",\n]);\n\nconst PARTIALLY_SUPPORTED_PREFIXES = [\n  \"/Faktura/Fa/WarunkiTransakcji\",\n  \"/Faktura/Fa/Transport\",\n  \"/Faktura/Fa/Zamowienie\",\n  \"/Faktura/Zalacznik\",\n  \"/Faktura/Stopka\",\n];\n\nconst SUPPORTED_PREFIXES = [\n  \"/Faktura/Fa/FaWiersz/\",\n  \"/Faktura/Fa/Rozliczenie/\",\n  \"/Faktura/Fa/Platnosc/\",\n  \"/Faktura/Fa/DodatkowyOpis/\",\n  \"/Faktura/Fa/ZaliczkaCzesciowa/\",\n  \"/Faktura/Fa/FakturaZaliczkowa/\",\n  \"/Faktura/Fa/DaneFaKorygowanej/\",\n];\n\nfunction coverageStatus(pathValue: string): CoverageStatusValue {\n  if (SUPPORTED_PATHS.has(pathValue) || SUPPORTED_PREFIXES.some((prefix) => pathValue.startsWith(prefix))) {\n    return CoverageStatus.SUPPORTED;\n  }\n  if (PARTIALLY_SUPPORTED_PREFIXES.some((prefix) => pathValue === prefix || pathValue.startsWith(`${prefix}/`))) {\n    return CoverageStatus.PARTIALLY_SUPPORTED;\n  }\n  if (pathValue.includes(\"RawXmlExtension\")) {\n    return CoverageStatus.RAW_EXTENSION;\n  }\n  return CoverageStatus.UNSUPPORTED;\n}\n\nfunction coverageNote(status: CoverageStatusValue): string {\n  if (status === CoverageStatus.SUPPORTED) {\n    return \"covered by typed FA(3) builder or serializer\";\n  }\n  if (status === CoverageStatus.PARTIALLY_SUPPORTED) {\n    return \"covered for a documented subset of fields\";\n  }\n  if (status === CoverageStatus.RAW_EXTENSION) {\n    return \"reserved for raw XML extension handling\";\n  }\n  return \"not exposed by the typed FA(3) contract\";\n}\n\nfunction handlerName(pathValue: string, status: CoverageStatusValue): string | undefined {\n  if (status === CoverageStatus.UNSUPPORTED) {\n    return undefined;\n  }\n  if (pathValue.startsWith(\"/Faktura/Fa/Platnosc\")) {\n    return \"mapPaymentTerms\";\n  }\n  if (pathValue.startsWith(\"/Faktura/Fa/FaWiersz\")) {\n    return \"mapLine\";\n  }\n  if (pathValue.startsWith(\"/Faktura/Fa/Zamowienie\")) {\n    return \"mapOrder\";\n  }\n  if (pathValue.startsWith(\"/Faktura/Fa/Rozliczenie\")) {\n    return \"mapSettlement\";\n  }\n  if (pathValue.startsWith(\"/Faktura/Fa/Transport\")) {\n    return \"mapTransport\";\n  }\n  if (pathValue.startsWith(\"/Faktura/Podmiot\")) {\n    return \"mapParty\";\n  }\n  return \"FA3Draft.toFakturaInput\";\n}\n\nfunction domainField(pathValue: string): string {\n  return `invoice.${pathValue.replace(/^\\/Faktura\\/?/, \"\").replaceAll(\"/\", \".\")}`;\n}\n\nexport function auditFa3XsdCoverage(options: { elements?: XsdElement[] } = {}): XsdCoverageReport {\n  const elements =\n    options.elements ??\n    parseFa3XsdElements(loadFa3SchemaWithLocalImports().schemaContent);\n  const coverage = elements.map((element) => {\n    const status = coverageStatus(element.path);\n    const handler = handlerName(element.path, status);\n    return new XsdCoverageEntry({\n      path: element.path,\n      status,\n      note: coverageNote(status),\n      ...(status === CoverageStatus.UNSUPPORTED ? {} : { domainField: domainField(element.path) }),\n      ...(handler ? { handler } : {}),\n    });\n  });\n  return new XsdCoverageReport(elements, coverage);\n}\n\nexport const audit_fa3_xsd_coverage = auditFa3XsdCoverage;\n","// This file is auto-generated by scripts/generate-openapi-models.mjs.\n// Do not edit manually.\n\nexport const OPENAPI_SPEC_VERSION = \"3.0.4\" as const;\nexport const OPENAPI_SCHEMA_COUNT = 305 as const;\n\nexport type AllowedIps = {\n  ip4Addresses?: Array<string> | null;\n  ip4Masks?: Array<string> | null;\n  ip4Ranges?: Array<string> | null;\n};\n\nexport type AmountType = \"Brutto\" | \"Netto\" | \"Vat\";\n\nexport type ApiError = {\n  code: number;\n  description: string;\n  details?: Array<string> | null;\n};\n\nexport type ApiRateLimitsOverride = {\n  batchSession: ApiRateLimitValuesOverride;\n  collectiveIdentifier: ApiRateLimitValuesOverride;\n  invoiceDownload: ApiRateLimitValuesOverride;\n  invoiceExport: ApiRateLimitValuesOverride;\n  invoiceExportStatus: ApiRateLimitValuesOverride;\n  invoiceMetadata: ApiRateLimitValuesOverride;\n  invoiceSend: ApiRateLimitValuesOverride;\n  invoiceStatus: ApiRateLimitValuesOverride;\n  onlineSession: ApiRateLimitValuesOverride;\n  other: ApiRateLimitValuesOverride;\n  sessionInvoiceList: ApiRateLimitValuesOverride;\n  sessionList: ApiRateLimitValuesOverride;\n  sessionMisc: ApiRateLimitValuesOverride;\n};\n\nexport type ApiRateLimitValuesOverride = {\n  perHour: number;\n  perMinute: number;\n  perSecond: number;\n};\n\nexport type AttachmentPermissionGrantRequest = {\n  nip: Nip;\n};\n\nexport type AttachmentPermissionRevokeRequest = {\n  expectedEndDate?: string | null;\n  nip: Nip;\n};\n\nexport type AuthenticationChallengeResponse = {\n  challenge: Challenge;\n  clientIp: string;\n  timestamp: string;\n  timestampMs: number;\n};\n\nexport type AuthenticationContextIdentifier = {\n  type: AuthenticationContextIdentifierType;\n  value: string;\n};\n\nexport type AuthenticationContextIdentifierType = \"InternalId\" | \"Nip\" | \"NipVatUe\" | \"PeppolId\";\n\nexport type AuthenticationInitResponse = {\n  authenticationToken: TokenInfo;\n  referenceNumber: ReferenceNumber;\n};\n\nexport type AuthenticationListItem = {\n  authenticationMethod: AuthenticationMethod;\n  authenticationMethodInfo: AuthenticationMethodInfo;\n  isCurrent?: boolean;\n  isTokenRedeemed?: boolean | null;\n  lastTokenRefreshDate?: string | null;\n  referenceNumber: ReferenceNumber;\n  refreshTokenValidUntil?: string | null;\n  startDate: string;\n  status: StatusInfo;\n};\n\nexport type AuthenticationListResponse = {\n  continuationToken?: string | null;\n  items: Array<AuthenticationListItem>;\n};\n\nexport type AuthenticationMethod = \"InternalCertificate\" | \"PeppolSignature\" | \"PersonalSignature\" | \"QualifiedSeal\" | \"QualifiedSignature\" | \"Token\" | \"TrustedProfile\";\n\nexport type AuthenticationMethodCategory = \"NationalNode\" | \"Other\" | \"Token\" | \"XadesSignature\";\n\nexport type AuthenticationMethodInfo = {\n  category: AuthenticationMethodCategory;\n  code: string;\n  displayName: string;\n};\n\nexport type AuthenticationOperationStatusResponse = {\n  authenticationMethod: AuthenticationMethod;\n  authenticationMethodInfo: AuthenticationMethodInfo;\n  isTokenRedeemed?: boolean | null;\n  lastTokenRefreshDate?: string | null;\n  refreshTokenValidUntil?: string | null;\n  startDate: string;\n  status: StatusInfo;\n};\n\nexport type AuthenticationTokenRefreshResponse = {\n  accessToken: TokenInfo;\n};\n\nexport type AuthenticationTokensResponse = {\n  accessToken: TokenInfo;\n  refreshToken: TokenInfo;\n};\n\nexport type AuthenticationTokenStatus = \"Active\" | \"Failed\" | \"Pending\" | \"Revoked\" | \"Revoking\";\n\nexport type AuthorizationPolicy = {\n  allowedIps?: AllowedIps | null;\n};\n\nexport type BadRequestProblemDetails = {\n  detail: string;\n  errors: Array<ApiError>;\n  instance: string;\n  status: number;\n  timestamp: string;\n  title: string;\n  traceId: string;\n};\n\nexport type BatchFileInfo = {\n  compressionType?: CompressionType | null;\n  fileHash: Sha256HashBase64;\n  fileParts: Array<BatchFilePartInfo>;\n  fileSize: number;\n};\n\nexport type BatchFilePartInfo = {\n  fileHash: Sha256HashBase64;\n  fileSize: number;\n  ordinalNumber: number;\n};\n\nexport type BatchSessionContextLimitsOverride = {\n  maxInvoices: number;\n  maxInvoiceSizeInMB: number;\n  maxInvoiceWithAttachmentSizeInMB: number;\n};\n\nexport type BatchSessionEffectiveContextLimits = {\n  maxInvoices: number;\n  maxInvoiceSizeInMB: number;\n  maxInvoiceWithAttachmentSizeInMB: number;\n};\n\nexport type BlockContextAuthenticationRequest = {\n  contextIdentifier?: TestDataAuthenticationContextIdentifier | null;\n};\n\nexport type BuyerIdentifierType = \"Nip\" | \"None\" | \"Other\" | \"VatUe\";\n\nexport type CertificateEffectiveSubjectLimits = {\n  maxCertificates?: number;\n};\n\nexport type CertificateEnrollmentDataResponse = {\n  commonName: string;\n  countryName: string;\n  givenName?: string | null;\n  organizationIdentifier?: string | null;\n  organizationName?: string | null;\n  serialNumber?: string | null;\n  surname?: string | null;\n  uniqueIdentifier?: string | null;\n};\n\nexport type CertificateEnrollmentStatusResponse = {\n  certificateSerialNumber?: string | null;\n  requestDate: string;\n  status: StatusInfo;\n};\n\nexport type CertificateLimit = {\n  limit: number;\n  remaining: number;\n};\n\nexport type CertificateLimitsResponse = {\n  canRequest: boolean;\n  certificate: CertificateLimit;\n  enrollment: CertificateLimit;\n};\n\nexport type CertificateListItem = {\n  certificateSerialNumber: string;\n  commonName: string;\n  lastUseDate?: string | null;\n  name: string;\n  requestDate: string;\n  status: CertificateListItemStatus;\n  subjectIdentifier: CertificateSubjectIdentifier;\n  type: KsefCertificateType;\n  validFrom: string;\n  validTo: string;\n};\n\nexport type CertificateListItemStatus = \"Active\" | \"Blocked\" | \"Expired\" | \"Revoked\";\n\nexport type CertificateRevocationReason = \"KeyCompromise\" | \"Superseded\" | \"Unspecified\";\n\nexport type CertificateSubjectIdentifier = {\n  type: CertificateSubjectIdentifierType;\n  value: string;\n};\n\nexport type CertificateSubjectIdentifierType = \"Fingerprint\" | \"Nip\" | \"Pesel\";\n\nexport type CertificateSubjectLimitsOverride = {\n  maxCertificates?: number | null;\n};\n\nexport type Challenge = string;\n\nexport type CheckAttachmentPermissionStatusResponse = {\n  isAttachmentAllowed?: boolean;\n  revokedDate?: string | null;\n};\n\nexport type CollectiveIdentifierContextLimitsOverride = {\n  maxInvoices: number;\n};\n\nexport type CollectiveIdentifierEffectiveContextLimits = {\n  maxInvoices: number;\n};\n\nexport type CollectiveIdentifierInvoice = {\n  description?: string | null;\n  ksefNumber: KsefNumber;\n  payment?: CollectiveIdentifierInvoicePayment | null;\n};\n\nexport type CollectiveIdentifierInvoicePayment = {\n  amount: number;\n  currency: CurrencyCode;\n};\n\nexport type CollectiveIdentifierInvoicesQueryRequest = {\n  collectiveIdentifierNumbers: Array<string>;\n};\n\nexport type CollectiveIdentifierInvoicesQueryResponse = {\n  continuationToken?: string | null;\n  invoices: Array<CollectiveIdentifierInvoicesQueryResponseItem>;\n};\n\nexport type CollectiveIdentifierInvoicesQueryResponseItem = {\n  collectiveIdentifierNumber: string;\n  description?: string | null;\n  detailsHidden: boolean;\n  ksefNumber: KsefNumber;\n  payment?: CollectiveIdentifierInvoicesQueryResponseItemPayment | null;\n};\n\nexport type CollectiveIdentifierInvoicesQueryResponseItemPayment = {\n  amount: number;\n  currency: string;\n};\n\nexport type CollectiveIdentifiersByKsefNumberQueryResponse = {\n  collectiveIdentifiers: Array<CollectiveIdentifiersByKsefNumberQueryResponseItem>;\n  continuationToken?: string | null;\n};\n\nexport type CollectiveIdentifiersByKsefNumberQueryResponseItem = {\n  collectiveIdentifierNumber: string;\n  createdInCurrentContext: boolean;\n  dateCreated: string;\n};\n\nexport type CollectiveIdentifiersQueryRequest = {\n  collectiveIdentifierNumber?: string | null;\n  createdInCurrentContext?: boolean | null;\n  dateCreatedFrom: string;\n  dateCreatedTo: string;\n  invoiceCountFrom?: number | null;\n  invoiceCountTo?: number | null;\n};\n\nexport type CollectiveIdentifiersQueryResponse = {\n  collectiveIdentifiers: Array<CollectiveIdentifiersQueryResponseItem>;\n  continuationToken?: string | null;\n};\n\nexport type CollectiveIdentifiersQueryResponseItem = {\n  collectiveIdentifierNumber: string;\n  createdInCurrentContext: boolean;\n  dateCreated: string;\n  invoiceCount: number;\n};\n\nexport type CommonSessionStatus = \"Cancelled\" | \"Failed\" | \"InProgress\" | \"Succeeded\";\n\nexport type CompressionType = \"TarGz\" | \"Zip\";\n\nexport type CurrencyCode = \"AED\" | \"AFN\" | \"ALL\" | \"AMD\" | \"ANG\" | \"AOA\" | \"ARS\" | \"AUD\" | \"AWG\" | \"AZN\" | \"BAM\" | \"BBD\" | \"BDT\" | \"BGN\" | \"BHD\" | \"BIF\" | \"BMD\" | \"BND\" | \"BOB\" | \"BOV\" | \"BRL\" | \"BSD\" | \"BTN\" | \"BWP\" | \"BYN\" | \"BZD\" | \"CAD\" | \"CDF\" | \"CHE\" | \"CHF\" | \"CHW\" | \"CLF\" | \"CLP\" | \"CNY\" | \"COP\" | \"COU\" | \"CRC\" | \"CUC\" | \"CUP\" | \"CVE\" | \"CZK\" | \"DJF\" | \"DKK\" | \"DOP\" | \"DZD\" | \"EGP\" | \"ERN\" | \"ETB\" | \"EUR\" | \"FJD\" | \"FKP\" | \"GBP\" | \"GEL\" | \"GGP\" | \"GHS\" | \"GIP\" | \"GMD\" | \"GNF\" | \"GTQ\" | \"GYD\" | \"HKD\" | \"HNL\" | \"HRK\" | \"HTG\" | \"HUF\" | \"IDR\" | \"ILS\" | \"IMP\" | \"INR\" | \"IQD\" | \"IRR\" | \"ISK\" | \"JEP\" | \"JMD\" | \"JOD\" | \"JPY\" | \"KES\" | \"KGS\" | \"KHR\" | \"KMF\" | \"KPW\" | \"KRW\" | \"KWD\" | \"KYD\" | \"KZT\" | \"LAK\" | \"LBP\" | \"LKR\" | \"LRD\" | \"LSL\" | \"LYD\" | \"MAD\" | \"MDL\" | \"MGA\" | \"MKD\" | \"MMK\" | \"MNT\" | \"MOP\" | \"MRU\" | \"MUR\" | \"MVR\" | \"MWK\" | \"MXN\" | \"MXV\" | \"MYR\" | \"MZN\" | \"NAD\" | \"NGN\" | \"NIO\" | \"NOK\" | \"NPR\" | \"NZD\" | \"OMR\" | \"PAB\" | \"PEN\" | \"PGK\" | \"PHP\" | \"PKR\" | \"PLN\" | \"PYG\" | \"QAR\" | \"RON\" | \"RSD\" | \"RUB\" | \"RWF\" | \"SAR\" | \"SBD\" | \"SCR\" | \"SDG\" | \"SEK\" | \"SGD\" | \"SHP\" | \"SLL\" | \"SOS\" | \"SRD\" | \"SSP\" | \"STN\" | \"SVC\" | \"SYP\" | \"SZL\" | \"THB\" | \"TJS\" | \"TMT\" | \"TND\" | \"TOP\" | \"TRY\" | \"TTD\" | \"TWD\" | \"TZS\" | \"UAH\" | \"UGX\" | \"USD\" | \"USN\" | \"UYI\" | \"UYU\" | \"UYW\" | \"UZS\" | \"VES\" | \"VND\" | \"VUV\" | \"WST\" | \"XAF\" | \"XAG\" | \"XAU\" | \"XBA\" | \"XBB\" | \"XBC\" | \"XBD\" | \"XCD\" | \"XCG\" | \"XDR\" | \"XOF\" | \"XPD\" | \"XPF\" | \"XPT\" | \"XSU\" | \"XUA\" | \"XXX\" | \"YER\" | \"ZAR\" | \"ZMW\" | \"ZWL\";\n\nexport type EffectiveApiRateLimits = {\n  batchSession: EffectiveApiRateLimitValues;\n  collectiveIdentifier: EffectiveApiRateLimitValues;\n  invoiceDownload: EffectiveApiRateLimitValues;\n  invoiceExport: EffectiveApiRateLimitValues;\n  invoiceExportStatus: EffectiveApiRateLimitValues;\n  invoiceMetadata: EffectiveApiRateLimitValues;\n  invoiceSend: EffectiveApiRateLimitValues;\n  invoiceStatus: EffectiveApiRateLimitValues;\n  onlineSession: EffectiveApiRateLimitValues;\n  other: EffectiveApiRateLimitValues;\n  sessionInvoiceList: EffectiveApiRateLimitValues;\n  sessionList: EffectiveApiRateLimitValues;\n  sessionMisc: EffectiveApiRateLimitValues;\n};\n\nexport type EffectiveApiRateLimitValues = {\n  perHour: number;\n  perMinute: number;\n  perSecond: number;\n};\n\nexport type EffectiveContextLimits = {\n  batchSession: BatchSessionEffectiveContextLimits;\n  collectiveIdentifier: CollectiveIdentifierEffectiveContextLimits;\n  onlineSession: OnlineSessionEffectiveContextLimits;\n};\n\nexport type EffectiveSubjectLimits = {\n  certificate?: CertificateEffectiveSubjectLimits | null;\n  enrollment?: EnrollmentEffectiveSubjectLimits | null;\n};\n\nexport type EncryptionInfo = {\n  encryptedSymmetricKey: string;\n  initializationVector: string;\n  publicKeyId?: string | null;\n};\n\nexport type EnrollCertificateRequest = {\n  certificateName: string;\n  certificateType: KsefCertificateType;\n  csr: string;\n  validFrom?: string | null;\n};\n\nexport type EnrollCertificateResponse = {\n  referenceNumber: ReferenceNumber;\n  timestamp: string;\n};\n\nexport type EnrollmentEffectiveSubjectLimits = {\n  maxEnrollments?: number;\n};\n\nexport type EnrollmentSubjectLimitsOverride = {\n  maxEnrollments?: number | null;\n};\n\nexport type EntityAuthorizationGrant = {\n  authorIdentifier?: EntityAuthorizationsAuthorIdentifier | null;\n  authorizationScope: InvoicePermissionType;\n  authorizedEntityIdentifier: EntityAuthorizationsAuthorizedEntityIdentifier;\n  authorizingEntityIdentifier: EntityAuthorizationsAuthorizingEntityIdentifier;\n  description: string;\n  id: PermissionId;\n  startDate: string;\n  subjectEntityDetails?: PermissionsSubjectEntityByIdentifierDetails | null;\n};\n\nexport type EntityAuthorizationPermissionsGrantRequest = {\n  description: string;\n  permission: EntityAuthorizationPermissionType;\n  subjectDetails: EntityDetails;\n  subjectIdentifier: EntityAuthorizationPermissionsSubjectIdentifier;\n};\n\nexport type EntityAuthorizationPermissionsQueryRequest = {\n  authorizedIdentifier?: EntityAuthorizationsAuthorizedEntityIdentifier | null;\n  authorizingIdentifier?: EntityAuthorizationsAuthorizingEntityIdentifier | null;\n  permissionTypes?: Array<InvoicePermissionType> | null;\n  queryType: QueryType;\n};\n\nexport type EntityAuthorizationPermissionsSubjectIdentifier = {\n  type: EntityAuthorizationPermissionsSubjectIdentifierType;\n  value: string;\n};\n\nexport type EntityAuthorizationPermissionsSubjectIdentifierType = \"Nip\" | \"PeppolId\";\n\nexport type EntityAuthorizationPermissionType = \"PefInvoicing\" | \"RRInvoicing\" | \"SelfInvoicing\" | \"TaxRepresentative\";\n\nexport type EntityAuthorizationsAuthorIdentifier = {\n  type: EntityAuthorizationsAuthorIdentifierType;\n  value: string;\n};\n\nexport type EntityAuthorizationsAuthorIdentifierType = \"Fingerprint\" | \"Nip\" | \"Pesel\";\n\nexport type EntityAuthorizationsAuthorizedEntityIdentifier = {\n  type: EntityAuthorizationsAuthorizedEntityIdentifierType;\n  value: string;\n};\n\nexport type EntityAuthorizationsAuthorizedEntityIdentifierType = \"Nip\" | \"PeppolId\";\n\nexport type EntityAuthorizationsAuthorizingEntityIdentifier = {\n  type: EntityAuthorizationsAuthorizingEntityIdentifierType;\n  value: string;\n};\n\nexport type EntityAuthorizationsAuthorizingEntityIdentifierType = \"Nip\";\n\nexport type EntityByFingerprintDetails = {\n  address: string;\n  fullName: string;\n};\n\nexport type EntityDetails = {\n  fullName: string;\n};\n\nexport type EntityPermission = {\n  canDelegate?: boolean;\n  type: EntityPermissionType;\n};\n\nexport type EntityPermissionItem = {\n  canDelegate: boolean;\n  contextIdentifier: EntityPermissionsContextIdentifier;\n  description: string;\n  id: PermissionId;\n  permissionScope: EntityPermissionItemScope;\n  startDate: string;\n};\n\nexport type EntityPermissionItemScope = \"InvoiceRead\" | \"InvoiceWrite\";\n\nexport type EntityPermissionsContextIdentifier = {\n  type: EntityPermissionsContextIdentifierType;\n  value: string;\n};\n\nexport type EntityPermissionsContextIdentifierType = \"InternalId\" | \"Nip\";\n\nexport type EntityPermissionsGrantRequest = {\n  description: string;\n  permissions: Array<EntityPermission>;\n  subjectDetails: EntityDetails;\n  subjectIdentifier: EntityPermissionsSubjectIdentifier;\n};\n\nexport type EntityPermissionsQueryRequest = {\n  contextIdentifier?: EntityPermissionsContextIdentifier | null;\n};\n\nexport type EntityPermissionsSubjectIdentifier = {\n  type: EntityPermissionsSubjectIdentifierType;\n  value: string;\n};\n\nexport type EntityPermissionsSubjectIdentifierType = \"Nip\";\n\nexport type EntityPermissionsSubordinateEntityIdentifier = {\n  type: EntityPermissionsSubordinateEntityIdentifierType;\n  value: string;\n};\n\nexport type EntityPermissionsSubordinateEntityIdentifierType = \"Nip\";\n\nexport type EntityPermissionType = \"InvoiceRead\" | \"InvoiceWrite\";\n\nexport type EntityRole = {\n  description: string;\n  parentEntityIdentifier?: EntityRolesParentEntityIdentifier | null;\n  role: EntityRoleType;\n  startDate: string;\n};\n\nexport type EntityRolesParentEntityIdentifier = {\n  type: EntityRolesParentEntityIdentifierType;\n  value: string;\n};\n\nexport type EntityRolesParentEntityIdentifierType = \"Nip\";\n\nexport type EntityRoleType = \"CourtBailiff\" | \"EnforcementAuthority\" | \"LocalGovernmentSubUnit\" | \"LocalGovernmentUnit\" | \"VatGroupSubUnit\" | \"VatGroupUnit\";\n\nexport type EntitySubjectByFingerprintDetailsType = \"EntityByFingerprint\";\n\nexport type EntitySubjectByIdentifierDetailsType = \"EntityByIdentifier\";\n\nexport type EntitySubjectDetailsType = \"EntityByFingerprint\" | \"EntityByIdentifier\";\n\nexport type EuEntityAdministrationPermissionsContextIdentifier = {\n  type: EuEntityAdministrationPermissionsContextIdentifierType;\n  value: string;\n};\n\nexport type EuEntityAdministrationPermissionsContextIdentifierType = \"NipVatUe\";\n\nexport type EuEntityAdministrationPermissionsGrantRequest = {\n  contextIdentifier: EuEntityAdministrationPermissionsContextIdentifier;\n  description: string;\n  euEntityDetails: EuEntityDetails;\n  euEntityName: string;\n  subjectDetails: EuEntityPermissionSubjectDetails;\n  subjectIdentifier: EuEntityAdministrationPermissionsSubjectIdentifier;\n};\n\nexport type EuEntityAdministrationPermissionsSubjectIdentifier = {\n  type: EuEntityAdministrationPermissionsSubjectIdentifierType;\n  value: string;\n};\n\nexport type EuEntityAdministrationPermissionsSubjectIdentifierType = \"Fingerprint\";\n\nexport type EuEntityDetails = {\n  address: string;\n  fullName: string;\n};\n\nexport type EuEntityPermission = {\n  authorIdentifier: EuEntityPermissionsAuthorIdentifier;\n  authorizedFingerprintIdentifier: string;\n  description: string;\n  euEntityDetails?: PermissionsEuEntityDetails | null;\n  euEntityName: string;\n  id: PermissionId;\n  permissionScope: EuEntityPermissionsQueryPermissionType;\n  startDate: string;\n  subjectEntityDetails?: PermissionsSubjectEntityByFingerprintDetails | null;\n  subjectPersonDetails?: PermissionsSubjectPersonByFingerprintDetails | null;\n  vatUeIdentifier: string;\n};\n\nexport type EuEntityPermissionsAuthorIdentifier = {\n  type: EuEntityPermissionsAuthorIdentifierType;\n  value: string;\n};\n\nexport type EuEntityPermissionsAuthorIdentifierType = \"Fingerprint\" | \"Nip\" | \"Pesel\";\n\nexport type EuEntityPermissionsGrantRequest = {\n  description: string;\n  permissions: Array<EuEntityPermissionType>;\n  subjectDetails: EuEntityPermissionSubjectDetails;\n  subjectIdentifier: EuEntityPermissionsSubjectIdentifier;\n};\n\nexport type EuEntityPermissionsQueryPermissionType = \"Introspection\" | \"InvoiceRead\" | \"InvoiceWrite\" | \"VatUeManage\";\n\nexport type EuEntityPermissionsQueryRequest = {\n  authorizedFingerprintIdentifier?: string | null;\n  permissionTypes?: Array<EuEntityPermissionsQueryPermissionType> | null;\n  vatUeIdentifier?: string | null;\n};\n\nexport type EuEntityPermissionsSubjectIdentifier = {\n  type: EuEntityPermissionsSubjectIdentifierType;\n  value: string;\n};\n\nexport type EuEntityPermissionsSubjectIdentifierType = \"Fingerprint\";\n\nexport type EuEntityPermissionSubjectDetails = {\n  entityByFp?: EntityByFingerprintDetails | null;\n  personByFpNoId?: PersonByFingerprintWithoutIdentifierDetails | null;\n  personByFpWithId?: PersonByFingerprintWithIdentifierDetails | null;\n  subjectDetailsType: EuEntityPermissionSubjectDetailsType;\n};\n\nexport type EuEntityPermissionSubjectDetailsType = \"EntityByFingerprint\" | \"PersonByFingerprintWithIdentifier\" | \"PersonByFingerprintWithoutIdentifier\";\n\nexport type EuEntityPermissionType = \"InvoiceRead\" | \"InvoiceWrite\";\n\nexport type ExceptionDetails = {\n  details?: Array<string> | null;\n  exceptionCode?: number;\n  exceptionDescription?: string | null;\n};\n\nexport type ExceptionInfo = {\n  exceptionDetailList?: Array<ExceptionDetails> | null;\n  referenceNumber?: ReferenceNumber | null;\n  serviceCode?: string | null;\n  serviceCtx?: string | null;\n  serviceName?: string | null;\n  timestamp?: string;\n};\n\nexport type ExceptionResponse = {\n  exception?: ExceptionInfo | null;\n};\n\nexport type ExportInvoicesResponse = {\n  referenceNumber: ReferenceNumber;\n};\n\nexport type ForbiddenProblemDetails = {\n  detail: string;\n  instance?: string | null;\n  reasonCode: string;\n  security?: Record<string, unknown | null> | null;\n  status: number;\n  timestamp: string;\n  title: string;\n  traceId?: string | null;\n};\n\nexport type FormCode = {\n  schemaVersion: string;\n  systemCode: string;\n  value: string;\n};\n\nexport type GenerateCollectiveIdentifierRequest = {\n  invoices: Array<CollectiveIdentifierInvoice>;\n};\n\nexport type GenerateCollectiveIdentifierResponse = {\n  collectiveIdentifierNumber: string;\n};\n\nexport type GenerateTokenRequest = {\n  description: string;\n  permissions: Array<TokenPermissionType>;\n};\n\nexport type GenerateTokenResponse = {\n  referenceNumber: ReferenceNumber;\n  token: string;\n};\n\nexport type GoneProblemDetails = {\n  detail: string;\n  instance: string;\n  status: number;\n  timestamp: string;\n  title: string;\n  traceId: string;\n};\n\nexport type IdDocument = {\n  country: string;\n  number: string;\n  type: string;\n};\n\nexport type IndirectPermissionsGrantRequest = {\n  description: string;\n  permissions: Array<IndirectPermissionType>;\n  subjectDetails: PersonPermissionSubjectDetails;\n  subjectIdentifier: IndirectPermissionsSubjectIdentifier;\n  targetIdentifier?: IndirectPermissionsTargetIdentifier | null;\n};\n\nexport type IndirectPermissionsSubjectIdentifier = {\n  type: IndirectPermissionsSubjectIdentifierType;\n  value: string;\n};\n\nexport type IndirectPermissionsSubjectIdentifierType = \"Fingerprint\" | \"Nip\" | \"Pesel\";\n\nexport type IndirectPermissionsTargetIdentifier = {\n  type: IndirectPermissionsTargetIdentifierType;\n  value?: string | null;\n};\n\nexport type IndirectPermissionsTargetIdentifierType = \"AllPartners\" | \"InternalId\" | \"Nip\";\n\nexport type IndirectPermissionType = \"InvoiceRead\" | \"InvoiceWrite\";\n\nexport type InitTokenAuthenticationRequest = {\n  authorizationPolicy?: AuthorizationPolicy | null;\n  challenge: Challenge;\n  contextIdentifier: AuthenticationContextIdentifier;\n  encryptedToken: string;\n  publicKeyId?: string | null;\n};\n\nexport type InternalId = string;\n\nexport type InvoiceExportRequest = {\n  compressionType?: CompressionType | null;\n  encryption: EncryptionInfo;\n  filters: InvoiceQueryFilters;\n  onlyMetadata?: boolean;\n};\n\nexport type InvoiceExportStatusResponse = {\n  completedDate?: string | null;\n  package?: InvoicePackage | null;\n  packageExpirationDate?: string | null;\n  status: StatusInfo;\n};\n\nexport type InvoiceMetadata = {\n  acquisitionDate: string;\n  authorizedSubject?: InvoiceMetadataAuthorizedSubject | null;\n  buyer: InvoiceMetadataBuyer;\n  currency: string;\n  formCode: FormCode;\n  grossAmount: number;\n  hasAttachment: boolean;\n  hashOfCorrectedInvoice?: Sha256HashBase64 | null;\n  invoiceHash: Sha256HashBase64;\n  invoiceNumber: string;\n  invoiceType: InvoiceType;\n  invoicingDate: string;\n  invoicingMode: InvoicingMode;\n  isSelfInvoicing: boolean;\n  issueDate: string;\n  ksefNumber: KsefNumber;\n  netAmount: number;\n  permanentStorageDate: string;\n  seller: InvoiceMetadataSeller;\n  thirdSubjects?: Array<InvoiceMetadataThirdSubject> | null;\n  vatAmount: number;\n};\n\nexport type InvoiceMetadataAuthorizedSubject = {\n  name?: string | null;\n  nip: Nip;\n  role: number;\n};\n\nexport type InvoiceMetadataBuyer = {\n  identifier: InvoiceMetadataBuyerIdentifier;\n  name?: string | null;\n};\n\nexport type InvoiceMetadataBuyerIdentifier = {\n  type: BuyerIdentifierType;\n  value?: string | null;\n};\n\nexport type InvoiceMetadataSeller = {\n  name?: string | null;\n  nip: Nip;\n};\n\nexport type InvoiceMetadataThirdSubject = {\n  identifier: InvoiceMetadataThirdSubjectIdentifier;\n  name?: string | null;\n  role: number;\n};\n\nexport type InvoiceMetadataThirdSubjectIdentifier = {\n  type: ThirdSubjectIdentifierType;\n  value?: string | null;\n};\n\nexport type InvoicePackage = {\n  compressionType: CompressionType;\n  invoiceCount: number;\n  isTruncated: boolean;\n  lastInvoicingDate?: string | null;\n  lastIssueDate?: string | null;\n  lastPermanentStorageDate?: string | null;\n  parts: Array<InvoicePackagePart>;\n  permanentStorageHwmDate?: string | null;\n  size: number;\n};\n\nexport type InvoicePackagePart = {\n  encryptedPartHash: Sha256HashBase64;\n  encryptedPartSize: number;\n  expirationDate: string;\n  method: string;\n  ordinalNumber: number;\n  partHash: Sha256HashBase64;\n  partName: string;\n  partSize: number;\n  url: string;\n};\n\nexport type InvoicePermissionType = \"PefInvoicing\" | \"RRInvoicing\" | \"SelfInvoicing\" | \"TaxRepresentative\";\n\nexport type InvoiceQueryAmount = {\n  from?: number | null;\n  to?: number | null;\n  type: AmountType;\n};\n\nexport type InvoiceQueryBuyerIdentifier = {\n  type: BuyerIdentifierType;\n  value?: string | null;\n};\n\nexport type InvoiceQueryDateRange = {\n  dateType: InvoiceQueryDateType;\n  from: string;\n  restrictToPermanentStorageHwmDate?: boolean | null;\n  to?: string | null;\n};\n\nexport type InvoiceQueryDateType = \"Invoicing\" | \"Issue\" | \"PermanentStorage\";\n\nexport type InvoiceQueryFilters = {\n  amount?: InvoiceQueryAmount | null;\n  buyerIdentifier?: InvoiceQueryBuyerIdentifier | null;\n  currencyCodes?: Array<CurrencyCode> | null;\n  dateRange: InvoiceQueryDateRange;\n  formType?: InvoiceQueryFormType | null;\n  hasAttachment?: boolean | null;\n  invoiceNumber?: string | null;\n  invoiceTypes?: Array<InvoiceType> | null;\n  invoicingMode?: InvoicingMode | null;\n  isSelfInvoicing?: boolean | null;\n  ksefNumber?: KsefNumber | null;\n  sellerNip?: Nip | null;\n  subjectType: InvoiceQuerySubjectType;\n};\n\nexport type InvoiceQueryFormType = \"FA_RR\" | \"FA\" | \"PEF\";\n\nexport type InvoiceQuerySubjectType = \"Subject1\" | \"Subject2\" | \"Subject3\" | \"SubjectAuthorized\";\n\nexport type InvoiceStatusInfo = {\n  code: number;\n  description: string;\n  details?: Array<string> | null;\n  extensions?: Record<string, string | null> | null;\n};\n\nexport type InvoiceType = \"Kor\" | \"KorPef\" | \"KorRoz\" | \"KorVatRr\" | \"KorZal\" | \"Roz\" | \"Upr\" | \"Vat\" | \"VatPef\" | \"VatPefSp\" | \"VatRr\" | \"Zal\";\n\nexport type InvoicingMode = \"Offline\" | \"Online\";\n\nexport type KsefCertificateType = \"Authentication\" | \"Offline\";\n\nexport type KsefNumber = string;\n\nexport type Nip = string;\n\nexport type NipVatUe = string;\n\nexport type OnlineSessionContextLimitsOverride = {\n  maxInvoices: number;\n  maxInvoiceSizeInMB: number;\n  maxInvoiceWithAttachmentSizeInMB: number;\n};\n\nexport type OnlineSessionEffectiveContextLimits = {\n  maxInvoices: number;\n  maxInvoiceSizeInMB: number;\n  maxInvoiceWithAttachmentSizeInMB: number;\n};\n\nexport type OpenBatchSessionRequest = {\n  batchFile: BatchFileInfo;\n  encryption: EncryptionInfo;\n  formCode: FormCode;\n  offlineMode?: boolean;\n};\n\nexport type OpenBatchSessionResponse = {\n  partUploadRequests: Array<PartUploadRequest>;\n  referenceNumber: ReferenceNumber;\n};\n\nexport type OpenOnlineSessionRequest = {\n  encryption: EncryptionInfo;\n  formCode: FormCode;\n};\n\nexport type OpenOnlineSessionResponse = {\n  referenceNumber: ReferenceNumber;\n  validUntil: string;\n};\n\nexport type PartUploadRequest = {\n  headers: Record<string, string | null>;\n  method: string;\n  ordinalNumber: number;\n  url: string;\n};\n\nexport type PeppolId = string;\n\nexport type PeppolProvider = {\n  dateCreated: string;\n  id: PeppolId;\n  name: string;\n};\n\nexport type PermissionId = string;\n\nexport type PermissionsEuEntityDetails = {\n  address: string;\n  fullName: string;\n};\n\nexport type PermissionsOperationResponse = {\n  referenceNumber: ReferenceNumber;\n};\n\nexport type PermissionsOperationStatusResponse = {\n  status: StatusInfo;\n};\n\nexport type PermissionsSubjectEntityByFingerprintDetails = {\n  address?: string | null;\n  fullName: string;\n  subjectDetailsType: EntitySubjectByFingerprintDetailsType;\n};\n\nexport type PermissionsSubjectEntityByIdentifierDetails = {\n  fullName: string;\n  subjectDetailsType: EntitySubjectByIdentifierDetailsType;\n};\n\nexport type PermissionsSubjectEntityDetails = {\n  address?: string | null;\n  fullName: string;\n  subjectDetailsType: EntitySubjectDetailsType;\n};\n\nexport type PermissionsSubjectPersonByFingerprintDetails = {\n  birthDate?: string | null;\n  firstName: string;\n  idDocument?: IdDocument | null;\n  lastName: string;\n  personIdentifier?: PersonIdentifier | null;\n  subjectDetailsType: PersonSubjectByFingerprintDetailsType;\n};\n\nexport type PermissionsSubjectPersonDetails = {\n  birthDate?: string | null;\n  firstName: string;\n  idDocument?: IdDocument | null;\n  lastName: string;\n  personIdentifier?: PersonIdentifier | null;\n  subjectDetailsType: PersonSubjectDetailsType;\n};\n\nexport type PermissionState = \"Active\" | \"Inactive\";\n\nexport type PersonalPermission = {\n  authorizedIdentifier?: PersonalPermissionsAuthorizedIdentifier | null;\n  canDelegate: boolean;\n  contextIdentifier?: PersonalPermissionsContextIdentifier | null;\n  description: string;\n  id: PermissionId;\n  permissionScope: PersonalPermissionScope;\n  permissionState: PermissionState;\n  startDate: string;\n  subjectEntityDetails?: PermissionsSubjectEntityDetails | null;\n  subjectPersonDetails?: PermissionsSubjectPersonDetails | null;\n  targetIdentifier?: PersonalPermissionsTargetIdentifier | null;\n};\n\nexport type PersonalPermissionsAuthorizedIdentifier = {\n  type: PersonalPermissionsAuthorizedIdentifierType;\n  value: string;\n};\n\nexport type PersonalPermissionsAuthorizedIdentifierType = \"Fingerprint\" | \"Nip\" | \"Pesel\";\n\nexport type PersonalPermissionsContextIdentifier = {\n  type: PersonalPermissionsContextIdentifierType;\n  value: string;\n};\n\nexport type PersonalPermissionsContextIdentifierType = \"InternalId\" | \"Nip\";\n\nexport type PersonalPermissionScope = \"CollectiveIdentifierManage\" | \"CredentialsManage\" | \"CredentialsRead\" | \"EnforcementOperations\" | \"Introspection\" | \"InvoiceRead\" | \"InvoiceWrite\" | \"SubunitManage\" | \"VatUeManage\";\n\nexport type PersonalPermissionsQueryRequest = {\n  contextIdentifier?: PersonalPermissionsContextIdentifier | null;\n  permissionState?: PermissionState | null;\n  permissionTypes?: Array<PersonalPermissionType> | null;\n  targetIdentifier?: PersonalPermissionsTargetIdentifier | null;\n};\n\nexport type PersonalPermissionsTargetIdentifier = {\n  type: PersonalPermissionsTargetIdentifierType;\n  value?: string | null;\n};\n\nexport type PersonalPermissionsTargetIdentifierType = \"AllPartners\" | \"InternalId\" | \"Nip\";\n\nexport type PersonalPermissionType = \"CollectiveIdentifierManage\" | \"CredentialsManage\" | \"CredentialsRead\" | \"EnforcementOperations\" | \"Introspection\" | \"InvoiceRead\" | \"InvoiceWrite\" | \"SubunitManage\" | \"VatUeManage\";\n\nexport type PersonByFingerprintWithIdentifierDetails = {\n  firstName: string;\n  identifier: PersonIdentifier;\n  lastName: string;\n};\n\nexport type PersonByFingerprintWithoutIdentifierDetails = {\n  birthDate: string;\n  firstName: string;\n  idDocument: IdDocument;\n  lastName: string;\n};\n\nexport type PersonCreateRequest = {\n  createdDate?: string | null;\n  description: string;\n  isBailiff: boolean;\n  isDeceased?: boolean;\n  nip: Nip;\n  pesel: Pesel;\n};\n\nexport type PersonDetails = {\n  firstName: string;\n  lastName: string;\n};\n\nexport type PersonIdentifier = {\n  type: PersonIdentifierType;\n  value: string;\n};\n\nexport type PersonIdentifierType = \"Nip\" | \"Pesel\";\n\nexport type PersonPermission = {\n  authorIdentifier: PersonPermissionsAuthorIdentifier;\n  authorizedIdentifier: PersonPermissionsAuthorizedIdentifier;\n  canDelegate: boolean;\n  contextIdentifier?: PersonPermissionsContextIdentifier | null;\n  description: string;\n  id: PermissionId;\n  permissionScope: PersonPermissionScope;\n  permissionState: PermissionState;\n  startDate: string;\n  subjectEntityDetails?: PermissionsSubjectEntityDetails | null;\n  subjectPersonDetails?: PermissionsSubjectPersonDetails | null;\n  targetIdentifier?: PersonPermissionsTargetIdentifier | null;\n};\n\nexport type PersonPermissionsAuthorIdentifier = {\n  type: PersonPermissionsAuthorIdentifierType;\n  value?: string | null;\n};\n\nexport type PersonPermissionsAuthorIdentifierType = \"Fingerprint\" | \"Nip\" | \"Pesel\" | \"System\";\n\nexport type PersonPermissionsAuthorizedIdentifier = {\n  type: PersonPermissionsAuthorizedIdentifierType;\n  value: string;\n};\n\nexport type PersonPermissionsAuthorizedIdentifierType = \"Fingerprint\" | \"Nip\" | \"Pesel\";\n\nexport type PersonPermissionsContextIdentifier = {\n  type: PersonPermissionsContextIdentifierType;\n  value: string;\n};\n\nexport type PersonPermissionsContextIdentifierType = \"InternalId\" | \"Nip\";\n\nexport type PersonPermissionScope = \"CollectiveIdentifierManage\" | \"CredentialsManage\" | \"CredentialsRead\" | \"EnforcementOperations\" | \"Introspection\" | \"InvoiceRead\" | \"InvoiceWrite\" | \"SubunitManage\";\n\nexport type PersonPermissionsGrantRequest = {\n  description: string;\n  permissions: Array<PersonPermissionType>;\n  subjectDetails: PersonPermissionSubjectDetails;\n  subjectIdentifier: PersonPermissionsSubjectIdentifier;\n};\n\nexport type PersonPermissionsQueryRequest = {\n  authorIdentifier?: PersonPermissionsAuthorIdentifier | null;\n  authorizedIdentifier?: PersonPermissionsAuthorizedIdentifier | null;\n  contextIdentifier?: PersonPermissionsContextIdentifier | null;\n  permissionState?: PermissionState | null;\n  permissionTypes?: Array<PersonPermissionType> | null;\n  queryType: PersonPermissionsQueryType;\n  targetIdentifier?: PersonPermissionsTargetIdentifier | null;\n};\n\nexport type PersonPermissionsQueryType = \"PermissionsGrantedInCurrentContext\" | \"PermissionsInCurrentContext\";\n\nexport type PersonPermissionsSubjectIdentifier = {\n  type: PersonPermissionsSubjectIdentifierType;\n  value: string;\n};\n\nexport type PersonPermissionsSubjectIdentifierType = \"Fingerprint\" | \"Nip\" | \"Pesel\";\n\nexport type PersonPermissionsTargetIdentifier = {\n  type: PersonPermissionsTargetIdentifierType;\n  value?: string | null;\n};\n\nexport type PersonPermissionsTargetIdentifierType = \"AllPartners\" | \"InternalId\" | \"Nip\";\n\nexport type PersonPermissionSubjectDetails = {\n  personByFpNoId?: PersonByFingerprintWithoutIdentifierDetails | null;\n  personByFpWithId?: PersonByFingerprintWithIdentifierDetails | null;\n  personById?: PersonDetails | null;\n  subjectDetailsType: PersonPermissionSubjectDetailsType;\n};\n\nexport type PersonPermissionSubjectDetailsType = \"PersonByFingerprintWithIdentifier\" | \"PersonByFingerprintWithoutIdentifier\" | \"PersonByIdentifier\";\n\nexport type PersonPermissionType = \"CollectiveIdentifierManage\" | \"CredentialsManage\" | \"CredentialsRead\" | \"EnforcementOperations\" | \"Introspection\" | \"InvoiceRead\" | \"InvoiceWrite\" | \"SubunitManage\";\n\nexport type PersonRemoveRequest = {\n  nip: Nip;\n};\n\nexport type PersonSubjectByFingerprintDetailsType = \"PersonByFingerprintWithIdentifier\" | \"PersonByFingerprintWithoutIdentifier\";\n\nexport type PersonSubjectDetailsType = \"PersonByFingerprintWithIdentifier\" | \"PersonByFingerprintWithoutIdentifier\" | \"PersonByIdentifier\";\n\nexport type Pesel = string;\n\nexport type PublicKeyCertificate = {\n  certificate: string;\n  certificateId: string;\n  publicKeyId: string;\n  usage: Array<PublicKeyCertificateUsage>;\n  validFrom: string;\n  validTo: string;\n};\n\nexport type PublicKeyCertificateUsage = \"KsefTokenEncryption\" | \"SymmetricKeyEncryption\";\n\nexport type QueryCertificatesRequest = {\n  certificateSerialNumber?: string | null;\n  expiresAfter?: string | null;\n  name?: string | null;\n  status?: CertificateListItemStatus | null;\n  type?: KsefCertificateType | null;\n};\n\nexport type QueryCertificatesResponse = {\n  certificates: Array<CertificateListItem>;\n  hasMore: boolean;\n};\n\nexport type QueryEntityAuthorizationPermissionsResponse = {\n  authorizationGrants: Array<EntityAuthorizationGrant>;\n  hasMore: boolean;\n};\n\nexport type QueryEntityPermissionsResponse = {\n  hasMore: boolean;\n  permissions: Array<EntityPermissionItem>;\n};\n\nexport type QueryEntityRolesResponse = {\n  hasMore: boolean;\n  roles: Array<EntityRole>;\n};\n\nexport type QueryEuEntityPermissionsResponse = {\n  hasMore: boolean;\n  permissions: Array<EuEntityPermission>;\n};\n\nexport type QueryInvoicesMetadataResponse = {\n  hasMore: boolean;\n  invoices: Array<InvoiceMetadata>;\n  isTruncated: boolean;\n  permanentStorageHwmDate?: string | null;\n};\n\nexport type QueryPeppolProvidersResponse = {\n  hasMore: boolean;\n  peppolProviders: Array<PeppolProvider>;\n};\n\nexport type QueryPersonalPermissionsResponse = {\n  hasMore: boolean;\n  permissions: Array<PersonalPermission>;\n};\n\nexport type QueryPersonPermissionsResponse = {\n  hasMore: boolean;\n  permissions: Array<PersonPermission>;\n};\n\nexport type QuerySubordinateEntityRolesResponse = {\n  hasMore: boolean;\n  roles: Array<SubordinateEntityRole>;\n};\n\nexport type QuerySubunitPermissionsResponse = {\n  hasMore: boolean;\n  permissions: Array<SubunitPermission>;\n};\n\nexport type QueryTokensResponse = {\n  continuationToken?: string | null;\n  tokens: Array<QueryTokensResponseItem>;\n};\n\nexport type QueryTokensResponseItem = {\n  authorIdentifier: TokenAuthorIdentifierTypeIdentifier;\n  contextIdentifier: TokenContextIdentifierTypeIdentifier;\n  dateCreated: string;\n  description: string;\n  lastUseDate?: string | null;\n  referenceNumber: ReferenceNumber;\n  requestedPermissions: Array<TokenPermissionType>;\n  status: AuthenticationTokenStatus;\n  statusDetails?: Array<string> | null;\n};\n\nexport type QueryType = \"Granted\" | \"Received\";\n\nexport type ReferenceNumber = string;\n\nexport type RetrieveCertificatesListItem = {\n  certificate: string;\n  certificateName: string;\n  certificateSerialNumber: string;\n  certificateType: KsefCertificateType;\n};\n\nexport type RetrieveCertificatesRequest = {\n  certificateSerialNumbers: Array<string>;\n};\n\nexport type RetrieveCertificatesResponse = {\n  certificates: Array<RetrieveCertificatesListItem>;\n};\n\nexport type RetryAfter = number;\n\nexport type RevokeCertificateRequest = {\n  revocationReason?: CertificateRevocationReason | null;\n};\n\nexport type SendInvoiceRequest = {\n  encryptedInvoiceContent: string;\n  encryptedInvoiceHash: Sha256HashBase64;\n  encryptedInvoiceSize: number;\n  hashOfCorrectedInvoice?: Sha256HashBase64 | null;\n  invoiceHash: Sha256HashBase64;\n  invoiceSize: number;\n  offlineMode?: boolean;\n};\n\nexport type SendInvoiceResponse = {\n  referenceNumber: ReferenceNumber;\n};\n\nexport type SessionInvoicesResponse = {\n  continuationToken?: string | null;\n  invoices: Array<SessionInvoiceStatusResponse>;\n};\n\nexport type SessionInvoiceStatusResponse = {\n  acquisitionDate?: string | null;\n  invoiceFileName?: string | null;\n  invoiceHash: Sha256HashBase64;\n  invoiceNumber?: string | null;\n  invoicingDate: string;\n  invoicingMode?: InvoicingMode | null;\n  ksefNumber?: KsefNumber | null;\n  ordinalNumber: number;\n  permanentStorageDate?: string | null;\n  referenceNumber: ReferenceNumber;\n  status: InvoiceStatusInfo;\n  upoDownloadUrl?: string | null;\n  upoDownloadUrlExpirationDate?: string | null;\n};\n\nexport type SessionsQueryResponse = {\n  continuationToken?: string | null;\n  sessions: Array<SessionsQueryResponseItem>;\n};\n\nexport type SessionsQueryResponseItem = {\n  dateCreated: string;\n  dateUpdated: string;\n  failedInvoiceCount: number;\n  referenceNumber: ReferenceNumber;\n  status: StatusInfo;\n  successfulInvoiceCount: number;\n  totalInvoiceCount: number;\n  validUntil?: string | null;\n};\n\nexport type SessionStatusResponse = {\n  dateCreated: string;\n  dateUpdated: string;\n  failedInvoiceCount?: number | null;\n  invoiceCount?: number | null;\n  status: StatusInfo;\n  successfulInvoiceCount?: number | null;\n  upo?: UpoResponse | null;\n  validUntil?: string | null;\n};\n\nexport type SessionType = \"Batch\" | \"Online\";\n\nexport type SetRateLimitsRequest = {\n  rateLimits: ApiRateLimitsOverride;\n};\n\nexport type SetSessionLimitsRequest = {\n  batchSession: BatchSessionContextLimitsOverride;\n  collectiveIdentifier: CollectiveIdentifierContextLimitsOverride;\n  onlineSession: OnlineSessionContextLimitsOverride;\n};\n\nexport type SetSubjectLimitsRequest = {\n  certificate?: CertificateSubjectLimitsOverride | null;\n  enrollment?: EnrollmentSubjectLimitsOverride | null;\n  subjectIdentifierType?: SubjectIdentifierType;\n};\n\nexport type Sha256HashBase64 = string;\n\nexport type SortOrder = \"Asc\" | \"Desc\";\n\nexport type StatusInfo = {\n  code: number;\n  description: string;\n  details?: Array<string> | null;\n};\n\nexport type SubjectCreateRequest = {\n  createdDate?: string | null;\n  description: string;\n  subjectNip: Nip;\n  subjectType: SubjectType;\n  subunits?: Array<Subunit> | null;\n};\n\nexport type SubjectIdentifierType = \"Fingerprint\" | \"Nip\" | \"Pesel\";\n\nexport type SubjectRemoveRequest = {\n  subjectNip: Nip;\n};\n\nexport type SubjectType = \"EnforcementAuthority\" | \"JST\" | \"VatGroup\";\n\nexport type SubordinateEntityRole = {\n  description: string;\n  role: SubordinateEntityRoleType;\n  startDate: string;\n  subordinateEntityIdentifier: SubordinateRoleSubordinateEntityIdentifier;\n};\n\nexport type SubordinateEntityRolesQueryRequest = {\n  subordinateEntityIdentifier?: EntityPermissionsSubordinateEntityIdentifier | null;\n};\n\nexport type SubordinateEntityRoleType = \"LocalGovernmentSubUnit\" | \"VatGroupSubUnit\";\n\nexport type SubordinateRoleSubordinateEntityIdentifier = {\n  type: SubordinateRoleSubordinateEntityIdentifierType;\n  value: string;\n};\n\nexport type SubordinateRoleSubordinateEntityIdentifierType = \"Nip\";\n\nexport type Subunit = {\n  description: string;\n  subjectNip: Nip;\n};\n\nexport type SubunitPermission = {\n  authorIdentifier: SubunitPermissionsAuthorIdentifier;\n  authorizedIdentifier: SubunitPermissionsAuthorizedIdentifier;\n  description: string;\n  id: PermissionId;\n  permissionScope: SubunitPermissionScope;\n  startDate: string;\n  subjectPersonDetails?: PermissionsSubjectPersonDetails | null;\n  subunitIdentifier: SubunitPermissionsSubunitIdentifier;\n  subunitName?: string | null;\n};\n\nexport type SubunitPermissionsAuthorIdentifier = {\n  type: SubunitPermissionsAuthorIdentifierType;\n  value: string;\n};\n\nexport type SubunitPermissionsAuthorIdentifierType = \"Fingerprint\" | \"Nip\" | \"Pesel\";\n\nexport type SubunitPermissionsAuthorizedIdentifier = {\n  type: SubunitPermissionsSubjectIdentifierType;\n  value: string;\n};\n\nexport type SubunitPermissionsContextIdentifier = {\n  type: SubunitPermissionsContextIdentifierType;\n  value: string;\n};\n\nexport type SubunitPermissionsContextIdentifierType = \"InternalId\" | \"Nip\";\n\nexport type SubunitPermissionScope = \"CredentialsManage\";\n\nexport type SubunitPermissionsGrantRequest = {\n  contextIdentifier: SubunitPermissionsContextIdentifier;\n  description: string;\n  subjectDetails: PersonPermissionSubjectDetails;\n  subjectIdentifier: SubunitPermissionsSubjectIdentifier;\n  subunitName?: string | null;\n};\n\nexport type SubunitPermissionsQueryRequest = {\n  subunitIdentifier?: SubunitPermissionsSubunitIdentifier | null;\n};\n\nexport type SubunitPermissionsSubjectIdentifier = {\n  type: SubunitPermissionsSubjectIdentifierType;\n  value: string;\n};\n\nexport type SubunitPermissionsSubjectIdentifierType = \"Fingerprint\" | \"Nip\" | \"Pesel\";\n\nexport type SubunitPermissionsSubunitIdentifier = {\n  type: SubunitPermissionsSubunitIdentifierType;\n  value: string;\n};\n\nexport type SubunitPermissionsSubunitIdentifierType = \"InternalId\" | \"Nip\";\n\nexport type SystemWarning = string;\n\nexport type TestDataAuthenticationContextIdentifier = {\n  type: TestDataAuthenticationContextIdentifierType;\n  value: string;\n};\n\nexport type TestDataAuthenticationContextIdentifierType = \"InternalId\" | \"Nip\" | \"NipVatUe\" | \"PeppolId\";\n\nexport type TestDataAuthorizedIdentifier = {\n  type: TestDataAuthorizedIdentifierType;\n  value: string;\n};\n\nexport type TestDataAuthorizedIdentifierType = \"Fingerprint\" | \"Nip\" | \"Pesel\";\n\nexport type TestDataContextIdentifier = {\n  type: TestDataContextIdentifierType;\n  value: string;\n};\n\nexport type TestDataContextIdentifierType = \"Nip\";\n\nexport type TestDataPermission = {\n  description: string;\n  permissionType: TestDataPermissionType;\n};\n\nexport type TestDataPermissionsGrantRequest = {\n  authorizedIdentifier: TestDataAuthorizedIdentifier;\n  contextIdentifier: TestDataContextIdentifier;\n  permissions: Array<TestDataPermission>;\n};\n\nexport type TestDataPermissionsRevokeRequest = {\n  authorizedIdentifier: TestDataAuthorizedIdentifier;\n  contextIdentifier: TestDataContextIdentifier;\n};\n\nexport type TestDataPermissionType = \"CollectiveIdentifierManage\" | \"CredentialsManage\" | \"CredentialsRead\" | \"EnforcementOperations\" | \"Introspection\" | \"InvoiceRead\" | \"InvoiceWrite\" | \"SubunitManage\";\n\nexport type TestDataUpdateCertificateRequest = {\n  validTo: string;\n};\n\nexport type ThirdSubjectIdentifierType = \"InternalId\" | \"Nip\" | \"None\" | \"Other\" | \"VatUe\";\n\nexport type TokenAuthorIdentifierType = \"Fingerprint\" | \"Nip\" | \"Pesel\";\n\nexport type TokenAuthorIdentifierTypeIdentifier = {\n  type: TokenAuthorIdentifierType;\n  value: string;\n};\n\nexport type TokenContextIdentifierType = \"InternalId\" | \"Nip\" | \"NipVatUe\" | \"PeppolId\";\n\nexport type TokenContextIdentifierTypeIdentifier = {\n  type: TokenContextIdentifierType;\n  value: string;\n};\n\nexport type TokenInfo = {\n  token: string;\n  validUntil: string;\n};\n\nexport type TokenPermissionType = \"CollectiveIdentifierManage\" | \"CredentialsManage\" | \"CredentialsRead\" | \"EnforcementOperations\" | \"Introspection\" | \"InvoiceRead\" | \"InvoiceWrite\" | \"SubunitManage\";\n\nexport type TokenStatusResponse = {\n  authorIdentifier: TokenAuthorIdentifierTypeIdentifier;\n  contextIdentifier: TokenContextIdentifierTypeIdentifier;\n  dateCreated: string;\n  description: string;\n  lastUseDate?: string | null;\n  referenceNumber: ReferenceNumber;\n  requestedPermissions: Array<TokenPermissionType>;\n  status: AuthenticationTokenStatus;\n  statusDetails?: Array<string> | null;\n};\n\nexport type TooManyRequestsProblemDetails = {\n  detail: string;\n  instance: string;\n  status: number;\n  timestamp: string;\n  title: string;\n  traceId: string;\n};\n\nexport type TooManyRequestsResponse = {\n  status: {\n    code: number;\n    description: string;\n    details: Array<string>;\n  };\n};\n\nexport type UnauthorizedProblemDetails = {\n  detail: string;\n  instance?: string | null;\n  status: number;\n  timestamp: string;\n  title: string;\n  traceId?: string | null;\n};\n\nexport type UnblockContextAuthenticationRequest = {\n  contextIdentifier?: TestDataAuthenticationContextIdentifier | null;\n};\n\nexport type UpoPageResponse = {\n  downloadUrl: string;\n  downloadUrlExpirationDate: string;\n  referenceNumber: ReferenceNumber;\n};\n\nexport type UpoResponse = {\n  pages: Array<UpoPageResponse>;\n};\n\nexport interface OpenApiGeneratedSchemaMap {\n  AllowedIps: AllowedIps;\n  AmountType: AmountType;\n  ApiError: ApiError;\n  ApiRateLimitsOverride: ApiRateLimitsOverride;\n  ApiRateLimitValuesOverride: ApiRateLimitValuesOverride;\n  AttachmentPermissionGrantRequest: AttachmentPermissionGrantRequest;\n  AttachmentPermissionRevokeRequest: AttachmentPermissionRevokeRequest;\n  AuthenticationChallengeResponse: AuthenticationChallengeResponse;\n  AuthenticationContextIdentifier: AuthenticationContextIdentifier;\n  AuthenticationContextIdentifierType: AuthenticationContextIdentifierType;\n  AuthenticationInitResponse: AuthenticationInitResponse;\n  AuthenticationListItem: AuthenticationListItem;\n  AuthenticationListResponse: AuthenticationListResponse;\n  AuthenticationMethod: AuthenticationMethod;\n  AuthenticationMethodCategory: AuthenticationMethodCategory;\n  AuthenticationMethodInfo: AuthenticationMethodInfo;\n  AuthenticationOperationStatusResponse: AuthenticationOperationStatusResponse;\n  AuthenticationTokenRefreshResponse: AuthenticationTokenRefreshResponse;\n  AuthenticationTokensResponse: AuthenticationTokensResponse;\n  AuthenticationTokenStatus: AuthenticationTokenStatus;\n  AuthorizationPolicy: AuthorizationPolicy;\n  BadRequestProblemDetails: BadRequestProblemDetails;\n  BatchFileInfo: BatchFileInfo;\n  BatchFilePartInfo: BatchFilePartInfo;\n  BatchSessionContextLimitsOverride: BatchSessionContextLimitsOverride;\n  BatchSessionEffectiveContextLimits: BatchSessionEffectiveContextLimits;\n  BlockContextAuthenticationRequest: BlockContextAuthenticationRequest;\n  BuyerIdentifierType: BuyerIdentifierType;\n  CertificateEffectiveSubjectLimits: CertificateEffectiveSubjectLimits;\n  CertificateEnrollmentDataResponse: CertificateEnrollmentDataResponse;\n  CertificateEnrollmentStatusResponse: CertificateEnrollmentStatusResponse;\n  CertificateLimit: CertificateLimit;\n  CertificateLimitsResponse: CertificateLimitsResponse;\n  CertificateListItem: CertificateListItem;\n  CertificateListItemStatus: CertificateListItemStatus;\n  CertificateRevocationReason: CertificateRevocationReason;\n  CertificateSubjectIdentifier: CertificateSubjectIdentifier;\n  CertificateSubjectIdentifierType: CertificateSubjectIdentifierType;\n  CertificateSubjectLimitsOverride: CertificateSubjectLimitsOverride;\n  Challenge: Challenge;\n  CheckAttachmentPermissionStatusResponse: CheckAttachmentPermissionStatusResponse;\n  CollectiveIdentifierContextLimitsOverride: CollectiveIdentifierContextLimitsOverride;\n  CollectiveIdentifierEffectiveContextLimits: CollectiveIdentifierEffectiveContextLimits;\n  CollectiveIdentifierInvoice: CollectiveIdentifierInvoice;\n  CollectiveIdentifierInvoicePayment: CollectiveIdentifierInvoicePayment;\n  CollectiveIdentifierInvoicesQueryRequest: CollectiveIdentifierInvoicesQueryRequest;\n  CollectiveIdentifierInvoicesQueryResponse: CollectiveIdentifierInvoicesQueryResponse;\n  CollectiveIdentifierInvoicesQueryResponseItem: CollectiveIdentifierInvoicesQueryResponseItem;\n  CollectiveIdentifierInvoicesQueryResponseItemPayment: CollectiveIdentifierInvoicesQueryResponseItemPayment;\n  CollectiveIdentifiersByKsefNumberQueryResponse: CollectiveIdentifiersByKsefNumberQueryResponse;\n  CollectiveIdentifiersByKsefNumberQueryResponseItem: CollectiveIdentifiersByKsefNumberQueryResponseItem;\n  CollectiveIdentifiersQueryRequest: CollectiveIdentifiersQueryRequest;\n  CollectiveIdentifiersQueryResponse: CollectiveIdentifiersQueryResponse;\n  CollectiveIdentifiersQueryResponseItem: CollectiveIdentifiersQueryResponseItem;\n  CommonSessionStatus: CommonSessionStatus;\n  CompressionType: CompressionType;\n  CurrencyCode: CurrencyCode;\n  EffectiveApiRateLimits: EffectiveApiRateLimits;\n  EffectiveApiRateLimitValues: EffectiveApiRateLimitValues;\n  EffectiveContextLimits: EffectiveContextLimits;\n  EffectiveSubjectLimits: EffectiveSubjectLimits;\n  EncryptionInfo: EncryptionInfo;\n  EnrollCertificateRequest: EnrollCertificateRequest;\n  EnrollCertificateResponse: EnrollCertificateResponse;\n  EnrollmentEffectiveSubjectLimits: EnrollmentEffectiveSubjectLimits;\n  EnrollmentSubjectLimitsOverride: EnrollmentSubjectLimitsOverride;\n  EntityAuthorizationGrant: EntityAuthorizationGrant;\n  EntityAuthorizationPermissionsGrantRequest: EntityAuthorizationPermissionsGrantRequest;\n  EntityAuthorizationPermissionsQueryRequest: EntityAuthorizationPermissionsQueryRequest;\n  EntityAuthorizationPermissionsSubjectIdentifier: EntityAuthorizationPermissionsSubjectIdentifier;\n  EntityAuthorizationPermissionsSubjectIdentifierType: EntityAuthorizationPermissionsSubjectIdentifierType;\n  EntityAuthorizationPermissionType: EntityAuthorizationPermissionType;\n  EntityAuthorizationsAuthorIdentifier: EntityAuthorizationsAuthorIdentifier;\n  EntityAuthorizationsAuthorIdentifierType: EntityAuthorizationsAuthorIdentifierType;\n  EntityAuthorizationsAuthorizedEntityIdentifier: EntityAuthorizationsAuthorizedEntityIdentifier;\n  EntityAuthorizationsAuthorizedEntityIdentifierType: EntityAuthorizationsAuthorizedEntityIdentifierType;\n  EntityAuthorizationsAuthorizingEntityIdentifier: EntityAuthorizationsAuthorizingEntityIdentifier;\n  EntityAuthorizationsAuthorizingEntityIdentifierType: EntityAuthorizationsAuthorizingEntityIdentifierType;\n  EntityByFingerprintDetails: EntityByFingerprintDetails;\n  EntityDetails: EntityDetails;\n  EntityPermission: EntityPermission;\n  EntityPermissionItem: EntityPermissionItem;\n  EntityPermissionItemScope: EntityPermissionItemScope;\n  EntityPermissionsContextIdentifier: EntityPermissionsContextIdentifier;\n  EntityPermissionsContextIdentifierType: EntityPermissionsContextIdentifierType;\n  EntityPermissionsGrantRequest: EntityPermissionsGrantRequest;\n  EntityPermissionsQueryRequest: EntityPermissionsQueryRequest;\n  EntityPermissionsSubjectIdentifier: EntityPermissionsSubjectIdentifier;\n  EntityPermissionsSubjectIdentifierType: EntityPermissionsSubjectIdentifierType;\n  EntityPermissionsSubordinateEntityIdentifier: EntityPermissionsSubordinateEntityIdentifier;\n  EntityPermissionsSubordinateEntityIdentifierType: EntityPermissionsSubordinateEntityIdentifierType;\n  EntityPermissionType: EntityPermissionType;\n  EntityRole: EntityRole;\n  EntityRolesParentEntityIdentifier: EntityRolesParentEntityIdentifier;\n  EntityRolesParentEntityIdentifierType: EntityRolesParentEntityIdentifierType;\n  EntityRoleType: EntityRoleType;\n  EntitySubjectByFingerprintDetailsType: EntitySubjectByFingerprintDetailsType;\n  EntitySubjectByIdentifierDetailsType: EntitySubjectByIdentifierDetailsType;\n  EntitySubjectDetailsType: EntitySubjectDetailsType;\n  EuEntityAdministrationPermissionsContextIdentifier: EuEntityAdministrationPermissionsContextIdentifier;\n  EuEntityAdministrationPermissionsContextIdentifierType: EuEntityAdministrationPermissionsContextIdentifierType;\n  EuEntityAdministrationPermissionsGrantRequest: EuEntityAdministrationPermissionsGrantRequest;\n  EuEntityAdministrationPermissionsSubjectIdentifier: EuEntityAdministrationPermissionsSubjectIdentifier;\n  EuEntityAdministrationPermissionsSubjectIdentifierType: EuEntityAdministrationPermissionsSubjectIdentifierType;\n  EuEntityDetails: EuEntityDetails;\n  EuEntityPermission: EuEntityPermission;\n  EuEntityPermissionsAuthorIdentifier: EuEntityPermissionsAuthorIdentifier;\n  EuEntityPermissionsAuthorIdentifierType: EuEntityPermissionsAuthorIdentifierType;\n  EuEntityPermissionsGrantRequest: EuEntityPermissionsGrantRequest;\n  EuEntityPermissionsQueryPermissionType: EuEntityPermissionsQueryPermissionType;\n  EuEntityPermissionsQueryRequest: EuEntityPermissionsQueryRequest;\n  EuEntityPermissionsSubjectIdentifier: EuEntityPermissionsSubjectIdentifier;\n  EuEntityPermissionsSubjectIdentifierType: EuEntityPermissionsSubjectIdentifierType;\n  EuEntityPermissionSubjectDetails: EuEntityPermissionSubjectDetails;\n  EuEntityPermissionSubjectDetailsType: EuEntityPermissionSubjectDetailsType;\n  EuEntityPermissionType: EuEntityPermissionType;\n  ExceptionDetails: ExceptionDetails;\n  ExceptionInfo: ExceptionInfo;\n  ExceptionResponse: ExceptionResponse;\n  ExportInvoicesResponse: ExportInvoicesResponse;\n  ForbiddenProblemDetails: ForbiddenProblemDetails;\n  FormCode: FormCode;\n  GenerateCollectiveIdentifierRequest: GenerateCollectiveIdentifierRequest;\n  GenerateCollectiveIdentifierResponse: GenerateCollectiveIdentifierResponse;\n  GenerateTokenRequest: GenerateTokenRequest;\n  GenerateTokenResponse: GenerateTokenResponse;\n  GoneProblemDetails: GoneProblemDetails;\n  IdDocument: IdDocument;\n  IndirectPermissionsGrantRequest: IndirectPermissionsGrantRequest;\n  IndirectPermissionsSubjectIdentifier: IndirectPermissionsSubjectIdentifier;\n  IndirectPermissionsSubjectIdentifierType: IndirectPermissionsSubjectIdentifierType;\n  IndirectPermissionsTargetIdentifier: IndirectPermissionsTargetIdentifier;\n  IndirectPermissionsTargetIdentifierType: IndirectPermissionsTargetIdentifierType;\n  IndirectPermissionType: IndirectPermissionType;\n  InitTokenAuthenticationRequest: InitTokenAuthenticationRequest;\n  InternalId: InternalId;\n  InvoiceExportRequest: InvoiceExportRequest;\n  InvoiceExportStatusResponse: InvoiceExportStatusResponse;\n  InvoiceMetadata: InvoiceMetadata;\n  InvoiceMetadataAuthorizedSubject: InvoiceMetadataAuthorizedSubject;\n  InvoiceMetadataBuyer: InvoiceMetadataBuyer;\n  InvoiceMetadataBuyerIdentifier: InvoiceMetadataBuyerIdentifier;\n  InvoiceMetadataSeller: InvoiceMetadataSeller;\n  InvoiceMetadataThirdSubject: InvoiceMetadataThirdSubject;\n  InvoiceMetadataThirdSubjectIdentifier: InvoiceMetadataThirdSubjectIdentifier;\n  InvoicePackage: InvoicePackage;\n  InvoicePackagePart: InvoicePackagePart;\n  InvoicePermissionType: InvoicePermissionType;\n  InvoiceQueryAmount: InvoiceQueryAmount;\n  InvoiceQueryBuyerIdentifier: InvoiceQueryBuyerIdentifier;\n  InvoiceQueryDateRange: InvoiceQueryDateRange;\n  InvoiceQueryDateType: InvoiceQueryDateType;\n  InvoiceQueryFilters: InvoiceQueryFilters;\n  InvoiceQueryFormType: InvoiceQueryFormType;\n  InvoiceQuerySubjectType: InvoiceQuerySubjectType;\n  InvoiceStatusInfo: InvoiceStatusInfo;\n  InvoiceType: InvoiceType;\n  InvoicingMode: InvoicingMode;\n  KsefCertificateType: KsefCertificateType;\n  KsefNumber: KsefNumber;\n  Nip: Nip;\n  NipVatUe: NipVatUe;\n  OnlineSessionContextLimitsOverride: OnlineSessionContextLimitsOverride;\n  OnlineSessionEffectiveContextLimits: OnlineSessionEffectiveContextLimits;\n  OpenBatchSessionRequest: OpenBatchSessionRequest;\n  OpenBatchSessionResponse: OpenBatchSessionResponse;\n  OpenOnlineSessionRequest: OpenOnlineSessionRequest;\n  OpenOnlineSessionResponse: OpenOnlineSessionResponse;\n  PartUploadRequest: PartUploadRequest;\n  PeppolId: PeppolId;\n  PeppolProvider: PeppolProvider;\n  PermissionId: PermissionId;\n  PermissionsEuEntityDetails: PermissionsEuEntityDetails;\n  PermissionsOperationResponse: PermissionsOperationResponse;\n  PermissionsOperationStatusResponse: PermissionsOperationStatusResponse;\n  PermissionsSubjectEntityByFingerprintDetails: PermissionsSubjectEntityByFingerprintDetails;\n  PermissionsSubjectEntityByIdentifierDetails: PermissionsSubjectEntityByIdentifierDetails;\n  PermissionsSubjectEntityDetails: PermissionsSubjectEntityDetails;\n  PermissionsSubjectPersonByFingerprintDetails: PermissionsSubjectPersonByFingerprintDetails;\n  PermissionsSubjectPersonDetails: PermissionsSubjectPersonDetails;\n  PermissionState: PermissionState;\n  PersonalPermission: PersonalPermission;\n  PersonalPermissionsAuthorizedIdentifier: PersonalPermissionsAuthorizedIdentifier;\n  PersonalPermissionsAuthorizedIdentifierType: PersonalPermissionsAuthorizedIdentifierType;\n  PersonalPermissionsContextIdentifier: PersonalPermissionsContextIdentifier;\n  PersonalPermissionsContextIdentifierType: PersonalPermissionsContextIdentifierType;\n  PersonalPermissionScope: PersonalPermissionScope;\n  PersonalPermissionsQueryRequest: PersonalPermissionsQueryRequest;\n  PersonalPermissionsTargetIdentifier: PersonalPermissionsTargetIdentifier;\n  PersonalPermissionsTargetIdentifierType: PersonalPermissionsTargetIdentifierType;\n  PersonalPermissionType: PersonalPermissionType;\n  PersonByFingerprintWithIdentifierDetails: PersonByFingerprintWithIdentifierDetails;\n  PersonByFingerprintWithoutIdentifierDetails: PersonByFingerprintWithoutIdentifierDetails;\n  PersonCreateRequest: PersonCreateRequest;\n  PersonDetails: PersonDetails;\n  PersonIdentifier: PersonIdentifier;\n  PersonIdentifierType: PersonIdentifierType;\n  PersonPermission: PersonPermission;\n  PersonPermissionsAuthorIdentifier: PersonPermissionsAuthorIdentifier;\n  PersonPermissionsAuthorIdentifierType: PersonPermissionsAuthorIdentifierType;\n  PersonPermissionsAuthorizedIdentifier: PersonPermissionsAuthorizedIdentifier;\n  PersonPermissionsAuthorizedIdentifierType: PersonPermissionsAuthorizedIdentifierType;\n  PersonPermissionsContextIdentifier: PersonPermissionsContextIdentifier;\n  PersonPermissionsContextIdentifierType: PersonPermissionsContextIdentifierType;\n  PersonPermissionScope: PersonPermissionScope;\n  PersonPermissionsGrantRequest: PersonPermissionsGrantRequest;\n  PersonPermissionsQueryRequest: PersonPermissionsQueryRequest;\n  PersonPermissionsQueryType: PersonPermissionsQueryType;\n  PersonPermissionsSubjectIdentifier: PersonPermissionsSubjectIdentifier;\n  PersonPermissionsSubjectIdentifierType: PersonPermissionsSubjectIdentifierType;\n  PersonPermissionsTargetIdentifier: PersonPermissionsTargetIdentifier;\n  PersonPermissionsTargetIdentifierType: PersonPermissionsTargetIdentifierType;\n  PersonPermissionSubjectDetails: PersonPermissionSubjectDetails;\n  PersonPermissionSubjectDetailsType: PersonPermissionSubjectDetailsType;\n  PersonPermissionType: PersonPermissionType;\n  PersonRemoveRequest: PersonRemoveRequest;\n  PersonSubjectByFingerprintDetailsType: PersonSubjectByFingerprintDetailsType;\n  PersonSubjectDetailsType: PersonSubjectDetailsType;\n  Pesel: Pesel;\n  PublicKeyCertificate: PublicKeyCertificate;\n  PublicKeyCertificateUsage: PublicKeyCertificateUsage;\n  QueryCertificatesRequest: QueryCertificatesRequest;\n  QueryCertificatesResponse: QueryCertificatesResponse;\n  QueryEntityAuthorizationPermissionsResponse: QueryEntityAuthorizationPermissionsResponse;\n  QueryEntityPermissionsResponse: QueryEntityPermissionsResponse;\n  QueryEntityRolesResponse: QueryEntityRolesResponse;\n  QueryEuEntityPermissionsResponse: QueryEuEntityPermissionsResponse;\n  QueryInvoicesMetadataResponse: QueryInvoicesMetadataResponse;\n  QueryPeppolProvidersResponse: QueryPeppolProvidersResponse;\n  QueryPersonalPermissionsResponse: QueryPersonalPermissionsResponse;\n  QueryPersonPermissionsResponse: QueryPersonPermissionsResponse;\n  QuerySubordinateEntityRolesResponse: QuerySubordinateEntityRolesResponse;\n  QuerySubunitPermissionsResponse: QuerySubunitPermissionsResponse;\n  QueryTokensResponse: QueryTokensResponse;\n  QueryTokensResponseItem: QueryTokensResponseItem;\n  QueryType: QueryType;\n  ReferenceNumber: ReferenceNumber;\n  RetrieveCertificatesListItem: RetrieveCertificatesListItem;\n  RetrieveCertificatesRequest: RetrieveCertificatesRequest;\n  RetrieveCertificatesResponse: RetrieveCertificatesResponse;\n  RetryAfter: RetryAfter;\n  RevokeCertificateRequest: RevokeCertificateRequest;\n  SendInvoiceRequest: SendInvoiceRequest;\n  SendInvoiceResponse: SendInvoiceResponse;\n  SessionInvoicesResponse: SessionInvoicesResponse;\n  SessionInvoiceStatusResponse: SessionInvoiceStatusResponse;\n  SessionsQueryResponse: SessionsQueryResponse;\n  SessionsQueryResponseItem: SessionsQueryResponseItem;\n  SessionStatusResponse: SessionStatusResponse;\n  SessionType: SessionType;\n  SetRateLimitsRequest: SetRateLimitsRequest;\n  SetSessionLimitsRequest: SetSessionLimitsRequest;\n  SetSubjectLimitsRequest: SetSubjectLimitsRequest;\n  Sha256HashBase64: Sha256HashBase64;\n  SortOrder: SortOrder;\n  StatusInfo: StatusInfo;\n  SubjectCreateRequest: SubjectCreateRequest;\n  SubjectIdentifierType: SubjectIdentifierType;\n  SubjectRemoveRequest: SubjectRemoveRequest;\n  SubjectType: SubjectType;\n  SubordinateEntityRole: SubordinateEntityRole;\n  SubordinateEntityRolesQueryRequest: SubordinateEntityRolesQueryRequest;\n  SubordinateEntityRoleType: SubordinateEntityRoleType;\n  SubordinateRoleSubordinateEntityIdentifier: SubordinateRoleSubordinateEntityIdentifier;\n  SubordinateRoleSubordinateEntityIdentifierType: SubordinateRoleSubordinateEntityIdentifierType;\n  Subunit: Subunit;\n  SubunitPermission: SubunitPermission;\n  SubunitPermissionsAuthorIdentifier: SubunitPermissionsAuthorIdentifier;\n  SubunitPermissionsAuthorIdentifierType: SubunitPermissionsAuthorIdentifierType;\n  SubunitPermissionsAuthorizedIdentifier: SubunitPermissionsAuthorizedIdentifier;\n  SubunitPermissionsContextIdentifier: SubunitPermissionsContextIdentifier;\n  SubunitPermissionsContextIdentifierType: SubunitPermissionsContextIdentifierType;\n  SubunitPermissionScope: SubunitPermissionScope;\n  SubunitPermissionsGrantRequest: SubunitPermissionsGrantRequest;\n  SubunitPermissionsQueryRequest: SubunitPermissionsQueryRequest;\n  SubunitPermissionsSubjectIdentifier: SubunitPermissionsSubjectIdentifier;\n  SubunitPermissionsSubjectIdentifierType: SubunitPermissionsSubjectIdentifierType;\n  SubunitPermissionsSubunitIdentifier: SubunitPermissionsSubunitIdentifier;\n  SubunitPermissionsSubunitIdentifierType: SubunitPermissionsSubunitIdentifierType;\n  SystemWarning: SystemWarning;\n  TestDataAuthenticationContextIdentifier: TestDataAuthenticationContextIdentifier;\n  TestDataAuthenticationContextIdentifierType: TestDataAuthenticationContextIdentifierType;\n  TestDataAuthorizedIdentifier: TestDataAuthorizedIdentifier;\n  TestDataAuthorizedIdentifierType: TestDataAuthorizedIdentifierType;\n  TestDataContextIdentifier: TestDataContextIdentifier;\n  TestDataContextIdentifierType: TestDataContextIdentifierType;\n  TestDataPermission: TestDataPermission;\n  TestDataPermissionsGrantRequest: TestDataPermissionsGrantRequest;\n  TestDataPermissionsRevokeRequest: TestDataPermissionsRevokeRequest;\n  TestDataPermissionType: TestDataPermissionType;\n  TestDataUpdateCertificateRequest: TestDataUpdateCertificateRequest;\n  ThirdSubjectIdentifierType: ThirdSubjectIdentifierType;\n  TokenAuthorIdentifierType: TokenAuthorIdentifierType;\n  TokenAuthorIdentifierTypeIdentifier: TokenAuthorIdentifierTypeIdentifier;\n  TokenContextIdentifierType: TokenContextIdentifierType;\n  TokenContextIdentifierTypeIdentifier: TokenContextIdentifierTypeIdentifier;\n  TokenInfo: TokenInfo;\n  TokenPermissionType: TokenPermissionType;\n  TokenStatusResponse: TokenStatusResponse;\n  TooManyRequestsProblemDetails: TooManyRequestsProblemDetails;\n  TooManyRequestsResponse: TooManyRequestsResponse;\n  UnauthorizedProblemDetails: UnauthorizedProblemDetails;\n  UnblockContextAuthenticationRequest: UnblockContextAuthenticationRequest;\n  UpoPageResponse: UpoPageResponse;\n  UpoResponse: UpoResponse;\n}\n\nexport type OpenApiGeneratedSchemaName = keyof OpenApiGeneratedSchemaMap;\n\n"]}