@taxora/sdk 1.0.6 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -501,7 +501,7 @@ var ProviderDocument = class _ProviderDocument {
501
501
 
502
502
  // src/dto/VatResource.ts
503
503
  var VatResource = class _VatResource {
504
- constructor(uuid, vatUid, state, countryCode, companyName, companyAddress, requestedCompanyName, requestedCompanyNameOriginal, requestedInputAddress, checkedAt, score, scoreSource, scoreAttempts, breakdown, environment, provider, usedProviders, providerVatState, providerNote, providerLastCheckedAt, hasApiError, errorMessage, nextApiRecheckAt, providerDocument) {
504
+ constructor(uuid, vatUid, state, countryCode, companyName, companyAddress, requestedCompanyName, requestedCompanyNameOriginal, requestedInputAddress, checkedAt, score, scoreSource, scoreAttempts, breakdown, environment, provider, usedProviders, providerValid, providerVatState, providerNote, providerLastCheckedAt, hasApiError, errorMessage, nextApiRecheckAt, providerDocument) {
505
505
  this.uuid = uuid;
506
506
  this.vatUid = vatUid;
507
507
  this.state = state;
@@ -519,6 +519,7 @@ var VatResource = class _VatResource {
519
519
  this.environment = environment;
520
520
  this.provider = provider;
521
521
  this.usedProviders = usedProviders;
522
+ this.providerValid = providerValid;
522
523
  this.providerVatState = providerVatState;
523
524
  this.providerNote = providerNote;
524
525
  this.providerLastCheckedAt = providerLastCheckedAt;
@@ -544,6 +545,7 @@ var VatResource = class _VatResource {
544
545
  environment;
545
546
  provider;
546
547
  usedProviders;
548
+ providerValid;
547
549
  providerVatState;
548
550
  providerNote;
549
551
  providerLastCheckedAt;
@@ -563,6 +565,7 @@ var VatResource = class _VatResource {
563
565
  const hasApiError = data["has_api_error"] === null ? null : typeof data["has_api_error"] === "boolean" ? data["has_api_error"] : void 0;
564
566
  const errorMessage = data["error_message"] === null ? null : typeof data["error_message"] === "string" ? data["error_message"] : void 0;
565
567
  const nextApiRecheckAt = data["next_api_recheck_at"] === null ? null : typeof data["next_api_recheck_at"] === "string" ? data["next_api_recheck_at"] : void 0;
568
+ const providerValid = data["provider_valid"] === null ? null : typeof data["provider_valid"] === "boolean" ? data["provider_valid"] : void 0;
566
569
  const breakdown = Array.isArray(data["breakdown"]) ? data["breakdown"].map(ScoreBreakdown.fromArray) : void 0;
567
570
  const usedProviders = Array.isArray(data["used_providers"]) ? data["used_providers"].filter((v) => typeof v === "string") : void 0;
568
571
  const scoreAttempts = Array.isArray(data["score_attempts"]) ? data["score_attempts"] : void 0;
@@ -585,6 +588,7 @@ var VatResource = class _VatResource {
585
588
  str("environment"),
586
589
  str("provider"),
587
590
  usedProviders,
591
+ providerValid,
588
592
  str("provider_vat_state"),
589
593
  str("provider_note"),
590
594
  providerLastCheckedAt,
@@ -601,6 +605,18 @@ var VatResource = class _VatResource {
601
605
  }
602
606
  return `https://app.sandbox.taxora.io/vat/history/${this.uuid}`;
603
607
  }
608
+ isValid(useProviderState = false) {
609
+ if (useProviderState) {
610
+ return this.isProviderValid();
611
+ }
612
+ return this.state === VatState.VALID;
613
+ }
614
+ isProviderValid() {
615
+ if (this.providerValid !== void 0 && this.providerValid !== null) {
616
+ return this.providerValid;
617
+ }
618
+ return this.providerVatState === VatState.VALID;
619
+ }
604
620
  toArray() {
605
621
  return {
606
622
  uuid: this.uuid,
@@ -620,6 +636,7 @@ var VatResource = class _VatResource {
620
636
  environment: this.environment ?? null,
621
637
  provider: this.provider ?? null,
622
638
  used_providers: this.usedProviders ?? null,
639
+ provider_valid: this.providerValid ?? null,
623
640
  provider_vat_state: this.providerVatState ?? null,
624
641
  provider_note: this.providerNote ?? null,
625
642
  provider_last_checked_at: this.providerLastCheckedAt?.toISOString() ?? null,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/endpoints/AuthEndpoint.ts","../src/dto/Token.ts","../src/enums/LoginIdentifier.ts","../src/exceptions/TaxoraException.ts","../src/exceptions/AuthenticationException.ts","../src/exceptions/HttpException.ts","../src/dto/CompanyResource.ts","../src/endpoints/CompanyEndpoint.ts","../src/enums/VatState.ts","../src/dto/CompanyAddress.ts","../src/dto/ScoreBreakdown.ts","../src/dto/ProviderDocumentLine.ts","../src/dto/ProviderDocument.ts","../src/dto/VatResource.ts","../src/dto/VatCollection.ts","../src/dto/VatCertificateExport.ts","../src/dto/VatValidationAddressInput.ts","../src/exceptions/ValidationException.ts","../src/endpoints/VatEndpoint.ts","../src/enums/Environment.ts","../src/http/FetchHttpClient.ts","../src/http/InMemoryTokenStorage.ts","../src/http/AuthRetryHttpClient.ts","../src/client/TaxoraClient.ts","../src/client/TaxoraClientFactory.ts","../src/enums/ApiVersion.ts","../src/enums/Language.ts"],"sourcesContent":["// Client\nexport { TaxoraClient } from './client/TaxoraClient.js';\nexport { TaxoraClientFactory } from './client/TaxoraClientFactory.js';\nexport type { TaxoraClientOptions } from './client/TaxoraClient.js';\n\n// Endpoints\nexport { AuthEndpoint } from './endpoints/AuthEndpoint.js';\nexport { CompanyEndpoint } from './endpoints/CompanyEndpoint.js';\nexport { VatEndpoint } from './endpoints/VatEndpoint.js';\n\n// DTOs\nexport { Token } from './dto/Token.js';\nexport { ScoreBreakdown } from './dto/ScoreBreakdown.js';\nexport { CompanyAddress } from './dto/CompanyAddress.js';\nexport type { CompanyResource } from './dto/CompanyResource.js';\nexport { VatValidationAddressInput } from './dto/VatValidationAddressInput.js';\nexport { ProviderDocumentLine } from './dto/ProviderDocumentLine.js';\nexport { ProviderDocument } from './dto/ProviderDocument.js';\nexport { VatResource } from './dto/VatResource.js';\nexport { VatCollection } from './dto/VatCollection.js';\nexport { VatCertificateExport } from './dto/VatCertificateExport.js';\n\n// Enums\nexport { Environment, getBaseUrl } from './enums/Environment.js';\nexport type { Environment as EnvironmentType } from './enums/Environment.js';\nexport { ApiVersion } from './enums/ApiVersion.js';\nexport { Language } from './enums/Language.js';\nexport { LoginIdentifier } from './enums/LoginIdentifier.js';\nexport { VatState, getFailedVatStates, describeVatState } from './enums/VatState.js';\n\n// Exceptions\nexport { TaxoraException } from './exceptions/TaxoraException.js';\nexport { AuthenticationException } from './exceptions/AuthenticationException.js';\nexport { HttpException } from './exceptions/HttpException.js';\nexport { ValidationException } from './exceptions/ValidationException.js';\n\n// HTTP\nexport type { TokenStorageInterface } from './http/TokenStorageInterface.js';\nexport { InMemoryTokenStorage } from './http/InMemoryTokenStorage.js';\nexport type { HttpClientInterface } from './http/HttpClientInterface.js';\nexport { FetchHttpClient } from './http/FetchHttpClient.js';\nexport { AuthRetryHttpClient } from './http/AuthRetryHttpClient.js';\n","import { hostname } from 'os';\nimport { Token } from '../dto/Token.js';\nimport { LoginIdentifier } from '../enums/LoginIdentifier.js';\nimport { AuthenticationException } from '../exceptions/AuthenticationException.js';\nimport { HttpException } from '../exceptions/HttpException.js';\nimport { type HttpClientInterface } from '../http/HttpClientInterface.js';\nimport { type TokenStorageInterface } from '../http/TokenStorageInterface.js';\n\nexport class AuthEndpoint {\n constructor(\n private readonly baseUrl: string,\n private readonly apiKey: string,\n private readonly tokenStorage: TokenStorageInterface,\n private readonly httpClient: HttpClientInterface,\n ) {}\n\n async login(\n identifier: string,\n password: string,\n device?: string,\n loginIdentifier: LoginIdentifier = LoginIdentifier.EMAIL,\n ): Promise<Token> {\n const deviceName = device ?? hostname();\n\n const body: Record<string, string> = {\n identifier: loginIdentifier,\n password,\n device_name: deviceName,\n };\n\n if (loginIdentifier === LoginIdentifier.CLIENT_ID) {\n body['client_id'] = identifier;\n } else {\n body['email'] = identifier;\n }\n\n const response = await this.httpClient.request('POST', `${this.baseUrl}/auth/login`, {\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n },\n body: JSON.stringify(body),\n });\n\n const responseText = await response.text();\n\n if (response.status === 401) {\n throw new AuthenticationException('Authentication failed: invalid credentials', {\n status: 401,\n body: responseText,\n });\n }\n\n if (!response.ok) {\n throw new HttpException(`HTTP error ${response.status}`, response.status, responseText);\n }\n\n const data = this.parseResponse(responseText);\n const token = Token.fromArray(data);\n this.tokenStorage.set(token);\n return token;\n }\n\n async loginWithClientId(clientId: string, password: string, device?: string): Promise<Token> {\n return this.login(clientId, password, device, LoginIdentifier.CLIENT_ID);\n }\n\n async refresh(): Promise<Token> {\n const storedToken = this.tokenStorage.get();\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n };\n\n if (storedToken) {\n headers['Authorization'] = `Bearer ${storedToken.accessToken}`;\n }\n\n const response = await this.httpClient.request('POST', `${this.baseUrl}/auth/refresh`, { headers });\n const responseText = await response.text();\n\n if (response.status === 401) {\n throw new AuthenticationException('Token refresh failed: unauthorized', { status: 401, body: responseText });\n }\n\n if (!response.ok) {\n throw new HttpException(`HTTP error ${response.status}`, response.status, responseText);\n }\n\n const data = this.parseResponse(responseText);\n const token = Token.fromArray(data);\n this.tokenStorage.set(token);\n return token;\n }\n\n private parseResponse(responseText: string): Record<string, unknown> {\n let parsed: unknown;\n try {\n parsed = JSON.parse(responseText);\n } catch {\n throw new HttpException('Invalid JSON response', 0, responseText);\n }\n\n if (typeof parsed !== 'object' || parsed === null) {\n throw new HttpException('Unexpected response format', 0, responseText);\n }\n\n const obj = parsed as Record<string, unknown>;\n if (obj['data'] !== undefined && typeof obj['data'] === 'object' && obj['data'] !== null) {\n return obj['data'] as Record<string, unknown>;\n }\n\n return obj;\n }\n}\n","export class Token {\n constructor(\n public readonly accessToken: string,\n public readonly tokenType: string,\n public readonly expiresAt: Date,\n ) {}\n\n isExpired(bufferSeconds = 15): boolean {\n return new Date(Date.now() + bufferSeconds * 1000) >= this.expiresAt;\n }\n\n static fromArray(data: Record<string, unknown>): Token {\n let accessToken = String(data['access_token'] ?? '');\n if (accessToken.startsWith('Bearer ')) {\n accessToken = accessToken.slice(7);\n }\n\n const tokenType = String(data['token_type'] ?? 'Bearer');\n const expiresIn = typeof data['expires_in'] === 'number' ? data['expires_in'] : 3600;\n const expiresAt = new Date(Date.now() + expiresIn * 1000);\n\n return new Token(accessToken, tokenType, expiresAt);\n }\n\n toArray(): { access_token: string; token_type: string; expires_at: string } {\n return {\n access_token: this.accessToken,\n token_type: this.tokenType,\n expires_at: this.expiresAt.toISOString(),\n };\n }\n}\n","export const LoginIdentifier = {\n EMAIL: 'email',\n CLIENT_ID: 'client_id',\n} as const;\n\nexport type LoginIdentifier = (typeof LoginIdentifier)[keyof typeof LoginIdentifier];\n","export class TaxoraException extends Error {\n public readonly context: Record<string, unknown>;\n\n constructor(message: string, context: Record<string, unknown> = {}) {\n super(message);\n this.name = 'TaxoraException';\n this.context = context;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import { TaxoraException } from './TaxoraException.js';\n\nexport class AuthenticationException extends TaxoraException {\n public readonly statusCode = 401;\n\n constructor(message: string, context: Record<string, unknown> = {}) {\n super(message, context);\n this.name = 'AuthenticationException';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import { TaxoraException } from './TaxoraException.js';\n\nexport class HttpException extends TaxoraException {\n public readonly statusCode: number;\n public readonly responseBody: string;\n\n constructor(message: string, statusCode: number, responseBody: string, context: Record<string, unknown> = {}) {\n super(message, context);\n this.name = 'HttpException';\n this.statusCode = statusCode;\n this.responseBody = responseBody;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n getStatusCode(): number {\n return this.statusCode;\n }\n\n getResponseBody(): string {\n return this.responseBody;\n }\n}\n","export interface CompanyResource {\n id?: number;\n uuid?: string;\n name?: string;\n vat_uid?: string;\n address_line_1?: string | null;\n address_line_2?: string | null;\n street?: string | null;\n zip_code?: string | null;\n city?: string | null;\n country_code?: string | null;\n email?: string;\n phone_number?: string | null;\n api_rate_limit: number;\n vat_rate_limit: number;\n /**\n * @deprecated Use api_rate_limit and vat_rate_limit instead.\n */\n rate_limit?: number;\n state?: string;\n source?: string;\n [key: string]: unknown;\n}\n\nexport function normalizeCompanyResource(data: Record<string, unknown>): CompanyResource {\n const apiRateLimit = typeof data['api_rate_limit'] === 'number' ? data['api_rate_limit'] : undefined;\n const vatRateLimit = typeof data['vat_rate_limit'] === 'number' ? data['vat_rate_limit'] : undefined;\n const legacyRateLimit = typeof data['rate_limit'] === 'number' ? data['rate_limit'] : undefined;\n\n return {\n ...data,\n api_rate_limit: apiRateLimit ?? legacyRateLimit ?? 0,\n vat_rate_limit: vatRateLimit ?? legacyRateLimit ?? 0,\n };\n}\n","import { HttpException } from '../exceptions/HttpException.js';\nimport { normalizeCompanyResource, type CompanyResource } from '../dto/CompanyResource.js';\nimport { type HttpClientInterface } from '../http/HttpClientInterface.js';\nimport { type TokenStorageInterface } from '../http/TokenStorageInterface.js';\n\nexport class CompanyEndpoint {\n constructor(\n private readonly baseUrl: string,\n private readonly apiKey: string,\n private readonly tokenStorage: TokenStorageInterface,\n private readonly httpClient: HttpClientInterface,\n ) {}\n\n async get(): Promise<CompanyResource> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n };\n\n const token = this.tokenStorage.get();\n if (token) {\n headers['Authorization'] = `Bearer ${token.accessToken}`;\n }\n\n const response = await this.httpClient.request('GET', `${this.baseUrl}/company`, { headers });\n const responseText = await response.text();\n\n if (!response.ok) {\n throw new HttpException(`HTTP error ${response.status}`, response.status, responseText);\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(responseText);\n } catch {\n throw new HttpException('Invalid JSON response', 0, responseText);\n }\n\n if (typeof parsed !== 'object' || parsed === null) {\n throw new HttpException('Unexpected response format', 0, responseText);\n }\n\n const obj = parsed as Record<string, unknown>;\n if (obj['data'] !== undefined && typeof obj['data'] === 'object' && obj['data'] !== null) {\n return normalizeCompanyResource(obj['data'] as Record<string, unknown>);\n }\n\n return normalizeCompanyResource(obj);\n }\n}\n","export const VatState = {\n VALID: 'valid',\n INVALID: 'invalid',\n FRAUD: 'fraud',\n UNKNOWN: 'unknown',\n} as const;\n\nexport type VatState = (typeof VatState)[keyof typeof VatState];\n\nexport function getFailedVatStates(): VatState[] {\n return [VatState.INVALID, VatState.FRAUD];\n}\n\nconst DESCRIPTIONS: Record<VatState, string> = {\n [VatState.VALID]: 'The VAT number is valid and active.',\n [VatState.INVALID]: 'The VAT number is invalid or not registered.',\n [VatState.FRAUD]: 'The VAT number has been flagged as potentially fraudulent.',\n [VatState.UNKNOWN]: 'The VAT number state could not be determined.',\n};\n\nexport function describeVatState(state: VatState): string {\n return DESCRIPTIONS[state];\n}\n","interface CompanyAddressProps {\n fullAddress?: string | null;\n name?: string | null;\n street?: string | null;\n postalCode?: string | null;\n city?: string | null;\n state?: string | null;\n country?: string | null;\n raw?: string | null;\n}\n\nexport class CompanyAddress {\n public readonly fullAddress: string | null;\n public readonly name: string | null;\n public readonly street: string | null;\n public readonly postalCode: string | null;\n public readonly city: string | null;\n public readonly state: string | null;\n public readonly country: string | null;\n public readonly raw: string | null;\n\n constructor(props: CompanyAddressProps) {\n this.name = props.name ?? null;\n this.street = props.street ?? null;\n this.postalCode = props.postalCode ?? null;\n this.city = props.city ?? null;\n this.state = props.state ?? null;\n this.country = props.country ?? null;\n this.raw = props.raw ?? null;\n this.fullAddress = props.fullAddress ?? this.assembleFullAddress();\n }\n\n private assembleFullAddress(): string | null {\n const parts = [this.street, this.postalCode, this.city, this.country].filter(Boolean);\n return parts.length > 0 ? parts.join(', ') : null;\n }\n\n static from(value: unknown): CompanyAddress | null {\n if (value === null || value === undefined) return null;\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) return null;\n\n try {\n const parsed: unknown = JSON.parse(trimmed);\n if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {\n return CompanyAddress.fromArray(parsed as Record<string, unknown>, trimmed);\n }\n } catch {\n // Not valid JSON — treat as plain string\n }\n return new CompanyAddress({ raw: trimmed });\n }\n\n if (typeof value === 'object' && !Array.isArray(value)) {\n return CompanyAddress.fromArray(value as Record<string, unknown>, null);\n }\n\n return null;\n }\n\n static fromArray(data: Record<string, unknown>, raw: string | null): CompanyAddress {\n const get = (key: string): string | null => {\n const val = data[key] ?? data[key.replace(/_/g, '-')];\n return typeof val === 'string' && val.trim() ? val.trim() : null;\n };\n\n return new CompanyAddress({\n fullAddress: get('full_address'),\n name: get('name'),\n street: get('street'),\n postalCode: get('postal_code') ?? get('postalCode'),\n city: get('city'),\n state: get('state'),\n country: get('country'),\n raw,\n });\n }\n\n toArray(): Record<string, string | null> {\n return {\n full_address: this.fullAddress,\n name: this.name,\n street: this.street,\n postal_code: this.postalCode,\n city: this.city,\n state: this.state,\n country: this.country,\n };\n }\n\n toString(): string {\n return this.fullAddress ?? this.raw ?? '';\n }\n}\n","export class ScoreBreakdown {\n constructor(\n public readonly stepName: string,\n public readonly scoreContribution: number,\n public readonly metadata: Record<string, unknown>,\n ) {}\n\n static fromArray(data: Record<string, unknown>): ScoreBreakdown {\n return new ScoreBreakdown(\n typeof data['step_name'] === 'string' ? data['step_name'] : '',\n typeof data['score_contribution'] === 'number' ? data['score_contribution'] : 0,\n data['metadata'] !== null && typeof data['metadata'] === 'object' && !Array.isArray(data['metadata'])\n ? (data['metadata'] as Record<string, unknown>)\n : {},\n );\n }\n\n toArray(): { step_name: string; score_contribution: number; metadata: Record<string, unknown> } {\n return {\n step_name: this.stepName,\n score_contribution: this.scoreContribution,\n metadata: this.metadata,\n };\n }\n}\n","export class ProviderDocumentLine {\n constructor(\n public readonly id: number | null,\n public readonly vatUid: string | null,\n public readonly rowNumber: number | null,\n public readonly entryIdentifier: string | null,\n public readonly reference: string | null,\n public readonly meta: Record<string, unknown>,\n ) {}\n\n static fromArray(data: unknown): ProviderDocumentLine | null {\n if (data === null || data === undefined || typeof data !== 'object' || Array.isArray(data)) {\n return null;\n }\n const d = data as Record<string, unknown>;\n\n return new ProviderDocumentLine(\n typeof d['id'] === 'number' ? d['id'] : null,\n typeof d['vat_uid'] === 'string' ? d['vat_uid'] : null,\n typeof d['row_number'] === 'number' ? d['row_number'] : null,\n typeof d['entry_identifier'] === 'string' ? d['entry_identifier'] : null,\n typeof d['reference'] === 'string' ? d['reference'] : null,\n d['meta'] !== null && typeof d['meta'] === 'object' && !Array.isArray(d['meta'])\n ? (d['meta'] as Record<string, unknown>)\n : {},\n );\n }\n\n toArray(): Record<string, unknown> {\n return {\n id: this.id,\n vat_uid: this.vatUid,\n row_number: this.rowNumber,\n entry_identifier: this.entryIdentifier,\n reference: this.reference,\n meta: this.meta,\n };\n }\n}\n","import { ProviderDocumentLine } from './ProviderDocumentLine.js';\n\nexport class ProviderDocument {\n constructor(\n public readonly id: number | null,\n public readonly provider: string | null,\n public readonly documentType: string | null,\n public readonly state: string | null,\n public readonly documentDate: Date | null,\n public readonly mime: string | null,\n public readonly size: number | null,\n public readonly hash: string | null,\n public readonly meta: Record<string, unknown>,\n public readonly line: ProviderDocumentLine | null,\n ) {}\n\n static fromArray(data: unknown): ProviderDocument | null {\n if (data === null || data === undefined || typeof data !== 'object' || Array.isArray(data)) {\n return null;\n }\n const d = data as Record<string, unknown>;\n\n const documentDate =\n typeof d['document_date'] === 'string' && d['document_date'] ? new Date(d['document_date']) : null;\n\n return new ProviderDocument(\n typeof d['id'] === 'number' ? d['id'] : null,\n typeof d['provider'] === 'string' ? d['provider'] : null,\n typeof d['document_type'] === 'string' ? d['document_type'] : null,\n typeof d['state'] === 'string' ? d['state'] : null,\n documentDate,\n typeof d['mime'] === 'string' ? d['mime'] : null,\n typeof d['size'] === 'number' ? d['size'] : null,\n typeof d['hash'] === 'string' ? d['hash'] : null,\n d['meta'] !== null && typeof d['meta'] === 'object' && !Array.isArray(d['meta'])\n ? (d['meta'] as Record<string, unknown>)\n : {},\n ProviderDocumentLine.fromArray(d['line']),\n );\n }\n\n toArray(): Record<string, unknown> {\n return {\n id: this.id,\n provider: this.provider,\n document_type: this.documentType,\n state: this.state,\n document_date: this.documentDate?.toISOString() ?? null,\n mime: this.mime,\n size: this.size,\n hash: this.hash,\n meta: this.meta,\n line: this.line?.toArray() ?? null,\n };\n }\n}\n","import { VatState } from '../enums/VatState.js';\nimport { CompanyAddress } from './CompanyAddress.js';\nimport { ScoreBreakdown } from './ScoreBreakdown.js';\nimport { ProviderDocument } from './ProviderDocument.js';\n\nexport class VatResource {\n constructor(\n public readonly uuid: string | undefined,\n public readonly vatUid: string | undefined,\n public readonly state: VatState | undefined,\n public readonly countryCode: string | undefined,\n public readonly companyName: string | undefined,\n public readonly companyAddress: CompanyAddress | undefined,\n public readonly requestedCompanyName: string | undefined,\n public readonly requestedCompanyNameOriginal: string | undefined,\n public readonly requestedInputAddress: Record<string, string | null> | undefined,\n public readonly checkedAt: Date | undefined,\n public readonly score: number | undefined,\n public readonly scoreSource: string | undefined,\n public readonly scoreAttempts: Array<{ source?: string; score?: number }> | undefined,\n public readonly breakdown: ScoreBreakdown[] | undefined,\n public readonly environment: string | undefined,\n public readonly provider: string | undefined,\n public readonly usedProviders: string[] | undefined,\n public readonly providerVatState: string | undefined,\n public readonly providerNote: string | undefined,\n public readonly providerLastCheckedAt: Date | undefined,\n public readonly hasApiError: boolean | null | undefined,\n public readonly errorMessage: string | null | undefined,\n public readonly nextApiRecheckAt: string | null | undefined,\n public readonly providerDocument: ProviderDocument | undefined,\n ) {}\n\n static fromArray(data: Record<string, unknown>): VatResource {\n const str = (key: string): string | undefined => {\n const v = data[key];\n return typeof v === 'string' ? v : undefined;\n };\n\n const stateRaw = str('state');\n const state =\n stateRaw !== undefined && Object.values(VatState).includes(stateRaw as VatState)\n ? (stateRaw as VatState)\n : undefined;\n\n const checkedAt = str('checked_at') ? new Date(data['checked_at'] as string) : undefined;\n const providerLastCheckedAt = str('provider_last_checked_at')\n ? new Date(data['provider_last_checked_at'] as string)\n : undefined;\n const hasApiError =\n data['has_api_error'] === null\n ? null\n : typeof data['has_api_error'] === 'boolean'\n ? data['has_api_error']\n : undefined;\n const errorMessage =\n data['error_message'] === null\n ? null\n : typeof data['error_message'] === 'string'\n ? data['error_message']\n : undefined;\n const nextApiRecheckAt =\n data['next_api_recheck_at'] === null\n ? null\n : typeof data['next_api_recheck_at'] === 'string'\n ? data['next_api_recheck_at']\n : undefined;\n\n const breakdown = Array.isArray(data['breakdown'])\n ? (data['breakdown'] as Record<string, unknown>[]).map(ScoreBreakdown.fromArray)\n : undefined;\n\n const usedProviders = Array.isArray(data['used_providers'])\n ? (data['used_providers'] as unknown[]).filter((v): v is string => typeof v === 'string')\n : undefined;\n\n const scoreAttempts = Array.isArray(data['score_attempts'])\n ? (data['score_attempts'] as Record<string, unknown>[])\n : undefined;\n\n const requestedInputAddress =\n data['requested_input_address'] !== null &&\n typeof data['requested_input_address'] === 'object' &&\n !Array.isArray(data['requested_input_address'])\n ? (data['requested_input_address'] as Record<string, string | null>)\n : undefined;\n\n return new VatResource(\n str('uuid'),\n str('vat_uid'),\n state,\n str('country_code'),\n str('company_name'),\n CompanyAddress.from(data['company_address']) ?? undefined,\n str('requested_company_name'),\n str('requested_company_name_original'),\n requestedInputAddress,\n checkedAt,\n typeof data['score'] === 'number' ? data['score'] : undefined,\n str('score_source'),\n scoreAttempts,\n breakdown,\n str('environment'),\n str('provider'),\n usedProviders,\n str('provider_vat_state'),\n str('provider_note'),\n providerLastCheckedAt,\n hasApiError,\n errorMessage,\n nextApiRecheckAt,\n ProviderDocument.fromArray(data['provider_document']) ?? undefined,\n );\n }\n\n getBackendLink(): string | null {\n if (!this.uuid) return null;\n if (this.environment === 'LIVE') {\n return `https://app.taxora.io/vat/history/${this.uuid}`;\n }\n return `https://app.sandbox.taxora.io/vat/history/${this.uuid}`;\n }\n\n toArray(): Record<string, unknown> {\n return {\n uuid: this.uuid,\n vat_uid: this.vatUid,\n state: this.state,\n country_code: this.countryCode,\n company_name: this.companyName,\n company_address: this.companyAddress?.toArray() ?? null,\n requested_company_name: this.requestedCompanyName,\n requested_company_name_original: this.requestedCompanyNameOriginal,\n requested_input_address: this.requestedInputAddress ?? null,\n checked_at: this.checkedAt?.toISOString() ?? null,\n score: this.score ?? null,\n score_source: this.scoreSource ?? null,\n score_attempts: this.scoreAttempts ?? null,\n breakdown: this.breakdown?.map((b) => b.toArray()) ?? null,\n environment: this.environment ?? null,\n provider: this.provider ?? null,\n used_providers: this.usedProviders ?? null,\n provider_vat_state: this.providerVatState ?? null,\n provider_note: this.providerNote ?? null,\n provider_last_checked_at: this.providerLastCheckedAt?.toISOString() ?? null,\n has_api_error: this.hasApiError ?? null,\n error_message: this.errorMessage ?? null,\n next_api_recheck_at: this.nextApiRecheckAt ?? null,\n provider_document: this.providerDocument?.toArray() ?? null,\n };\n }\n}\n","import { VatResource } from './VatResource.js';\n\nexport class VatCollection implements Iterable<VatResource> {\n private readonly items: VatResource[];\n public readonly self: string | undefined;\n\n constructor(items: VatResource[], self?: string) {\n this.items = items;\n this.self = self;\n }\n\n static fromResponse(data: unknown): VatCollection {\n if (Array.isArray(data)) {\n return new VatCollection((data as Record<string, unknown>[]).map(VatResource.fromArray));\n }\n\n if (typeof data === 'object' && data !== null) {\n const obj = data as Record<string, unknown>;\n const items = Array.isArray(obj['data'])\n ? (obj['data'] as Record<string, unknown>[]).map(VatResource.fromArray)\n : [];\n const self = typeof obj['self'] === 'string' ? obj['self'] : undefined;\n return new VatCollection(items, self);\n }\n\n return new VatCollection([]);\n }\n\n [Symbol.iterator](): Iterator<VatResource> {\n return this.items[Symbol.iterator]();\n }\n\n get length(): number {\n return this.items.length;\n }\n\n all(): VatResource[] {\n return [...this.items];\n }\n}\n","export class VatCertificateExport {\n constructor(\n public readonly exportId: string,\n public readonly message?: string,\n ) {}\n\n static fromArray(data: Record<string, unknown>): VatCertificateExport {\n return new VatCertificateExport(\n typeof data['export_id'] === 'string' ? data['export_id'] : '',\n typeof data['message'] === 'string' ? data['message'] : undefined,\n );\n }\n\n toArray(): { export_id: string; message?: string } {\n const result: { export_id: string; message?: string } = { export_id: this.exportId };\n if (this.message !== undefined) result.message = this.message;\n return result;\n }\n}\n","import { TaxoraException } from '../exceptions/TaxoraException.js';\n\ninterface VatValidationAddressInputProps {\n addressLine1?: string;\n addressLine2?: string;\n postalCode?: string;\n city?: string;\n countryCode?: string;\n}\n\nconst ALLOWED_KEYS = new Set(['address_line_1', 'address_line_2', 'postal_code', 'city', 'country_code']);\n\nexport class VatValidationAddressInput {\n public readonly addressLine1?: string;\n public readonly addressLine2?: string;\n public readonly postalCode?: string;\n public readonly city?: string;\n public readonly countryCode?: string;\n\n constructor(props: VatValidationAddressInputProps) {\n if (props.addressLine1 !== undefined && props.addressLine1.length > 255) {\n throw new TaxoraException('addressLine1 must not exceed 255 characters');\n }\n if (props.addressLine2 !== undefined && props.addressLine2.length > 255) {\n throw new TaxoraException('addressLine2 must not exceed 255 characters');\n }\n if (props.countryCode !== undefined && props.countryCode.length !== 2) {\n throw new TaxoraException('countryCode must be exactly 2 characters (ISO 3166-1 alpha-2)');\n }\n\n this.addressLine1 = props.addressLine1;\n this.addressLine2 = props.addressLine2;\n this.postalCode = props.postalCode;\n this.city = props.city;\n this.countryCode = props.countryCode;\n }\n\n static fromArray(data: Record<string, unknown>): VatValidationAddressInput {\n for (const key of Object.keys(data)) {\n if (!ALLOWED_KEYS.has(key)) {\n throw new TaxoraException(`Unsupported field: \"${key}\". Allowed fields: ${[...ALLOWED_KEYS].join(', ')}`);\n }\n }\n\n const getString = (key: string): string | undefined => {\n const val = data[key];\n if (typeof val !== 'string') return undefined;\n const trimmed = val.trim();\n return trimmed || undefined;\n };\n\n const countryCode = getString('country_code');\n\n return new VatValidationAddressInput({\n addressLine1: getString('address_line_1'),\n addressLine2: getString('address_line_2'),\n postalCode: getString('postal_code'),\n city: getString('city'),\n countryCode: countryCode ? countryCode.toUpperCase() : undefined,\n });\n }\n\n toArray(): Record<string, string> {\n const result: Record<string, string> = {};\n if (this.addressLine1 !== undefined) result['address_line_1'] = this.addressLine1;\n if (this.addressLine2 !== undefined) result['address_line_2'] = this.addressLine2;\n if (this.postalCode !== undefined) result['postal_code'] = this.postalCode;\n if (this.city !== undefined) result['city'] = this.city;\n if (this.countryCode !== undefined) result['country_code'] = this.countryCode;\n return result;\n }\n}\n","import { TaxoraException } from './TaxoraException.js';\n\nexport class ValidationException extends TaxoraException {\n public readonly statusCode = 422;\n private readonly errors: Record<string, string[]>;\n\n constructor(message: string, errors: Record<string, string[]>, context: Record<string, unknown> = {}) {\n super(message, context);\n this.name = 'ValidationException';\n this.errors = errors;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n getErrors(): Record<string, string[]> {\n return this.errors;\n }\n}\n","import { VatResource } from '../dto/VatResource.js';\nimport { VatCollection } from '../dto/VatCollection.js';\nimport { VatCertificateExport } from '../dto/VatCertificateExport.js';\nimport { VatValidationAddressInput } from '../dto/VatValidationAddressInput.js';\nimport { type Language } from '../enums/Language.js';\nimport { HttpException } from '../exceptions/HttpException.js';\nimport { ValidationException } from '../exceptions/ValidationException.js';\nimport { TaxoraException } from '../exceptions/TaxoraException.js';\nimport { type HttpClientInterface } from '../http/HttpClientInterface.js';\nimport { type TokenStorageInterface } from '../http/TokenStorageInterface.js';\n\nconst DATE_REGEX = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nexport class VatEndpoint {\n constructor(\n private readonly baseUrl: string,\n private readonly apiKey: string,\n private readonly tokenStorage: TokenStorageInterface,\n private readonly httpClient: HttpClientInterface,\n ) {}\n\n async validate(\n vatUid: string,\n companyName?: string,\n provider?: string,\n addressInput?: VatValidationAddressInput | Record<string, string>,\n ): Promise<VatResource> {\n const body: Record<string, unknown> = { vat_uid: vatUid };\n if (companyName) body['company_name'] = companyName;\n if (provider) body['source'] = provider;\n\n if (addressInput) {\n body['address_input'] = addressInput instanceof VatValidationAddressInput ? addressInput.toArray() : addressInput;\n }\n\n return this.validateWithGatewayRetry(body, 2);\n }\n\n private async validateWithGatewayRetry(body: Record<string, unknown>, attemptsLeft: number): Promise<VatResource> {\n const response = await this.sendRequest('POST', `${this.baseUrl}/vat/validate`, body);\n\n if (response.status === 504) {\n if (attemptsLeft <= 1) {\n const text = await response.text();\n throw new HttpException('VAT validation timed out after multiple attempts', 504, text);\n }\n return this.validateWithGatewayRetry(body, attemptsLeft - 1);\n }\n\n const data = await this.parseJsonResponse(response);\n return VatResource.fromArray(data);\n }\n\n async validateMultiple(vatUids: string[], companyNames?: string[], provider?: string): Promise<VatCollection> {\n const body: Record<string, unknown> = { vat_uids: vatUids };\n if (companyNames) body['company_names'] = companyNames;\n if (provider) body['source'] = provider;\n\n const response = await this.sendRequest('POST', `${this.baseUrl}/vat/validate/multiple`, body);\n const data = await this.parseJsonResponse(response);\n\n return VatCollection.fromResponse(data);\n }\n\n async validateSchema(vatUid: string): Promise<Record<string, unknown>> {\n const body: Record<string, unknown> = { vat_uid: vatUid };\n const response = await this.sendRequest('POST', `${this.baseUrl}/vat/validate/schema`, body);\n return this.parseJsonResponse(response);\n }\n\n async state(vatUid: string): Promise<VatResource> {\n const response = await this.sendRequest('GET', `${this.baseUrl}/vat/state/${encodeURIComponent(vatUid)}`);\n const data = await this.parseJsonResponse(response);\n return VatResource.fromArray(data);\n }\n\n async history(vatUid?: string): Promise<VatCollection> {\n let url = `${this.baseUrl}/vat/history`;\n if (vatUid) url += `?vat_uid=${encodeURIComponent(vatUid)}`;\n\n const response = await this.sendRequest('GET', url);\n const data = await this.parseJsonResponse(response);\n return VatCollection.fromResponse(data);\n }\n\n async search(term?: string, perPage?: number): Promise<VatCollection> {\n const params = new URLSearchParams();\n if (term) params.set('term', term);\n if (perPage !== undefined) params.set('per_page', String(perPage));\n\n const queryString = params.toString();\n const url = `${this.baseUrl}/vat/search${queryString ? `?${queryString}` : ''}`;\n\n const response = await this.sendRequest('GET', url);\n const data = await this.parseJsonResponse(response);\n return VatCollection.fromResponse(data);\n }\n\n async certificate(uuid: string, lang?: Language): Promise<Uint8Array> {\n let url = `${this.baseUrl}/vat/certificate/${encodeURIComponent(uuid)}`;\n if (lang) url += `?lang=${lang}`;\n\n const response = await this.sendBinaryRequest('GET', url);\n const buffer = await response.arrayBuffer();\n return new Uint8Array(buffer);\n }\n\n async certificatesBulkExport(\n fromDate: Date | string,\n toDate: Date | string,\n countries?: string[],\n lang?: Language,\n ): Promise<VatCertificateExport> {\n return this.exportRequest(`${this.baseUrl}/vat/certificates/bulk-export`, fromDate, toDate, countries, lang);\n }\n\n async certificatesListExport(\n fromDate: Date | string,\n toDate: Date | string,\n countries?: string[],\n lang?: Language,\n ): Promise<VatCertificateExport> {\n return this.exportRequest(`${this.baseUrl}/vat/certificates/list-export`, fromDate, toDate, countries, lang);\n }\n\n private async exportRequest(\n url: string,\n fromDate: Date | string,\n toDate: Date | string,\n countries?: string[],\n lang?: Language,\n ): Promise<VatCertificateExport> {\n const from = this.formatDate(fromDate);\n const to = this.formatDate(toDate);\n\n const body: Record<string, unknown> = { from_date: from, to_date: to };\n if (countries && countries.length > 0) body['countries'] = countries;\n if (lang) body['lang'] = lang;\n\n const response = await this.sendRequest('POST', url, body);\n const data = await this.parseJsonResponse(response, [200, 202]);\n\n const exportObj = VatCertificateExport.fromArray(data);\n if (!exportObj.exportId) {\n throw new TaxoraException('Export response is missing export_id');\n }\n\n return exportObj;\n }\n\n async downloadBulkExport(exportId: string): Promise<Uint8Array> {\n const url = `${this.baseUrl}/vat/certificates/bulk-export/${encodeURIComponent(exportId)}/download`;\n const response = await this.sendBinaryRequest('GET', url);\n const buffer = await response.arrayBuffer();\n return new Uint8Array(buffer);\n }\n\n private buildHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n };\n const token = this.tokenStorage.get();\n if (token) {\n headers['Authorization'] = `Bearer ${token.accessToken}`;\n }\n return headers;\n }\n\n private async sendRequest(method: string, url: string, body?: Record<string, unknown>): Promise<Response> {\n const options: RequestInit = { headers: this.buildHeaders() };\n if (body) options.body = JSON.stringify(body);\n\n return this.httpClient.request(method, url, options);\n }\n\n private async sendBinaryRequest(method: string, url: string): Promise<Response> {\n const headers = this.buildHeaders();\n delete headers['Content-Type'];\n\n const response = await this.httpClient.request(method, url, { headers });\n if (!response.ok) {\n const text = await response.text();\n throw new HttpException(`HTTP error ${response.status}`, response.status, text);\n }\n return response;\n }\n\n private async parseJsonResponse(\n response: Response,\n acceptedStatuses: number[] = [200],\n ): Promise<Record<string, unknown>> {\n const responseText = await response.text();\n\n if (response.status === 422) {\n let errors: Record<string, string[]> = {};\n try {\n const parsed = JSON.parse(responseText) as Record<string, unknown>;\n if (parsed['errors'] !== null && typeof parsed['errors'] === 'object' && !Array.isArray(parsed['errors'])) {\n errors = parsed['errors'] as Record<string, string[]>;\n }\n } catch {\n // ignore parse errors\n }\n throw new ValidationException('Validation failed', errors);\n }\n\n if (!response.ok && !acceptedStatuses.includes(response.status)) {\n throw new HttpException(`HTTP error ${response.status}`, response.status, responseText);\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(responseText);\n } catch {\n throw new HttpException('Invalid JSON response', 0, responseText);\n }\n\n if (typeof parsed !== 'object' || parsed === null) {\n throw new HttpException('Unexpected response format', 0, responseText);\n }\n\n const obj = parsed as Record<string, unknown>;\n if (obj['data'] !== undefined && (typeof obj['data'] === 'object' || Array.isArray(obj['data']))) {\n return obj['data'] as Record<string, unknown>;\n }\n\n return obj;\n }\n\n private formatDate(date: Date | string): string {\n if (date instanceof Date) {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n\n if (!DATE_REGEX.test(date)) {\n throw new TaxoraException(`Invalid date format: \"${date}\". Expected YYYY-MM-DD.`);\n }\n\n return date;\n }\n}\n","export const Environment = {\n SANDBOX: 'sandbox',\n PRODUCTION: 'production',\n} as const;\n\nexport type Environment = (typeof Environment)[keyof typeof Environment];\n\nconst BASE_URLS: Record<Environment, string> = {\n [Environment.SANDBOX]: 'https://sandbox.taxora.io/v1',\n [Environment.PRODUCTION]: 'https://api.taxora.io/v1',\n};\n\nexport function getBaseUrl(environment: Environment): string {\n return BASE_URLS[environment];\n}\n","import { type HttpClientInterface } from './HttpClientInterface.js';\n\nexport class FetchHttpClient implements HttpClientInterface {\n async request(method: string, url: string, options: RequestInit = {}): Promise<Response> {\n return fetch(url, { ...options, method });\n }\n}\n","import { type Token } from '../dto/Token.js';\nimport { type TokenStorageInterface } from './TokenStorageInterface.js';\n\nexport class InMemoryTokenStorage implements TokenStorageInterface {\n private token: Token | null = null;\n\n get(): Token | null {\n return this.token;\n }\n\n set(token: Token): void {\n this.token = token;\n }\n\n clear(): void {\n this.token = null;\n }\n}\n","import { type Token } from '../dto/Token.js';\nimport { AuthenticationException } from '../exceptions/AuthenticationException.js';\nimport { type HttpClientInterface } from './HttpClientInterface.js';\nimport { type TokenStorageInterface } from './TokenStorageInterface.js';\n\nconst AUTH_PATH_PATTERN = /\\/auth\\//;\n\n/**\n * HTTP client wrapper that handles:\n * - Preemptive token refresh when the stored token is expired\n * - Automatic retry with a fresh token on 401 responses\n * - Passthrough for /auth/ routes (no interception)\n */\nexport class AuthRetryHttpClient implements HttpClientInterface {\n constructor(\n private readonly inner: HttpClientInterface,\n private readonly tokenStorage: TokenStorageInterface,\n private readonly refreshFn: () => Promise<Token>,\n ) {}\n\n async request(method: string, url: string, options?: RequestInit): Promise<Response> {\n // Auth routes bypass all retry logic\n if (AUTH_PATH_PATTERN.test(url)) {\n return this.inner.request(method, url, options);\n }\n\n // Preemptive refresh if token is expired\n const currentToken = this.tokenStorage.get();\n if (currentToken?.isExpired()) {\n await this.refreshFn();\n }\n\n // Build request with potentially refreshed token\n const updatedOptions = this.injectAuthHeader(options);\n const response = await this.inner.request(method, url, updatedOptions);\n\n // 401: refresh once and retry\n if (response.status === 401) {\n await this.refreshFn();\n const retryOptions = this.injectAuthHeader(options);\n const retryResponse = await this.inner.request(method, url, retryOptions);\n\n if (retryResponse.status === 401) {\n const body = await retryResponse.text();\n throw new AuthenticationException('Authentication failed after token refresh', { status: 401, body });\n }\n\n return retryResponse;\n }\n\n return response;\n }\n\n private injectAuthHeader(options?: RequestInit): RequestInit {\n const token = this.tokenStorage.get();\n if (!token) return options ?? {};\n\n const existing = options?.headers ?? {};\n const headers = { ...(existing as Record<string, string>), Authorization: `Bearer ${token.accessToken}` };\n return { ...(options ?? {}), headers };\n }\n}\n","import { AuthEndpoint } from '../endpoints/AuthEndpoint.js';\nimport { CompanyEndpoint } from '../endpoints/CompanyEndpoint.js';\nimport { VatEndpoint } from '../endpoints/VatEndpoint.js';\nimport { Environment, getBaseUrl } from '../enums/Environment.js';\nimport { type HttpClientInterface } from '../http/HttpClientInterface.js';\nimport { FetchHttpClient } from '../http/FetchHttpClient.js';\nimport { InMemoryTokenStorage } from '../http/InMemoryTokenStorage.js';\nimport { type TokenStorageInterface } from '../http/TokenStorageInterface.js';\nimport { AuthRetryHttpClient } from '../http/AuthRetryHttpClient.js';\n\nexport interface TaxoraClientOptions {\n apiKey: string;\n environment?: Environment;\n tokenStorage?: TokenStorageInterface;\n httpClient?: HttpClientInterface;\n}\n\nexport class TaxoraClient {\n public readonly auth: AuthEndpoint;\n public readonly vat: VatEndpoint;\n public readonly company: CompanyEndpoint;\n public readonly baseUrl: string;\n\n constructor(options: TaxoraClientOptions) {\n const environment = options.environment ?? Environment.SANDBOX;\n const tokenStorage = options.tokenStorage ?? new InMemoryTokenStorage();\n const httpClient = options.httpClient ?? new FetchHttpClient();\n\n this.baseUrl = getBaseUrl(environment);\n\n // Auth endpoint uses the raw HTTP client — no retry interception for auth routes\n this.auth = new AuthEndpoint(this.baseUrl, options.apiKey, tokenStorage, httpClient);\n\n // All other endpoints use the retry-capable client that handles 401 auto-refresh\n const retryClient = new AuthRetryHttpClient(httpClient, tokenStorage, () => this.auth.refresh());\n\n this.vat = new VatEndpoint(this.baseUrl, options.apiKey, tokenStorage, retryClient);\n this.company = new CompanyEndpoint(this.baseUrl, options.apiKey, tokenStorage, retryClient);\n }\n}\n","import { TaxoraClient, type TaxoraClientOptions } from './TaxoraClient.js';\n\nexport class TaxoraClientFactory {\n static create(options: TaxoraClientOptions): TaxoraClient {\n return new TaxoraClient(options);\n }\n}\n","export const ApiVersion = {\n V1: 'v1',\n} as const;\n\nexport type ApiVersion = (typeof ApiVersion)[keyof typeof ApiVersion];\n","export const Language = {\n ENGLISH: 'en',\n GERMAN: 'de',\n} as const;\n\nexport type Language = (typeof Language)[keyof typeof Language];\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,gBAAyB;;;ACAlB,IAAM,QAAN,MAAM,OAAM;AAAA,EACjB,YACkB,aACA,WACA,WAChB;AAHgB;AACA;AACA;AAAA,EACf;AAAA,EAHe;AAAA,EACA;AAAA,EACA;AAAA,EAGlB,UAAU,gBAAgB,IAAa;AACrC,WAAO,IAAI,KAAK,KAAK,IAAI,IAAI,gBAAgB,GAAI,KAAK,KAAK;AAAA,EAC7D;AAAA,EAEA,OAAO,UAAU,MAAsC;AACrD,QAAI,cAAc,OAAO,KAAK,cAAc,KAAK,EAAE;AACnD,QAAI,YAAY,WAAW,SAAS,GAAG;AACrC,oBAAc,YAAY,MAAM,CAAC;AAAA,IACnC;AAEA,UAAM,YAAY,OAAO,KAAK,YAAY,KAAK,QAAQ;AACvD,UAAM,YAAY,OAAO,KAAK,YAAY,MAAM,WAAW,KAAK,YAAY,IAAI;AAChF,UAAM,YAAY,IAAI,KAAK,KAAK,IAAI,IAAI,YAAY,GAAI;AAExD,WAAO,IAAI,OAAM,aAAa,WAAW,SAAS;AAAA,EACpD;AAAA,EAEA,UAA4E;AAC1E,WAAO;AAAA,MACL,cAAc,KAAK;AAAA,MACnB,YAAY,KAAK;AAAA,MACjB,YAAY,KAAK,UAAU,YAAY;AAAA,IACzC;AAAA,EACF;AACF;;;AC/BO,IAAM,kBAAkB;AAAA,EAC7B,OAAO;AAAA,EACP,WAAW;AACb;;;ACHO,IAAM,kBAAN,cAA8B,MAAM;AAAA,EACzB;AAAA,EAEhB,YAAY,SAAiB,UAAmC,CAAC,GAAG;AAClE,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,UAAU;AACf,WAAO,eAAe,MAAM,WAAW,SAAS;AAAA,EAClD;AACF;;;ACPO,IAAM,0BAAN,cAAsC,gBAAgB;AAAA,EAC3C,aAAa;AAAA,EAE7B,YAAY,SAAiB,UAAmC,CAAC,GAAG;AAClE,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AACZ,WAAO,eAAe,MAAM,WAAW,SAAS;AAAA,EAClD;AACF;;;ACRO,IAAM,gBAAN,cAA4B,gBAAgB;AAAA,EACjC;AAAA,EACA;AAAA,EAEhB,YAAY,SAAiB,YAAoB,cAAsB,UAAmC,CAAC,GAAG;AAC5G,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AACZ,SAAK,aAAa;AAClB,SAAK,eAAe;AACpB,WAAO,eAAe,MAAM,WAAW,SAAS;AAAA,EAClD;AAAA,EAEA,gBAAwB;AACtB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,kBAA0B;AACxB,WAAO,KAAK;AAAA,EACd;AACF;;;ALbO,IAAM,eAAN,MAAmB;AAAA,EACxB,YACmB,SACA,QACA,cACA,YACjB;AAJiB;AACA;AACA;AACA;AAAA,EAChB;AAAA,EAJgB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGnB,MAAM,MACJ,YACA,UACA,QACA,kBAAmC,gBAAgB,OACnC;AAChB,UAAM,aAAa,cAAU,oBAAS;AAEtC,UAAM,OAA+B;AAAA,MACnC,YAAY;AAAA,MACZ;AAAA,MACA,aAAa;AAAA,IACf;AAEA,QAAI,oBAAoB,gBAAgB,WAAW;AACjD,WAAK,WAAW,IAAI;AAAA,IACtB,OAAO;AACL,WAAK,OAAO,IAAI;AAAA,IAClB;AAEA,UAAM,WAAW,MAAM,KAAK,WAAW,QAAQ,QAAQ,GAAG,KAAK,OAAO,eAAe;AAAA,MACnF,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,aAAa,KAAK;AAAA,MACpB;AAAA,MACA,MAAM,KAAK,UAAU,IAAI;AAAA,IAC3B,CAAC;AAED,UAAM,eAAe,MAAM,SAAS,KAAK;AAEzC,QAAI,SAAS,WAAW,KAAK;AAC3B,YAAM,IAAI,wBAAwB,8CAA8C;AAAA,QAC9E,QAAQ;AAAA,QACR,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AAEA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,cAAc,cAAc,SAAS,MAAM,IAAI,SAAS,QAAQ,YAAY;AAAA,IACxF;AAEA,UAAM,OAAO,KAAK,cAAc,YAAY;AAC5C,UAAM,QAAQ,MAAM,UAAU,IAAI;AAClC,SAAK,aAAa,IAAI,KAAK;AAC3B,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,kBAAkB,UAAkB,UAAkB,QAAiC;AAC3F,WAAO,KAAK,MAAM,UAAU,UAAU,QAAQ,gBAAgB,SAAS;AAAA,EACzE;AAAA,EAEA,MAAM,UAA0B;AAC9B,UAAM,cAAc,KAAK,aAAa,IAAI;AAC1C,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,MAChB,aAAa,KAAK;AAAA,IACpB;AAEA,QAAI,aAAa;AACf,cAAQ,eAAe,IAAI,UAAU,YAAY,WAAW;AAAA,IAC9D;AAEA,UAAM,WAAW,MAAM,KAAK,WAAW,QAAQ,QAAQ,GAAG,KAAK,OAAO,iBAAiB,EAAE,QAAQ,CAAC;AAClG,UAAM,eAAe,MAAM,SAAS,KAAK;AAEzC,QAAI,SAAS,WAAW,KAAK;AAC3B,YAAM,IAAI,wBAAwB,sCAAsC,EAAE,QAAQ,KAAK,MAAM,aAAa,CAAC;AAAA,IAC7G;AAEA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,cAAc,cAAc,SAAS,MAAM,IAAI,SAAS,QAAQ,YAAY;AAAA,IACxF;AAEA,UAAM,OAAO,KAAK,cAAc,YAAY;AAC5C,UAAM,QAAQ,MAAM,UAAU,IAAI;AAClC,SAAK,aAAa,IAAI,KAAK;AAC3B,WAAO;AAAA,EACT;AAAA,EAEQ,cAAc,cAA+C;AACnE,QAAI;AACJ,QAAI;AACF,eAAS,KAAK,MAAM,YAAY;AAAA,IAClC,QAAQ;AACN,YAAM,IAAI,cAAc,yBAAyB,GAAG,YAAY;AAAA,IAClE;AAEA,QAAI,OAAO,WAAW,YAAY,WAAW,MAAM;AACjD,YAAM,IAAI,cAAc,8BAA8B,GAAG,YAAY;AAAA,IACvE;AAEA,UAAM,MAAM;AACZ,QAAI,IAAI,MAAM,MAAM,UAAa,OAAO,IAAI,MAAM,MAAM,YAAY,IAAI,MAAM,MAAM,MAAM;AACxF,aAAO,IAAI,MAAM;AAAA,IACnB;AAEA,WAAO;AAAA,EACT;AACF;;;AM1FO,SAAS,yBAAyB,MAAgD;AACvF,QAAM,eAAe,OAAO,KAAK,gBAAgB,MAAM,WAAW,KAAK,gBAAgB,IAAI;AAC3F,QAAM,eAAe,OAAO,KAAK,gBAAgB,MAAM,WAAW,KAAK,gBAAgB,IAAI;AAC3F,QAAM,kBAAkB,OAAO,KAAK,YAAY,MAAM,WAAW,KAAK,YAAY,IAAI;AAEtF,SAAO;AAAA,IACL,GAAG;AAAA,IACH,gBAAgB,gBAAgB,mBAAmB;AAAA,IACnD,gBAAgB,gBAAgB,mBAAmB;AAAA,EACrD;AACF;;;AC7BO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YACmB,SACA,QACA,cACA,YACjB;AAJiB;AACA;AACA;AACA;AAAA,EAChB;AAAA,EAJgB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGnB,MAAM,MAAgC;AACpC,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,MAChB,aAAa,KAAK;AAAA,IACpB;AAEA,UAAM,QAAQ,KAAK,aAAa,IAAI;AACpC,QAAI,OAAO;AACT,cAAQ,eAAe,IAAI,UAAU,MAAM,WAAW;AAAA,IACxD;AAEA,UAAM,WAAW,MAAM,KAAK,WAAW,QAAQ,OAAO,GAAG,KAAK,OAAO,YAAY,EAAE,QAAQ,CAAC;AAC5F,UAAM,eAAe,MAAM,SAAS,KAAK;AAEzC,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,cAAc,cAAc,SAAS,MAAM,IAAI,SAAS,QAAQ,YAAY;AAAA,IACxF;AAEA,QAAI;AACJ,QAAI;AACF,eAAS,KAAK,MAAM,YAAY;AAAA,IAClC,QAAQ;AACN,YAAM,IAAI,cAAc,yBAAyB,GAAG,YAAY;AAAA,IAClE;AAEA,QAAI,OAAO,WAAW,YAAY,WAAW,MAAM;AACjD,YAAM,IAAI,cAAc,8BAA8B,GAAG,YAAY;AAAA,IACvE;AAEA,UAAM,MAAM;AACZ,QAAI,IAAI,MAAM,MAAM,UAAa,OAAO,IAAI,MAAM,MAAM,YAAY,IAAI,MAAM,MAAM,MAAM;AACxF,aAAO,yBAAyB,IAAI,MAAM,CAA4B;AAAA,IACxE;AAEA,WAAO,yBAAyB,GAAG;AAAA,EACrC;AACF;;;ACjDO,IAAM,WAAW;AAAA,EACtB,OAAO;AAAA,EACP,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AACX;AAIO,SAAS,qBAAiC;AAC/C,SAAO,CAAC,SAAS,SAAS,SAAS,KAAK;AAC1C;AAEA,IAAM,eAAyC;AAAA,EAC7C,CAAC,SAAS,KAAK,GAAG;AAAA,EAClB,CAAC,SAAS,OAAO,GAAG;AAAA,EACpB,CAAC,SAAS,KAAK,GAAG;AAAA,EAClB,CAAC,SAAS,OAAO,GAAG;AACtB;AAEO,SAAS,iBAAiB,OAAyB;AACxD,SAAO,aAAa,KAAK;AAC3B;;;ACXO,IAAM,iBAAN,MAAM,gBAAe;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEhB,YAAY,OAA4B;AACtC,SAAK,OAAO,MAAM,QAAQ;AAC1B,SAAK,SAAS,MAAM,UAAU;AAC9B,SAAK,aAAa,MAAM,cAAc;AACtC,SAAK,OAAO,MAAM,QAAQ;AAC1B,SAAK,QAAQ,MAAM,SAAS;AAC5B,SAAK,UAAU,MAAM,WAAW;AAChC,SAAK,MAAM,MAAM,OAAO;AACxB,SAAK,cAAc,MAAM,eAAe,KAAK,oBAAoB;AAAA,EACnE;AAAA,EAEQ,sBAAqC;AAC3C,UAAM,QAAQ,CAAC,KAAK,QAAQ,KAAK,YAAY,KAAK,MAAM,KAAK,OAAO,EAAE,OAAO,OAAO;AACpF,WAAO,MAAM,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI;AAAA,EAC/C;AAAA,EAEA,OAAO,KAAK,OAAuC;AACjD,QAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAElD,QAAI,OAAO,UAAU,UAAU;AAC7B,YAAM,UAAU,MAAM,KAAK;AAC3B,UAAI,CAAC,QAAS,QAAO;AAErB,UAAI;AACF,cAAM,SAAkB,KAAK,MAAM,OAAO;AAC1C,YAAI,OAAO,WAAW,YAAY,WAAW,QAAQ,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC3E,iBAAO,gBAAe,UAAU,QAAmC,OAAO;AAAA,QAC5E;AAAA,MACF,QAAQ;AAAA,MAER;AACA,aAAO,IAAI,gBAAe,EAAE,KAAK,QAAQ,CAAC;AAAA,IAC5C;AAEA,QAAI,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AACtD,aAAO,gBAAe,UAAU,OAAkC,IAAI;AAAA,IACxE;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,UAAU,MAA+B,KAAoC;AAClF,UAAM,MAAM,CAAC,QAA+B;AAC1C,YAAM,MAAM,KAAK,GAAG,KAAK,KAAK,IAAI,QAAQ,MAAM,GAAG,CAAC;AACpD,aAAO,OAAO,QAAQ,YAAY,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI;AAAA,IAC9D;AAEA,WAAO,IAAI,gBAAe;AAAA,MACxB,aAAa,IAAI,cAAc;AAAA,MAC/B,MAAM,IAAI,MAAM;AAAA,MAChB,QAAQ,IAAI,QAAQ;AAAA,MACpB,YAAY,IAAI,aAAa,KAAK,IAAI,YAAY;AAAA,MAClD,MAAM,IAAI,MAAM;AAAA,MAChB,OAAO,IAAI,OAAO;AAAA,MAClB,SAAS,IAAI,SAAS;AAAA,MACtB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,UAAyC;AACvC,WAAO;AAAA,MACL,cAAc,KAAK;AAAA,MACnB,MAAM,KAAK;AAAA,MACX,QAAQ,KAAK;AAAA,MACb,aAAa,KAAK;AAAA,MAClB,MAAM,KAAK;AAAA,MACX,OAAO,KAAK;AAAA,MACZ,SAAS,KAAK;AAAA,IAChB;AAAA,EACF;AAAA,EAEA,WAAmB;AACjB,WAAO,KAAK,eAAe,KAAK,OAAO;AAAA,EACzC;AACF;;;AC/FO,IAAM,iBAAN,MAAM,gBAAe;AAAA,EAC1B,YACkB,UACA,mBACA,UAChB;AAHgB;AACA;AACA;AAAA,EACf;AAAA,EAHe;AAAA,EACA;AAAA,EACA;AAAA,EAGlB,OAAO,UAAU,MAA+C;AAC9D,WAAO,IAAI;AAAA,MACT,OAAO,KAAK,WAAW,MAAM,WAAW,KAAK,WAAW,IAAI;AAAA,MAC5D,OAAO,KAAK,oBAAoB,MAAM,WAAW,KAAK,oBAAoB,IAAI;AAAA,MAC9E,KAAK,UAAU,MAAM,QAAQ,OAAO,KAAK,UAAU,MAAM,YAAY,CAAC,MAAM,QAAQ,KAAK,UAAU,CAAC,IAC/F,KAAK,UAAU,IAChB,CAAC;AAAA,IACP;AAAA,EACF;AAAA,EAEA,UAAgG;AAC9F,WAAO;AAAA,MACL,WAAW,KAAK;AAAA,MAChB,oBAAoB,KAAK;AAAA,MACzB,UAAU,KAAK;AAAA,IACjB;AAAA,EACF;AACF;;;ACxBO,IAAM,uBAAN,MAAM,sBAAqB;AAAA,EAChC,YACkB,IACA,QACA,WACA,iBACA,WACA,MAChB;AANgB;AACA;AACA;AACA;AACA;AACA;AAAA,EACf;AAAA,EANe;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGlB,OAAO,UAAU,MAA4C;AAC3D,QAAI,SAAS,QAAQ,SAAS,UAAa,OAAO,SAAS,YAAY,MAAM,QAAQ,IAAI,GAAG;AAC1F,aAAO;AAAA,IACT;AACA,UAAM,IAAI;AAEV,WAAO,IAAI;AAAA,MACT,OAAO,EAAE,IAAI,MAAM,WAAW,EAAE,IAAI,IAAI;AAAA,MACxC,OAAO,EAAE,SAAS,MAAM,WAAW,EAAE,SAAS,IAAI;AAAA,MAClD,OAAO,EAAE,YAAY,MAAM,WAAW,EAAE,YAAY,IAAI;AAAA,MACxD,OAAO,EAAE,kBAAkB,MAAM,WAAW,EAAE,kBAAkB,IAAI;AAAA,MACpE,OAAO,EAAE,WAAW,MAAM,WAAW,EAAE,WAAW,IAAI;AAAA,MACtD,EAAE,MAAM,MAAM,QAAQ,OAAO,EAAE,MAAM,MAAM,YAAY,CAAC,MAAM,QAAQ,EAAE,MAAM,CAAC,IAC1E,EAAE,MAAM,IACT,CAAC;AAAA,IACP;AAAA,EACF;AAAA,EAEA,UAAmC;AACjC,WAAO;AAAA,MACL,IAAI,KAAK;AAAA,MACT,SAAS,KAAK;AAAA,MACd,YAAY,KAAK;AAAA,MACjB,kBAAkB,KAAK;AAAA,MACvB,WAAW,KAAK;AAAA,MAChB,MAAM,KAAK;AAAA,IACb;AAAA,EACF;AACF;;;ACpCO,IAAM,mBAAN,MAAM,kBAAiB;AAAA,EAC5B,YACkB,IACA,UACA,cACA,OACA,cACA,MACA,MACA,MACA,MACA,MAChB;AAVgB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA,EACf;AAAA,EAVe;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGlB,OAAO,UAAU,MAAwC;AACvD,QAAI,SAAS,QAAQ,SAAS,UAAa,OAAO,SAAS,YAAY,MAAM,QAAQ,IAAI,GAAG;AAC1F,aAAO;AAAA,IACT;AACA,UAAM,IAAI;AAEV,UAAM,eACJ,OAAO,EAAE,eAAe,MAAM,YAAY,EAAE,eAAe,IAAI,IAAI,KAAK,EAAE,eAAe,CAAC,IAAI;AAEhG,WAAO,IAAI;AAAA,MACT,OAAO,EAAE,IAAI,MAAM,WAAW,EAAE,IAAI,IAAI;AAAA,MACxC,OAAO,EAAE,UAAU,MAAM,WAAW,EAAE,UAAU,IAAI;AAAA,MACpD,OAAO,EAAE,eAAe,MAAM,WAAW,EAAE,eAAe,IAAI;AAAA,MAC9D,OAAO,EAAE,OAAO,MAAM,WAAW,EAAE,OAAO,IAAI;AAAA,MAC9C;AAAA,MACA,OAAO,EAAE,MAAM,MAAM,WAAW,EAAE,MAAM,IAAI;AAAA,MAC5C,OAAO,EAAE,MAAM,MAAM,WAAW,EAAE,MAAM,IAAI;AAAA,MAC5C,OAAO,EAAE,MAAM,MAAM,WAAW,EAAE,MAAM,IAAI;AAAA,MAC5C,EAAE,MAAM,MAAM,QAAQ,OAAO,EAAE,MAAM,MAAM,YAAY,CAAC,MAAM,QAAQ,EAAE,MAAM,CAAC,IAC1E,EAAE,MAAM,IACT,CAAC;AAAA,MACL,qBAAqB,UAAU,EAAE,MAAM,CAAC;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,UAAmC;AACjC,WAAO;AAAA,MACL,IAAI,KAAK;AAAA,MACT,UAAU,KAAK;AAAA,MACf,eAAe,KAAK;AAAA,MACpB,OAAO,KAAK;AAAA,MACZ,eAAe,KAAK,cAAc,YAAY,KAAK;AAAA,MACnD,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,MAAM,KAAK,MAAM,QAAQ,KAAK;AAAA,IAChC;AAAA,EACF;AACF;;;AClDO,IAAM,cAAN,MAAM,aAAY;AAAA,EACvB,YACkB,MACA,QACA,OACA,aACA,aACA,gBACA,sBACA,8BACA,uBACA,WACA,OACA,aACA,eACA,WACA,aACA,UACA,eACA,kBACA,cACA,uBACA,aACA,cACA,kBACA,kBAChB;AAxBgB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA,EACf;AAAA,EAxBe;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGlB,OAAO,UAAU,MAA4C;AAC3D,UAAM,MAAM,CAAC,QAAoC;AAC/C,YAAM,IAAI,KAAK,GAAG;AAClB,aAAO,OAAO,MAAM,WAAW,IAAI;AAAA,IACrC;AAEA,UAAM,WAAW,IAAI,OAAO;AAC5B,UAAM,QACJ,aAAa,UAAa,OAAO,OAAO,QAAQ,EAAE,SAAS,QAAoB,IAC1E,WACD;AAEN,UAAM,YAAY,IAAI,YAAY,IAAI,IAAI,KAAK,KAAK,YAAY,CAAW,IAAI;AAC/E,UAAM,wBAAwB,IAAI,0BAA0B,IACxD,IAAI,KAAK,KAAK,0BAA0B,CAAW,IACnD;AACJ,UAAM,cACJ,KAAK,eAAe,MAAM,OACtB,OACA,OAAO,KAAK,eAAe,MAAM,YAC/B,KAAK,eAAe,IACpB;AACR,UAAM,eACJ,KAAK,eAAe,MAAM,OACtB,OACA,OAAO,KAAK,eAAe,MAAM,WAC/B,KAAK,eAAe,IACpB;AACR,UAAM,mBACJ,KAAK,qBAAqB,MAAM,OAC5B,OACA,OAAO,KAAK,qBAAqB,MAAM,WACrC,KAAK,qBAAqB,IAC1B;AAER,UAAM,YAAY,MAAM,QAAQ,KAAK,WAAW,CAAC,IAC5C,KAAK,WAAW,EAAgC,IAAI,eAAe,SAAS,IAC7E;AAEJ,UAAM,gBAAgB,MAAM,QAAQ,KAAK,gBAAgB,CAAC,IACrD,KAAK,gBAAgB,EAAgB,OAAO,CAAC,MAAmB,OAAO,MAAM,QAAQ,IACtF;AAEJ,UAAM,gBAAgB,MAAM,QAAQ,KAAK,gBAAgB,CAAC,IACrD,KAAK,gBAAgB,IACtB;AAEJ,UAAM,wBACJ,KAAK,yBAAyB,MAAM,QACpC,OAAO,KAAK,yBAAyB,MAAM,YAC3C,CAAC,MAAM,QAAQ,KAAK,yBAAyB,CAAC,IACzC,KAAK,yBAAyB,IAC/B;AAEN,WAAO,IAAI;AAAA,MACT,IAAI,MAAM;AAAA,MACV,IAAI,SAAS;AAAA,MACb;AAAA,MACA,IAAI,cAAc;AAAA,MAClB,IAAI,cAAc;AAAA,MAClB,eAAe,KAAK,KAAK,iBAAiB,CAAC,KAAK;AAAA,MAChD,IAAI,wBAAwB;AAAA,MAC5B,IAAI,iCAAiC;AAAA,MACrC;AAAA,MACA;AAAA,MACA,OAAO,KAAK,OAAO,MAAM,WAAW,KAAK,OAAO,IAAI;AAAA,MACpD,IAAI,cAAc;AAAA,MAClB;AAAA,MACA;AAAA,MACA,IAAI,aAAa;AAAA,MACjB,IAAI,UAAU;AAAA,MACd;AAAA,MACA,IAAI,oBAAoB;AAAA,MACxB,IAAI,eAAe;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,iBAAiB,UAAU,KAAK,mBAAmB,CAAC,KAAK;AAAA,IAC3D;AAAA,EACF;AAAA,EAEA,iBAAgC;AAC9B,QAAI,CAAC,KAAK,KAAM,QAAO;AACvB,QAAI,KAAK,gBAAgB,QAAQ;AAC/B,aAAO,qCAAqC,KAAK,IAAI;AAAA,IACvD;AACA,WAAO,6CAA6C,KAAK,IAAI;AAAA,EAC/D;AAAA,EAEA,UAAmC;AACjC,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,OAAO,KAAK;AAAA,MACZ,cAAc,KAAK;AAAA,MACnB,cAAc,KAAK;AAAA,MACnB,iBAAiB,KAAK,gBAAgB,QAAQ,KAAK;AAAA,MACnD,wBAAwB,KAAK;AAAA,MAC7B,iCAAiC,KAAK;AAAA,MACtC,yBAAyB,KAAK,yBAAyB;AAAA,MACvD,YAAY,KAAK,WAAW,YAAY,KAAK;AAAA,MAC7C,OAAO,KAAK,SAAS;AAAA,MACrB,cAAc,KAAK,eAAe;AAAA,MAClC,gBAAgB,KAAK,iBAAiB;AAAA,MACtC,WAAW,KAAK,WAAW,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK;AAAA,MACtD,aAAa,KAAK,eAAe;AAAA,MACjC,UAAU,KAAK,YAAY;AAAA,MAC3B,gBAAgB,KAAK,iBAAiB;AAAA,MACtC,oBAAoB,KAAK,oBAAoB;AAAA,MAC7C,eAAe,KAAK,gBAAgB;AAAA,MACpC,0BAA0B,KAAK,uBAAuB,YAAY,KAAK;AAAA,MACvE,eAAe,KAAK,eAAe;AAAA,MACnC,eAAe,KAAK,gBAAgB;AAAA,MACpC,qBAAqB,KAAK,oBAAoB;AAAA,MAC9C,mBAAmB,KAAK,kBAAkB,QAAQ,KAAK;AAAA,IACzD;AAAA,EACF;AACF;;;ACrJO,IAAM,gBAAN,MAAM,eAA+C;AAAA,EACzC;AAAA,EACD;AAAA,EAEhB,YAAY,OAAsB,MAAe;AAC/C,SAAK,QAAQ;AACb,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,OAAO,aAAa,MAA8B;AAChD,QAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,aAAO,IAAI,eAAe,KAAmC,IAAI,YAAY,SAAS,CAAC;AAAA,IACzF;AAEA,QAAI,OAAO,SAAS,YAAY,SAAS,MAAM;AAC7C,YAAM,MAAM;AACZ,YAAM,QAAQ,MAAM,QAAQ,IAAI,MAAM,CAAC,IAClC,IAAI,MAAM,EAAgC,IAAI,YAAY,SAAS,IACpE,CAAC;AACL,YAAM,OAAO,OAAO,IAAI,MAAM,MAAM,WAAW,IAAI,MAAM,IAAI;AAC7D,aAAO,IAAI,eAAc,OAAO,IAAI;AAAA,IACtC;AAEA,WAAO,IAAI,eAAc,CAAC,CAAC;AAAA,EAC7B;AAAA,EAEA,CAAC,OAAO,QAAQ,IAA2B;AACzC,WAAO,KAAK,MAAM,OAAO,QAAQ,EAAE;AAAA,EACrC;AAAA,EAEA,IAAI,SAAiB;AACnB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,MAAqB;AACnB,WAAO,CAAC,GAAG,KAAK,KAAK;AAAA,EACvB;AACF;;;ACvCO,IAAM,uBAAN,MAAM,sBAAqB;AAAA,EAChC,YACkB,UACA,SAChB;AAFgB;AACA;AAAA,EACf;AAAA,EAFe;AAAA,EACA;AAAA,EAGlB,OAAO,UAAU,MAAqD;AACpE,WAAO,IAAI;AAAA,MACT,OAAO,KAAK,WAAW,MAAM,WAAW,KAAK,WAAW,IAAI;AAAA,MAC5D,OAAO,KAAK,SAAS,MAAM,WAAW,KAAK,SAAS,IAAI;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,UAAmD;AACjD,UAAM,SAAkD,EAAE,WAAW,KAAK,SAAS;AACnF,QAAI,KAAK,YAAY,OAAW,QAAO,UAAU,KAAK;AACtD,WAAO;AAAA,EACT;AACF;;;ACRA,IAAM,eAAe,oBAAI,IAAI,CAAC,kBAAkB,kBAAkB,eAAe,QAAQ,cAAc,CAAC;AAEjG,IAAM,4BAAN,MAAM,2BAA0B;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEhB,YAAY,OAAuC;AACjD,QAAI,MAAM,iBAAiB,UAAa,MAAM,aAAa,SAAS,KAAK;AACvE,YAAM,IAAI,gBAAgB,6CAA6C;AAAA,IACzE;AACA,QAAI,MAAM,iBAAiB,UAAa,MAAM,aAAa,SAAS,KAAK;AACvE,YAAM,IAAI,gBAAgB,6CAA6C;AAAA,IACzE;AACA,QAAI,MAAM,gBAAgB,UAAa,MAAM,YAAY,WAAW,GAAG;AACrE,YAAM,IAAI,gBAAgB,+DAA+D;AAAA,IAC3F;AAEA,SAAK,eAAe,MAAM;AAC1B,SAAK,eAAe,MAAM;AAC1B,SAAK,aAAa,MAAM;AACxB,SAAK,OAAO,MAAM;AAClB,SAAK,cAAc,MAAM;AAAA,EAC3B;AAAA,EAEA,OAAO,UAAU,MAA0D;AACzE,eAAW,OAAO,OAAO,KAAK,IAAI,GAAG;AACnC,UAAI,CAAC,aAAa,IAAI,GAAG,GAAG;AAC1B,cAAM,IAAI,gBAAgB,uBAAuB,GAAG,sBAAsB,CAAC,GAAG,YAAY,EAAE,KAAK,IAAI,CAAC,EAAE;AAAA,MAC1G;AAAA,IACF;AAEA,UAAM,YAAY,CAAC,QAAoC;AACrD,YAAM,MAAM,KAAK,GAAG;AACpB,UAAI,OAAO,QAAQ,SAAU,QAAO;AACpC,YAAM,UAAU,IAAI,KAAK;AACzB,aAAO,WAAW;AAAA,IACpB;AAEA,UAAM,cAAc,UAAU,cAAc;AAE5C,WAAO,IAAI,2BAA0B;AAAA,MACnC,cAAc,UAAU,gBAAgB;AAAA,MACxC,cAAc,UAAU,gBAAgB;AAAA,MACxC,YAAY,UAAU,aAAa;AAAA,MACnC,MAAM,UAAU,MAAM;AAAA,MACtB,aAAa,cAAc,YAAY,YAAY,IAAI;AAAA,IACzD,CAAC;AAAA,EACH;AAAA,EAEA,UAAkC;AAChC,UAAM,SAAiC,CAAC;AACxC,QAAI,KAAK,iBAAiB,OAAW,QAAO,gBAAgB,IAAI,KAAK;AACrE,QAAI,KAAK,iBAAiB,OAAW,QAAO,gBAAgB,IAAI,KAAK;AACrE,QAAI,KAAK,eAAe,OAAW,QAAO,aAAa,IAAI,KAAK;AAChE,QAAI,KAAK,SAAS,OAAW,QAAO,MAAM,IAAI,KAAK;AACnD,QAAI,KAAK,gBAAgB,OAAW,QAAO,cAAc,IAAI,KAAK;AAClE,WAAO;AAAA,EACT;AACF;;;ACrEO,IAAM,sBAAN,cAAkC,gBAAgB;AAAA,EACvC,aAAa;AAAA,EACZ;AAAA,EAEjB,YAAY,SAAiB,QAAkC,UAAmC,CAAC,GAAG;AACpG,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,WAAO,eAAe,MAAM,WAAW,SAAS;AAAA,EAClD;AAAA,EAEA,YAAsC;AACpC,WAAO,KAAK;AAAA,EACd;AACF;;;ACLA,IAAM,aAAa;AAEZ,IAAM,cAAN,MAAkB;AAAA,EACvB,YACmB,SACA,QACA,cACA,YACjB;AAJiB;AACA;AACA;AACA;AAAA,EAChB;AAAA,EAJgB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGnB,MAAM,SACJ,QACA,aACA,UACA,cACsB;AACtB,UAAM,OAAgC,EAAE,SAAS,OAAO;AACxD,QAAI,YAAa,MAAK,cAAc,IAAI;AACxC,QAAI,SAAU,MAAK,QAAQ,IAAI;AAE/B,QAAI,cAAc;AAChB,WAAK,eAAe,IAAI,wBAAwB,4BAA4B,aAAa,QAAQ,IAAI;AAAA,IACvG;AAEA,WAAO,KAAK,yBAAyB,MAAM,CAAC;AAAA,EAC9C;AAAA,EAEA,MAAc,yBAAyB,MAA+B,cAA4C;AAChH,UAAM,WAAW,MAAM,KAAK,YAAY,QAAQ,GAAG,KAAK,OAAO,iBAAiB,IAAI;AAEpF,QAAI,SAAS,WAAW,KAAK;AAC3B,UAAI,gBAAgB,GAAG;AACrB,cAAM,OAAO,MAAM,SAAS,KAAK;AACjC,cAAM,IAAI,cAAc,oDAAoD,KAAK,IAAI;AAAA,MACvF;AACA,aAAO,KAAK,yBAAyB,MAAM,eAAe,CAAC;AAAA,IAC7D;AAEA,UAAM,OAAO,MAAM,KAAK,kBAAkB,QAAQ;AAClD,WAAO,YAAY,UAAU,IAAI;AAAA,EACnC;AAAA,EAEA,MAAM,iBAAiB,SAAmB,cAAyB,UAA2C;AAC5G,UAAM,OAAgC,EAAE,UAAU,QAAQ;AAC1D,QAAI,aAAc,MAAK,eAAe,IAAI;AAC1C,QAAI,SAAU,MAAK,QAAQ,IAAI;AAE/B,UAAM,WAAW,MAAM,KAAK,YAAY,QAAQ,GAAG,KAAK,OAAO,0BAA0B,IAAI;AAC7F,UAAM,OAAO,MAAM,KAAK,kBAAkB,QAAQ;AAElD,WAAO,cAAc,aAAa,IAAI;AAAA,EACxC;AAAA,EAEA,MAAM,eAAe,QAAkD;AACrE,UAAM,OAAgC,EAAE,SAAS,OAAO;AACxD,UAAM,WAAW,MAAM,KAAK,YAAY,QAAQ,GAAG,KAAK,OAAO,wBAAwB,IAAI;AAC3F,WAAO,KAAK,kBAAkB,QAAQ;AAAA,EACxC;AAAA,EAEA,MAAM,MAAM,QAAsC;AAChD,UAAM,WAAW,MAAM,KAAK,YAAY,OAAO,GAAG,KAAK,OAAO,cAAc,mBAAmB,MAAM,CAAC,EAAE;AACxG,UAAM,OAAO,MAAM,KAAK,kBAAkB,QAAQ;AAClD,WAAO,YAAY,UAAU,IAAI;AAAA,EACnC;AAAA,EAEA,MAAM,QAAQ,QAAyC;AACrD,QAAI,MAAM,GAAG,KAAK,OAAO;AACzB,QAAI,OAAQ,QAAO,YAAY,mBAAmB,MAAM,CAAC;AAEzD,UAAM,WAAW,MAAM,KAAK,YAAY,OAAO,GAAG;AAClD,UAAM,OAAO,MAAM,KAAK,kBAAkB,QAAQ;AAClD,WAAO,cAAc,aAAa,IAAI;AAAA,EACxC;AAAA,EAEA,MAAM,OAAO,MAAe,SAA0C;AACpE,UAAM,SAAS,IAAI,gBAAgB;AACnC,QAAI,KAAM,QAAO,IAAI,QAAQ,IAAI;AACjC,QAAI,YAAY,OAAW,QAAO,IAAI,YAAY,OAAO,OAAO,CAAC;AAEjE,UAAM,cAAc,OAAO,SAAS;AACpC,UAAM,MAAM,GAAG,KAAK,OAAO,cAAc,cAAc,IAAI,WAAW,KAAK,EAAE;AAE7E,UAAM,WAAW,MAAM,KAAK,YAAY,OAAO,GAAG;AAClD,UAAM,OAAO,MAAM,KAAK,kBAAkB,QAAQ;AAClD,WAAO,cAAc,aAAa,IAAI;AAAA,EACxC;AAAA,EAEA,MAAM,YAAY,MAAc,MAAsC;AACpE,QAAI,MAAM,GAAG,KAAK,OAAO,oBAAoB,mBAAmB,IAAI,CAAC;AACrE,QAAI,KAAM,QAAO,SAAS,IAAI;AAE9B,UAAM,WAAW,MAAM,KAAK,kBAAkB,OAAO,GAAG;AACxD,UAAM,SAAS,MAAM,SAAS,YAAY;AAC1C,WAAO,IAAI,WAAW,MAAM;AAAA,EAC9B;AAAA,EAEA,MAAM,uBACJ,UACA,QACA,WACA,MAC+B;AAC/B,WAAO,KAAK,cAAc,GAAG,KAAK,OAAO,iCAAiC,UAAU,QAAQ,WAAW,IAAI;AAAA,EAC7G;AAAA,EAEA,MAAM,uBACJ,UACA,QACA,WACA,MAC+B;AAC/B,WAAO,KAAK,cAAc,GAAG,KAAK,OAAO,iCAAiC,UAAU,QAAQ,WAAW,IAAI;AAAA,EAC7G;AAAA,EAEA,MAAc,cACZ,KACA,UACA,QACA,WACA,MAC+B;AAC/B,UAAM,OAAO,KAAK,WAAW,QAAQ;AACrC,UAAM,KAAK,KAAK,WAAW,MAAM;AAEjC,UAAM,OAAgC,EAAE,WAAW,MAAM,SAAS,GAAG;AACrE,QAAI,aAAa,UAAU,SAAS,EAAG,MAAK,WAAW,IAAI;AAC3D,QAAI,KAAM,MAAK,MAAM,IAAI;AAEzB,UAAM,WAAW,MAAM,KAAK,YAAY,QAAQ,KAAK,IAAI;AACzD,UAAM,OAAO,MAAM,KAAK,kBAAkB,UAAU,CAAC,KAAK,GAAG,CAAC;AAE9D,UAAM,YAAY,qBAAqB,UAAU,IAAI;AACrD,QAAI,CAAC,UAAU,UAAU;AACvB,YAAM,IAAI,gBAAgB,sCAAsC;AAAA,IAClE;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,mBAAmB,UAAuC;AAC9D,UAAM,MAAM,GAAG,KAAK,OAAO,iCAAiC,mBAAmB,QAAQ,CAAC;AACxF,UAAM,WAAW,MAAM,KAAK,kBAAkB,OAAO,GAAG;AACxD,UAAM,SAAS,MAAM,SAAS,YAAY;AAC1C,WAAO,IAAI,WAAW,MAAM;AAAA,EAC9B;AAAA,EAEQ,eAAuC;AAC7C,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,MAChB,aAAa,KAAK;AAAA,IACpB;AACA,UAAM,QAAQ,KAAK,aAAa,IAAI;AACpC,QAAI,OAAO;AACT,cAAQ,eAAe,IAAI,UAAU,MAAM,WAAW;AAAA,IACxD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,YAAY,QAAgB,KAAa,MAAmD;AACxG,UAAM,UAAuB,EAAE,SAAS,KAAK,aAAa,EAAE;AAC5D,QAAI,KAAM,SAAQ,OAAO,KAAK,UAAU,IAAI;AAE5C,WAAO,KAAK,WAAW,QAAQ,QAAQ,KAAK,OAAO;AAAA,EACrD;AAAA,EAEA,MAAc,kBAAkB,QAAgB,KAAgC;AAC9E,UAAM,UAAU,KAAK,aAAa;AAClC,WAAO,QAAQ,cAAc;AAE7B,UAAM,WAAW,MAAM,KAAK,WAAW,QAAQ,QAAQ,KAAK,EAAE,QAAQ,CAAC;AACvE,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,OAAO,MAAM,SAAS,KAAK;AACjC,YAAM,IAAI,cAAc,cAAc,SAAS,MAAM,IAAI,SAAS,QAAQ,IAAI;AAAA,IAChF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,kBACZ,UACA,mBAA6B,CAAC,GAAG,GACC;AAClC,UAAM,eAAe,MAAM,SAAS,KAAK;AAEzC,QAAI,SAAS,WAAW,KAAK;AAC3B,UAAI,SAAmC,CAAC;AACxC,UAAI;AACF,cAAMA,UAAS,KAAK,MAAM,YAAY;AACtC,YAAIA,QAAO,QAAQ,MAAM,QAAQ,OAAOA,QAAO,QAAQ,MAAM,YAAY,CAAC,MAAM,QAAQA,QAAO,QAAQ,CAAC,GAAG;AACzG,mBAASA,QAAO,QAAQ;AAAA,QAC1B;AAAA,MACF,QAAQ;AAAA,MAER;AACA,YAAM,IAAI,oBAAoB,qBAAqB,MAAM;AAAA,IAC3D;AAEA,QAAI,CAAC,SAAS,MAAM,CAAC,iBAAiB,SAAS,SAAS,MAAM,GAAG;AAC/D,YAAM,IAAI,cAAc,cAAc,SAAS,MAAM,IAAI,SAAS,QAAQ,YAAY;AAAA,IACxF;AAEA,QAAI;AACJ,QAAI;AACF,eAAS,KAAK,MAAM,YAAY;AAAA,IAClC,QAAQ;AACN,YAAM,IAAI,cAAc,yBAAyB,GAAG,YAAY;AAAA,IAClE;AAEA,QAAI,OAAO,WAAW,YAAY,WAAW,MAAM;AACjD,YAAM,IAAI,cAAc,8BAA8B,GAAG,YAAY;AAAA,IACvE;AAEA,UAAM,MAAM;AACZ,QAAI,IAAI,MAAM,MAAM,WAAc,OAAO,IAAI,MAAM,MAAM,YAAY,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI;AAChG,aAAO,IAAI,MAAM;AAAA,IACnB;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,WAAW,MAA6B;AAC9C,QAAI,gBAAgB,MAAM;AACxB,YAAM,OAAO,KAAK,YAAY;AAC9B,YAAM,QAAQ,OAAO,KAAK,SAAS,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG;AACzD,YAAM,MAAM,OAAO,KAAK,QAAQ,CAAC,EAAE,SAAS,GAAG,GAAG;AAClD,aAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG;AAAA,IAChC;AAEA,QAAI,CAAC,WAAW,KAAK,IAAI,GAAG;AAC1B,YAAM,IAAI,gBAAgB,yBAAyB,IAAI,yBAAyB;AAAA,IAClF;AAEA,WAAO;AAAA,EACT;AACF;;;ACpPO,IAAM,cAAc;AAAA,EACzB,SAAS;AAAA,EACT,YAAY;AACd;AAIA,IAAM,YAAyC;AAAA,EAC7C,CAAC,YAAY,OAAO,GAAG;AAAA,EACvB,CAAC,YAAY,UAAU,GAAG;AAC5B;AAEO,SAAS,WAAW,aAAkC;AAC3D,SAAO,UAAU,WAAW;AAC9B;;;ACZO,IAAM,kBAAN,MAAqD;AAAA,EAC1D,MAAM,QAAQ,QAAgB,KAAa,UAAuB,CAAC,GAAsB;AACvF,WAAO,MAAM,KAAK,EAAE,GAAG,SAAS,OAAO,CAAC;AAAA,EAC1C;AACF;;;ACHO,IAAM,uBAAN,MAA4D;AAAA,EACzD,QAAsB;AAAA,EAE9B,MAAoB;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,OAAoB;AACtB,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,QAAc;AACZ,SAAK,QAAQ;AAAA,EACf;AACF;;;ACZA,IAAM,oBAAoB;AAQnB,IAAM,sBAAN,MAAyD;AAAA,EAC9D,YACmB,OACA,cACA,WACjB;AAHiB;AACA;AACA;AAAA,EAChB;AAAA,EAHgB;AAAA,EACA;AAAA,EACA;AAAA,EAGnB,MAAM,QAAQ,QAAgB,KAAa,SAA0C;AAEnF,QAAI,kBAAkB,KAAK,GAAG,GAAG;AAC/B,aAAO,KAAK,MAAM,QAAQ,QAAQ,KAAK,OAAO;AAAA,IAChD;AAGA,UAAM,eAAe,KAAK,aAAa,IAAI;AAC3C,QAAI,cAAc,UAAU,GAAG;AAC7B,YAAM,KAAK,UAAU;AAAA,IACvB;AAGA,UAAM,iBAAiB,KAAK,iBAAiB,OAAO;AACpD,UAAM,WAAW,MAAM,KAAK,MAAM,QAAQ,QAAQ,KAAK,cAAc;AAGrE,QAAI,SAAS,WAAW,KAAK;AAC3B,YAAM,KAAK,UAAU;AACrB,YAAM,eAAe,KAAK,iBAAiB,OAAO;AAClD,YAAM,gBAAgB,MAAM,KAAK,MAAM,QAAQ,QAAQ,KAAK,YAAY;AAExE,UAAI,cAAc,WAAW,KAAK;AAChC,cAAM,OAAO,MAAM,cAAc,KAAK;AACtC,cAAM,IAAI,wBAAwB,6CAA6C,EAAE,QAAQ,KAAK,KAAK,CAAC;AAAA,MACtG;AAEA,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,iBAAiB,SAAoC;AAC3D,UAAM,QAAQ,KAAK,aAAa,IAAI;AACpC,QAAI,CAAC,MAAO,QAAO,WAAW,CAAC;AAE/B,UAAM,WAAW,SAAS,WAAW,CAAC;AACtC,UAAM,UAAU,EAAE,GAAI,UAAqC,eAAe,UAAU,MAAM,WAAW,GAAG;AACxG,WAAO,EAAE,GAAI,WAAW,CAAC,GAAI,QAAQ;AAAA,EACvC;AACF;;;AC5CO,IAAM,eAAN,MAAmB;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEhB,YAAY,SAA8B;AACxC,UAAM,cAAc,QAAQ,eAAe,YAAY;AACvD,UAAM,eAAe,QAAQ,gBAAgB,IAAI,qBAAqB;AACtE,UAAM,aAAa,QAAQ,cAAc,IAAI,gBAAgB;AAE7D,SAAK,UAAU,WAAW,WAAW;AAGrC,SAAK,OAAO,IAAI,aAAa,KAAK,SAAS,QAAQ,QAAQ,cAAc,UAAU;AAGnF,UAAM,cAAc,IAAI,oBAAoB,YAAY,cAAc,MAAM,KAAK,KAAK,QAAQ,CAAC;AAE/F,SAAK,MAAM,IAAI,YAAY,KAAK,SAAS,QAAQ,QAAQ,cAAc,WAAW;AAClF,SAAK,UAAU,IAAI,gBAAgB,KAAK,SAAS,QAAQ,QAAQ,cAAc,WAAW;AAAA,EAC5F;AACF;;;ACrCO,IAAM,sBAAN,MAA0B;AAAA,EAC/B,OAAO,OAAO,SAA4C;AACxD,WAAO,IAAI,aAAa,OAAO;AAAA,EACjC;AACF;;;ACNO,IAAM,aAAa;AAAA,EACxB,IAAI;AACN;;;ACFO,IAAM,WAAW;AAAA,EACtB,SAAS;AAAA,EACT,QAAQ;AACV;","names":["parsed"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/endpoints/AuthEndpoint.ts","../src/dto/Token.ts","../src/enums/LoginIdentifier.ts","../src/exceptions/TaxoraException.ts","../src/exceptions/AuthenticationException.ts","../src/exceptions/HttpException.ts","../src/dto/CompanyResource.ts","../src/endpoints/CompanyEndpoint.ts","../src/enums/VatState.ts","../src/dto/CompanyAddress.ts","../src/dto/ScoreBreakdown.ts","../src/dto/ProviderDocumentLine.ts","../src/dto/ProviderDocument.ts","../src/dto/VatResource.ts","../src/dto/VatCollection.ts","../src/dto/VatCertificateExport.ts","../src/dto/VatValidationAddressInput.ts","../src/exceptions/ValidationException.ts","../src/endpoints/VatEndpoint.ts","../src/enums/Environment.ts","../src/http/FetchHttpClient.ts","../src/http/InMemoryTokenStorage.ts","../src/http/AuthRetryHttpClient.ts","../src/client/TaxoraClient.ts","../src/client/TaxoraClientFactory.ts","../src/enums/ApiVersion.ts","../src/enums/Language.ts"],"sourcesContent":["// Client\nexport { TaxoraClient } from './client/TaxoraClient.js';\nexport { TaxoraClientFactory } from './client/TaxoraClientFactory.js';\nexport type { TaxoraClientOptions } from './client/TaxoraClient.js';\n\n// Endpoints\nexport { AuthEndpoint } from './endpoints/AuthEndpoint.js';\nexport { CompanyEndpoint } from './endpoints/CompanyEndpoint.js';\nexport { VatEndpoint } from './endpoints/VatEndpoint.js';\n\n// DTOs\nexport { Token } from './dto/Token.js';\nexport { ScoreBreakdown } from './dto/ScoreBreakdown.js';\nexport { CompanyAddress } from './dto/CompanyAddress.js';\nexport type { CompanyResource } from './dto/CompanyResource.js';\nexport { VatValidationAddressInput } from './dto/VatValidationAddressInput.js';\nexport { ProviderDocumentLine } from './dto/ProviderDocumentLine.js';\nexport { ProviderDocument } from './dto/ProviderDocument.js';\nexport { VatResource } from './dto/VatResource.js';\nexport { VatCollection } from './dto/VatCollection.js';\nexport { VatCertificateExport } from './dto/VatCertificateExport.js';\n\n// Enums\nexport { Environment, getBaseUrl } from './enums/Environment.js';\nexport type { Environment as EnvironmentType } from './enums/Environment.js';\nexport { ApiVersion } from './enums/ApiVersion.js';\nexport { Language } from './enums/Language.js';\nexport { LoginIdentifier } from './enums/LoginIdentifier.js';\nexport { VatState, getFailedVatStates, describeVatState } from './enums/VatState.js';\n\n// Exceptions\nexport { TaxoraException } from './exceptions/TaxoraException.js';\nexport { AuthenticationException } from './exceptions/AuthenticationException.js';\nexport { HttpException } from './exceptions/HttpException.js';\nexport { ValidationException } from './exceptions/ValidationException.js';\n\n// HTTP\nexport type { TokenStorageInterface } from './http/TokenStorageInterface.js';\nexport { InMemoryTokenStorage } from './http/InMemoryTokenStorage.js';\nexport type { HttpClientInterface } from './http/HttpClientInterface.js';\nexport { FetchHttpClient } from './http/FetchHttpClient.js';\nexport { AuthRetryHttpClient } from './http/AuthRetryHttpClient.js';\n","import { hostname } from 'os';\nimport { Token } from '../dto/Token.js';\nimport { LoginIdentifier } from '../enums/LoginIdentifier.js';\nimport { AuthenticationException } from '../exceptions/AuthenticationException.js';\nimport { HttpException } from '../exceptions/HttpException.js';\nimport { type HttpClientInterface } from '../http/HttpClientInterface.js';\nimport { type TokenStorageInterface } from '../http/TokenStorageInterface.js';\n\nexport class AuthEndpoint {\n constructor(\n private readonly baseUrl: string,\n private readonly apiKey: string,\n private readonly tokenStorage: TokenStorageInterface,\n private readonly httpClient: HttpClientInterface,\n ) {}\n\n async login(\n identifier: string,\n password: string,\n device?: string,\n loginIdentifier: LoginIdentifier = LoginIdentifier.EMAIL,\n ): Promise<Token> {\n const deviceName = device ?? hostname();\n\n const body: Record<string, string> = {\n identifier: loginIdentifier,\n password,\n device_name: deviceName,\n };\n\n if (loginIdentifier === LoginIdentifier.CLIENT_ID) {\n body['client_id'] = identifier;\n } else {\n body['email'] = identifier;\n }\n\n const response = await this.httpClient.request('POST', `${this.baseUrl}/auth/login`, {\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n },\n body: JSON.stringify(body),\n });\n\n const responseText = await response.text();\n\n if (response.status === 401) {\n throw new AuthenticationException('Authentication failed: invalid credentials', {\n status: 401,\n body: responseText,\n });\n }\n\n if (!response.ok) {\n throw new HttpException(`HTTP error ${response.status}`, response.status, responseText);\n }\n\n const data = this.parseResponse(responseText);\n const token = Token.fromArray(data);\n this.tokenStorage.set(token);\n return token;\n }\n\n async loginWithClientId(clientId: string, password: string, device?: string): Promise<Token> {\n return this.login(clientId, password, device, LoginIdentifier.CLIENT_ID);\n }\n\n async refresh(): Promise<Token> {\n const storedToken = this.tokenStorage.get();\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n };\n\n if (storedToken) {\n headers['Authorization'] = `Bearer ${storedToken.accessToken}`;\n }\n\n const response = await this.httpClient.request('POST', `${this.baseUrl}/auth/refresh`, { headers });\n const responseText = await response.text();\n\n if (response.status === 401) {\n throw new AuthenticationException('Token refresh failed: unauthorized', { status: 401, body: responseText });\n }\n\n if (!response.ok) {\n throw new HttpException(`HTTP error ${response.status}`, response.status, responseText);\n }\n\n const data = this.parseResponse(responseText);\n const token = Token.fromArray(data);\n this.tokenStorage.set(token);\n return token;\n }\n\n private parseResponse(responseText: string): Record<string, unknown> {\n let parsed: unknown;\n try {\n parsed = JSON.parse(responseText);\n } catch {\n throw new HttpException('Invalid JSON response', 0, responseText);\n }\n\n if (typeof parsed !== 'object' || parsed === null) {\n throw new HttpException('Unexpected response format', 0, responseText);\n }\n\n const obj = parsed as Record<string, unknown>;\n if (obj['data'] !== undefined && typeof obj['data'] === 'object' && obj['data'] !== null) {\n return obj['data'] as Record<string, unknown>;\n }\n\n return obj;\n }\n}\n","export class Token {\n constructor(\n public readonly accessToken: string,\n public readonly tokenType: string,\n public readonly expiresAt: Date,\n ) {}\n\n isExpired(bufferSeconds = 15): boolean {\n return new Date(Date.now() + bufferSeconds * 1000) >= this.expiresAt;\n }\n\n static fromArray(data: Record<string, unknown>): Token {\n let accessToken = String(data['access_token'] ?? '');\n if (accessToken.startsWith('Bearer ')) {\n accessToken = accessToken.slice(7);\n }\n\n const tokenType = String(data['token_type'] ?? 'Bearer');\n const expiresIn = typeof data['expires_in'] === 'number' ? data['expires_in'] : 3600;\n const expiresAt = new Date(Date.now() + expiresIn * 1000);\n\n return new Token(accessToken, tokenType, expiresAt);\n }\n\n toArray(): { access_token: string; token_type: string; expires_at: string } {\n return {\n access_token: this.accessToken,\n token_type: this.tokenType,\n expires_at: this.expiresAt.toISOString(),\n };\n }\n}\n","export const LoginIdentifier = {\n EMAIL: 'email',\n CLIENT_ID: 'client_id',\n} as const;\n\nexport type LoginIdentifier = (typeof LoginIdentifier)[keyof typeof LoginIdentifier];\n","export class TaxoraException extends Error {\n public readonly context: Record<string, unknown>;\n\n constructor(message: string, context: Record<string, unknown> = {}) {\n super(message);\n this.name = 'TaxoraException';\n this.context = context;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import { TaxoraException } from './TaxoraException.js';\n\nexport class AuthenticationException extends TaxoraException {\n public readonly statusCode = 401;\n\n constructor(message: string, context: Record<string, unknown> = {}) {\n super(message, context);\n this.name = 'AuthenticationException';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import { TaxoraException } from './TaxoraException.js';\n\nexport class HttpException extends TaxoraException {\n public readonly statusCode: number;\n public readonly responseBody: string;\n\n constructor(message: string, statusCode: number, responseBody: string, context: Record<string, unknown> = {}) {\n super(message, context);\n this.name = 'HttpException';\n this.statusCode = statusCode;\n this.responseBody = responseBody;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n getStatusCode(): number {\n return this.statusCode;\n }\n\n getResponseBody(): string {\n return this.responseBody;\n }\n}\n","export interface CompanyResource {\n id?: number;\n uuid?: string;\n name?: string;\n vat_uid?: string;\n address_line_1?: string | null;\n address_line_2?: string | null;\n street?: string | null;\n zip_code?: string | null;\n city?: string | null;\n country_code?: string | null;\n email?: string;\n phone_number?: string | null;\n api_rate_limit: number;\n vat_rate_limit: number;\n /**\n * @deprecated Use api_rate_limit and vat_rate_limit instead.\n */\n rate_limit?: number;\n state?: string;\n source?: string;\n [key: string]: unknown;\n}\n\nexport function normalizeCompanyResource(data: Record<string, unknown>): CompanyResource {\n const apiRateLimit = typeof data['api_rate_limit'] === 'number' ? data['api_rate_limit'] : undefined;\n const vatRateLimit = typeof data['vat_rate_limit'] === 'number' ? data['vat_rate_limit'] : undefined;\n const legacyRateLimit = typeof data['rate_limit'] === 'number' ? data['rate_limit'] : undefined;\n\n return {\n ...data,\n api_rate_limit: apiRateLimit ?? legacyRateLimit ?? 0,\n vat_rate_limit: vatRateLimit ?? legacyRateLimit ?? 0,\n };\n}\n","import { HttpException } from '../exceptions/HttpException.js';\nimport { normalizeCompanyResource, type CompanyResource } from '../dto/CompanyResource.js';\nimport { type HttpClientInterface } from '../http/HttpClientInterface.js';\nimport { type TokenStorageInterface } from '../http/TokenStorageInterface.js';\n\nexport class CompanyEndpoint {\n constructor(\n private readonly baseUrl: string,\n private readonly apiKey: string,\n private readonly tokenStorage: TokenStorageInterface,\n private readonly httpClient: HttpClientInterface,\n ) {}\n\n async get(): Promise<CompanyResource> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n };\n\n const token = this.tokenStorage.get();\n if (token) {\n headers['Authorization'] = `Bearer ${token.accessToken}`;\n }\n\n const response = await this.httpClient.request('GET', `${this.baseUrl}/company`, { headers });\n const responseText = await response.text();\n\n if (!response.ok) {\n throw new HttpException(`HTTP error ${response.status}`, response.status, responseText);\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(responseText);\n } catch {\n throw new HttpException('Invalid JSON response', 0, responseText);\n }\n\n if (typeof parsed !== 'object' || parsed === null) {\n throw new HttpException('Unexpected response format', 0, responseText);\n }\n\n const obj = parsed as Record<string, unknown>;\n if (obj['data'] !== undefined && typeof obj['data'] === 'object' && obj['data'] !== null) {\n return normalizeCompanyResource(obj['data'] as Record<string, unknown>);\n }\n\n return normalizeCompanyResource(obj);\n }\n}\n","export const VatState = {\n VALID: 'valid',\n INVALID: 'invalid',\n FRAUD: 'fraud',\n UNKNOWN: 'unknown',\n} as const;\n\nexport type VatState = (typeof VatState)[keyof typeof VatState];\n\nexport function getFailedVatStates(): VatState[] {\n return [VatState.INVALID, VatState.FRAUD];\n}\n\nconst DESCRIPTIONS: Record<VatState, string> = {\n [VatState.VALID]: 'The VAT number is valid and active.',\n [VatState.INVALID]: 'The VAT number is invalid or not registered.',\n [VatState.FRAUD]: 'The VAT number has been flagged as potentially fraudulent.',\n [VatState.UNKNOWN]: 'The VAT number state could not be determined.',\n};\n\nexport function describeVatState(state: VatState): string {\n return DESCRIPTIONS[state];\n}\n","interface CompanyAddressProps {\n fullAddress?: string | null;\n name?: string | null;\n street?: string | null;\n postalCode?: string | null;\n city?: string | null;\n state?: string | null;\n country?: string | null;\n raw?: string | null;\n}\n\nexport class CompanyAddress {\n public readonly fullAddress: string | null;\n public readonly name: string | null;\n public readonly street: string | null;\n public readonly postalCode: string | null;\n public readonly city: string | null;\n public readonly state: string | null;\n public readonly country: string | null;\n public readonly raw: string | null;\n\n constructor(props: CompanyAddressProps) {\n this.name = props.name ?? null;\n this.street = props.street ?? null;\n this.postalCode = props.postalCode ?? null;\n this.city = props.city ?? null;\n this.state = props.state ?? null;\n this.country = props.country ?? null;\n this.raw = props.raw ?? null;\n this.fullAddress = props.fullAddress ?? this.assembleFullAddress();\n }\n\n private assembleFullAddress(): string | null {\n const parts = [this.street, this.postalCode, this.city, this.country].filter(Boolean);\n return parts.length > 0 ? parts.join(', ') : null;\n }\n\n static from(value: unknown): CompanyAddress | null {\n if (value === null || value === undefined) return null;\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) return null;\n\n try {\n const parsed: unknown = JSON.parse(trimmed);\n if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {\n return CompanyAddress.fromArray(parsed as Record<string, unknown>, trimmed);\n }\n } catch {\n // Not valid JSON — treat as plain string\n }\n return new CompanyAddress({ raw: trimmed });\n }\n\n if (typeof value === 'object' && !Array.isArray(value)) {\n return CompanyAddress.fromArray(value as Record<string, unknown>, null);\n }\n\n return null;\n }\n\n static fromArray(data: Record<string, unknown>, raw: string | null): CompanyAddress {\n const get = (key: string): string | null => {\n const val = data[key] ?? data[key.replace(/_/g, '-')];\n return typeof val === 'string' && val.trim() ? val.trim() : null;\n };\n\n return new CompanyAddress({\n fullAddress: get('full_address'),\n name: get('name'),\n street: get('street'),\n postalCode: get('postal_code') ?? get('postalCode'),\n city: get('city'),\n state: get('state'),\n country: get('country'),\n raw,\n });\n }\n\n toArray(): Record<string, string | null> {\n return {\n full_address: this.fullAddress,\n name: this.name,\n street: this.street,\n postal_code: this.postalCode,\n city: this.city,\n state: this.state,\n country: this.country,\n };\n }\n\n toString(): string {\n return this.fullAddress ?? this.raw ?? '';\n }\n}\n","export class ScoreBreakdown {\n constructor(\n public readonly stepName: string,\n public readonly scoreContribution: number,\n public readonly metadata: Record<string, unknown>,\n ) {}\n\n static fromArray(data: Record<string, unknown>): ScoreBreakdown {\n return new ScoreBreakdown(\n typeof data['step_name'] === 'string' ? data['step_name'] : '',\n typeof data['score_contribution'] === 'number' ? data['score_contribution'] : 0,\n data['metadata'] !== null && typeof data['metadata'] === 'object' && !Array.isArray(data['metadata'])\n ? (data['metadata'] as Record<string, unknown>)\n : {},\n );\n }\n\n toArray(): { step_name: string; score_contribution: number; metadata: Record<string, unknown> } {\n return {\n step_name: this.stepName,\n score_contribution: this.scoreContribution,\n metadata: this.metadata,\n };\n }\n}\n","export class ProviderDocumentLine {\n constructor(\n public readonly id: number | null,\n public readonly vatUid: string | null,\n public readonly rowNumber: number | null,\n public readonly entryIdentifier: string | null,\n public readonly reference: string | null,\n public readonly meta: Record<string, unknown>,\n ) {}\n\n static fromArray(data: unknown): ProviderDocumentLine | null {\n if (data === null || data === undefined || typeof data !== 'object' || Array.isArray(data)) {\n return null;\n }\n const d = data as Record<string, unknown>;\n\n return new ProviderDocumentLine(\n typeof d['id'] === 'number' ? d['id'] : null,\n typeof d['vat_uid'] === 'string' ? d['vat_uid'] : null,\n typeof d['row_number'] === 'number' ? d['row_number'] : null,\n typeof d['entry_identifier'] === 'string' ? d['entry_identifier'] : null,\n typeof d['reference'] === 'string' ? d['reference'] : null,\n d['meta'] !== null && typeof d['meta'] === 'object' && !Array.isArray(d['meta'])\n ? (d['meta'] as Record<string, unknown>)\n : {},\n );\n }\n\n toArray(): Record<string, unknown> {\n return {\n id: this.id,\n vat_uid: this.vatUid,\n row_number: this.rowNumber,\n entry_identifier: this.entryIdentifier,\n reference: this.reference,\n meta: this.meta,\n };\n }\n}\n","import { ProviderDocumentLine } from './ProviderDocumentLine.js';\n\nexport class ProviderDocument {\n constructor(\n public readonly id: number | null,\n public readonly provider: string | null,\n public readonly documentType: string | null,\n public readonly state: string | null,\n public readonly documentDate: Date | null,\n public readonly mime: string | null,\n public readonly size: number | null,\n public readonly hash: string | null,\n public readonly meta: Record<string, unknown>,\n public readonly line: ProviderDocumentLine | null,\n ) {}\n\n static fromArray(data: unknown): ProviderDocument | null {\n if (data === null || data === undefined || typeof data !== 'object' || Array.isArray(data)) {\n return null;\n }\n const d = data as Record<string, unknown>;\n\n const documentDate =\n typeof d['document_date'] === 'string' && d['document_date'] ? new Date(d['document_date']) : null;\n\n return new ProviderDocument(\n typeof d['id'] === 'number' ? d['id'] : null,\n typeof d['provider'] === 'string' ? d['provider'] : null,\n typeof d['document_type'] === 'string' ? d['document_type'] : null,\n typeof d['state'] === 'string' ? d['state'] : null,\n documentDate,\n typeof d['mime'] === 'string' ? d['mime'] : null,\n typeof d['size'] === 'number' ? d['size'] : null,\n typeof d['hash'] === 'string' ? d['hash'] : null,\n d['meta'] !== null && typeof d['meta'] === 'object' && !Array.isArray(d['meta'])\n ? (d['meta'] as Record<string, unknown>)\n : {},\n ProviderDocumentLine.fromArray(d['line']),\n );\n }\n\n toArray(): Record<string, unknown> {\n return {\n id: this.id,\n provider: this.provider,\n document_type: this.documentType,\n state: this.state,\n document_date: this.documentDate?.toISOString() ?? null,\n mime: this.mime,\n size: this.size,\n hash: this.hash,\n meta: this.meta,\n line: this.line?.toArray() ?? null,\n };\n }\n}\n","import { VatState } from '../enums/VatState.js';\nimport { CompanyAddress } from './CompanyAddress.js';\nimport { ScoreBreakdown } from './ScoreBreakdown.js';\nimport { ProviderDocument } from './ProviderDocument.js';\n\nexport class VatResource {\n constructor(\n public readonly uuid: string | undefined,\n public readonly vatUid: string | undefined,\n public readonly state: VatState | undefined,\n public readonly countryCode: string | undefined,\n public readonly companyName: string | undefined,\n public readonly companyAddress: CompanyAddress | undefined,\n public readonly requestedCompanyName: string | undefined,\n public readonly requestedCompanyNameOriginal: string | undefined,\n public readonly requestedInputAddress: Record<string, string | null> | undefined,\n public readonly checkedAt: Date | undefined,\n public readonly score: number | undefined,\n public readonly scoreSource: string | undefined,\n public readonly scoreAttempts: Array<{ source?: string; score?: number }> | undefined,\n public readonly breakdown: ScoreBreakdown[] | undefined,\n public readonly environment: string | undefined,\n public readonly provider: string | undefined,\n public readonly usedProviders: string[] | undefined,\n public readonly providerValid: boolean | null | undefined,\n public readonly providerVatState: string | undefined,\n public readonly providerNote: string | undefined,\n public readonly providerLastCheckedAt: Date | undefined,\n public readonly hasApiError: boolean | null | undefined,\n public readonly errorMessage: string | null | undefined,\n public readonly nextApiRecheckAt: string | null | undefined,\n public readonly providerDocument: ProviderDocument | undefined,\n ) {}\n\n static fromArray(data: Record<string, unknown>): VatResource {\n const str = (key: string): string | undefined => {\n const v = data[key];\n return typeof v === 'string' ? v : undefined;\n };\n\n const stateRaw = str('state');\n const state =\n stateRaw !== undefined && Object.values(VatState).includes(stateRaw as VatState)\n ? (stateRaw as VatState)\n : undefined;\n\n const checkedAt = str('checked_at') ? new Date(data['checked_at'] as string) : undefined;\n const providerLastCheckedAt = str('provider_last_checked_at')\n ? new Date(data['provider_last_checked_at'] as string)\n : undefined;\n const hasApiError =\n data['has_api_error'] === null\n ? null\n : typeof data['has_api_error'] === 'boolean'\n ? data['has_api_error']\n : undefined;\n const errorMessage =\n data['error_message'] === null\n ? null\n : typeof data['error_message'] === 'string'\n ? data['error_message']\n : undefined;\n const nextApiRecheckAt =\n data['next_api_recheck_at'] === null\n ? null\n : typeof data['next_api_recheck_at'] === 'string'\n ? data['next_api_recheck_at']\n : undefined;\n const providerValid =\n data['provider_valid'] === null\n ? null\n : typeof data['provider_valid'] === 'boolean'\n ? data['provider_valid']\n : undefined;\n\n const breakdown = Array.isArray(data['breakdown'])\n ? (data['breakdown'] as Record<string, unknown>[]).map(ScoreBreakdown.fromArray)\n : undefined;\n\n const usedProviders = Array.isArray(data['used_providers'])\n ? (data['used_providers'] as unknown[]).filter((v): v is string => typeof v === 'string')\n : undefined;\n\n const scoreAttempts = Array.isArray(data['score_attempts'])\n ? (data['score_attempts'] as Record<string, unknown>[])\n : undefined;\n\n const requestedInputAddress =\n data['requested_input_address'] !== null &&\n typeof data['requested_input_address'] === 'object' &&\n !Array.isArray(data['requested_input_address'])\n ? (data['requested_input_address'] as Record<string, string | null>)\n : undefined;\n\n return new VatResource(\n str('uuid'),\n str('vat_uid'),\n state,\n str('country_code'),\n str('company_name'),\n CompanyAddress.from(data['company_address']) ?? undefined,\n str('requested_company_name'),\n str('requested_company_name_original'),\n requestedInputAddress,\n checkedAt,\n typeof data['score'] === 'number' ? data['score'] : undefined,\n str('score_source'),\n scoreAttempts,\n breakdown,\n str('environment'),\n str('provider'),\n usedProviders,\n providerValid,\n str('provider_vat_state'),\n str('provider_note'),\n providerLastCheckedAt,\n hasApiError,\n errorMessage,\n nextApiRecheckAt,\n ProviderDocument.fromArray(data['provider_document']) ?? undefined,\n );\n }\n\n getBackendLink(): string | null {\n if (!this.uuid) return null;\n if (this.environment === 'LIVE') {\n return `https://app.taxora.io/vat/history/${this.uuid}`;\n }\n return `https://app.sandbox.taxora.io/vat/history/${this.uuid}`;\n }\n\n isValid(useProviderState = false): boolean {\n if (useProviderState) {\n return this.isProviderValid();\n }\n\n return this.state === VatState.VALID;\n }\n\n isProviderValid(): boolean {\n if (this.providerValid !== undefined && this.providerValid !== null) {\n return this.providerValid;\n }\n\n return this.providerVatState === VatState.VALID;\n }\n\n toArray(): Record<string, unknown> {\n return {\n uuid: this.uuid,\n vat_uid: this.vatUid,\n state: this.state,\n country_code: this.countryCode,\n company_name: this.companyName,\n company_address: this.companyAddress?.toArray() ?? null,\n requested_company_name: this.requestedCompanyName,\n requested_company_name_original: this.requestedCompanyNameOriginal,\n requested_input_address: this.requestedInputAddress ?? null,\n checked_at: this.checkedAt?.toISOString() ?? null,\n score: this.score ?? null,\n score_source: this.scoreSource ?? null,\n score_attempts: this.scoreAttempts ?? null,\n breakdown: this.breakdown?.map((b) => b.toArray()) ?? null,\n environment: this.environment ?? null,\n provider: this.provider ?? null,\n used_providers: this.usedProviders ?? null,\n provider_valid: this.providerValid ?? null,\n provider_vat_state: this.providerVatState ?? null,\n provider_note: this.providerNote ?? null,\n provider_last_checked_at: this.providerLastCheckedAt?.toISOString() ?? null,\n has_api_error: this.hasApiError ?? null,\n error_message: this.errorMessage ?? null,\n next_api_recheck_at: this.nextApiRecheckAt ?? null,\n provider_document: this.providerDocument?.toArray() ?? null,\n };\n }\n}\n","import { VatResource } from './VatResource.js';\n\nexport class VatCollection implements Iterable<VatResource> {\n private readonly items: VatResource[];\n public readonly self: string | undefined;\n\n constructor(items: VatResource[], self?: string) {\n this.items = items;\n this.self = self;\n }\n\n static fromResponse(data: unknown): VatCollection {\n if (Array.isArray(data)) {\n return new VatCollection((data as Record<string, unknown>[]).map(VatResource.fromArray));\n }\n\n if (typeof data === 'object' && data !== null) {\n const obj = data as Record<string, unknown>;\n const items = Array.isArray(obj['data'])\n ? (obj['data'] as Record<string, unknown>[]).map(VatResource.fromArray)\n : [];\n const self = typeof obj['self'] === 'string' ? obj['self'] : undefined;\n return new VatCollection(items, self);\n }\n\n return new VatCollection([]);\n }\n\n [Symbol.iterator](): Iterator<VatResource> {\n return this.items[Symbol.iterator]();\n }\n\n get length(): number {\n return this.items.length;\n }\n\n all(): VatResource[] {\n return [...this.items];\n }\n}\n","export class VatCertificateExport {\n constructor(\n public readonly exportId: string,\n public readonly message?: string,\n ) {}\n\n static fromArray(data: Record<string, unknown>): VatCertificateExport {\n return new VatCertificateExport(\n typeof data['export_id'] === 'string' ? data['export_id'] : '',\n typeof data['message'] === 'string' ? data['message'] : undefined,\n );\n }\n\n toArray(): { export_id: string; message?: string } {\n const result: { export_id: string; message?: string } = { export_id: this.exportId };\n if (this.message !== undefined) result.message = this.message;\n return result;\n }\n}\n","import { TaxoraException } from '../exceptions/TaxoraException.js';\n\ninterface VatValidationAddressInputProps {\n addressLine1?: string;\n addressLine2?: string;\n postalCode?: string;\n city?: string;\n countryCode?: string;\n}\n\nconst ALLOWED_KEYS = new Set(['address_line_1', 'address_line_2', 'postal_code', 'city', 'country_code']);\n\nexport class VatValidationAddressInput {\n public readonly addressLine1?: string;\n public readonly addressLine2?: string;\n public readonly postalCode?: string;\n public readonly city?: string;\n public readonly countryCode?: string;\n\n constructor(props: VatValidationAddressInputProps) {\n if (props.addressLine1 !== undefined && props.addressLine1.length > 255) {\n throw new TaxoraException('addressLine1 must not exceed 255 characters');\n }\n if (props.addressLine2 !== undefined && props.addressLine2.length > 255) {\n throw new TaxoraException('addressLine2 must not exceed 255 characters');\n }\n if (props.countryCode !== undefined && props.countryCode.length !== 2) {\n throw new TaxoraException('countryCode must be exactly 2 characters (ISO 3166-1 alpha-2)');\n }\n\n this.addressLine1 = props.addressLine1;\n this.addressLine2 = props.addressLine2;\n this.postalCode = props.postalCode;\n this.city = props.city;\n this.countryCode = props.countryCode;\n }\n\n static fromArray(data: Record<string, unknown>): VatValidationAddressInput {\n for (const key of Object.keys(data)) {\n if (!ALLOWED_KEYS.has(key)) {\n throw new TaxoraException(`Unsupported field: \"${key}\". Allowed fields: ${[...ALLOWED_KEYS].join(', ')}`);\n }\n }\n\n const getString = (key: string): string | undefined => {\n const val = data[key];\n if (typeof val !== 'string') return undefined;\n const trimmed = val.trim();\n return trimmed || undefined;\n };\n\n const countryCode = getString('country_code');\n\n return new VatValidationAddressInput({\n addressLine1: getString('address_line_1'),\n addressLine2: getString('address_line_2'),\n postalCode: getString('postal_code'),\n city: getString('city'),\n countryCode: countryCode ? countryCode.toUpperCase() : undefined,\n });\n }\n\n toArray(): Record<string, string> {\n const result: Record<string, string> = {};\n if (this.addressLine1 !== undefined) result['address_line_1'] = this.addressLine1;\n if (this.addressLine2 !== undefined) result['address_line_2'] = this.addressLine2;\n if (this.postalCode !== undefined) result['postal_code'] = this.postalCode;\n if (this.city !== undefined) result['city'] = this.city;\n if (this.countryCode !== undefined) result['country_code'] = this.countryCode;\n return result;\n }\n}\n","import { TaxoraException } from './TaxoraException.js';\n\nexport class ValidationException extends TaxoraException {\n public readonly statusCode = 422;\n private readonly errors: Record<string, string[]>;\n\n constructor(message: string, errors: Record<string, string[]>, context: Record<string, unknown> = {}) {\n super(message, context);\n this.name = 'ValidationException';\n this.errors = errors;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n getErrors(): Record<string, string[]> {\n return this.errors;\n }\n}\n","import { VatResource } from '../dto/VatResource.js';\nimport { VatCollection } from '../dto/VatCollection.js';\nimport { VatCertificateExport } from '../dto/VatCertificateExport.js';\nimport { VatValidationAddressInput } from '../dto/VatValidationAddressInput.js';\nimport { type Language } from '../enums/Language.js';\nimport { HttpException } from '../exceptions/HttpException.js';\nimport { ValidationException } from '../exceptions/ValidationException.js';\nimport { TaxoraException } from '../exceptions/TaxoraException.js';\nimport { type HttpClientInterface } from '../http/HttpClientInterface.js';\nimport { type TokenStorageInterface } from '../http/TokenStorageInterface.js';\n\nconst DATE_REGEX = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nexport class VatEndpoint {\n constructor(\n private readonly baseUrl: string,\n private readonly apiKey: string,\n private readonly tokenStorage: TokenStorageInterface,\n private readonly httpClient: HttpClientInterface,\n ) {}\n\n async validate(\n vatUid: string,\n companyName?: string,\n provider?: string,\n addressInput?: VatValidationAddressInput | Record<string, string>,\n ): Promise<VatResource> {\n const body: Record<string, unknown> = { vat_uid: vatUid };\n if (companyName) body['company_name'] = companyName;\n if (provider) body['source'] = provider;\n\n if (addressInput) {\n body['address_input'] = addressInput instanceof VatValidationAddressInput ? addressInput.toArray() : addressInput;\n }\n\n return this.validateWithGatewayRetry(body, 2);\n }\n\n private async validateWithGatewayRetry(body: Record<string, unknown>, attemptsLeft: number): Promise<VatResource> {\n const response = await this.sendRequest('POST', `${this.baseUrl}/vat/validate`, body);\n\n if (response.status === 504) {\n if (attemptsLeft <= 1) {\n const text = await response.text();\n throw new HttpException('VAT validation timed out after multiple attempts', 504, text);\n }\n return this.validateWithGatewayRetry(body, attemptsLeft - 1);\n }\n\n const data = await this.parseJsonResponse(response);\n return VatResource.fromArray(data);\n }\n\n async validateMultiple(vatUids: string[], companyNames?: string[], provider?: string): Promise<VatCollection> {\n const body: Record<string, unknown> = { vat_uids: vatUids };\n if (companyNames) body['company_names'] = companyNames;\n if (provider) body['source'] = provider;\n\n const response = await this.sendRequest('POST', `${this.baseUrl}/vat/validate/multiple`, body);\n const data = await this.parseJsonResponse(response);\n\n return VatCollection.fromResponse(data);\n }\n\n async validateSchema(vatUid: string): Promise<Record<string, unknown>> {\n const body: Record<string, unknown> = { vat_uid: vatUid };\n const response = await this.sendRequest('POST', `${this.baseUrl}/vat/validate/schema`, body);\n return this.parseJsonResponse(response);\n }\n\n async state(vatUid: string): Promise<VatResource> {\n const response = await this.sendRequest('GET', `${this.baseUrl}/vat/state/${encodeURIComponent(vatUid)}`);\n const data = await this.parseJsonResponse(response);\n return VatResource.fromArray(data);\n }\n\n async history(vatUid?: string): Promise<VatCollection> {\n let url = `${this.baseUrl}/vat/history`;\n if (vatUid) url += `?vat_uid=${encodeURIComponent(vatUid)}`;\n\n const response = await this.sendRequest('GET', url);\n const data = await this.parseJsonResponse(response);\n return VatCollection.fromResponse(data);\n }\n\n async search(term?: string, perPage?: number): Promise<VatCollection> {\n const params = new URLSearchParams();\n if (term) params.set('term', term);\n if (perPage !== undefined) params.set('per_page', String(perPage));\n\n const queryString = params.toString();\n const url = `${this.baseUrl}/vat/search${queryString ? `?${queryString}` : ''}`;\n\n const response = await this.sendRequest('GET', url);\n const data = await this.parseJsonResponse(response);\n return VatCollection.fromResponse(data);\n }\n\n async certificate(uuid: string, lang?: Language): Promise<Uint8Array> {\n let url = `${this.baseUrl}/vat/certificate/${encodeURIComponent(uuid)}`;\n if (lang) url += `?lang=${lang}`;\n\n const response = await this.sendBinaryRequest('GET', url);\n const buffer = await response.arrayBuffer();\n return new Uint8Array(buffer);\n }\n\n async certificatesBulkExport(\n fromDate: Date | string,\n toDate: Date | string,\n countries?: string[],\n lang?: Language,\n ): Promise<VatCertificateExport> {\n return this.exportRequest(`${this.baseUrl}/vat/certificates/bulk-export`, fromDate, toDate, countries, lang);\n }\n\n async certificatesListExport(\n fromDate: Date | string,\n toDate: Date | string,\n countries?: string[],\n lang?: Language,\n ): Promise<VatCertificateExport> {\n return this.exportRequest(`${this.baseUrl}/vat/certificates/list-export`, fromDate, toDate, countries, lang);\n }\n\n private async exportRequest(\n url: string,\n fromDate: Date | string,\n toDate: Date | string,\n countries?: string[],\n lang?: Language,\n ): Promise<VatCertificateExport> {\n const from = this.formatDate(fromDate);\n const to = this.formatDate(toDate);\n\n const body: Record<string, unknown> = { from_date: from, to_date: to };\n if (countries && countries.length > 0) body['countries'] = countries;\n if (lang) body['lang'] = lang;\n\n const response = await this.sendRequest('POST', url, body);\n const data = await this.parseJsonResponse(response, [200, 202]);\n\n const exportObj = VatCertificateExport.fromArray(data);\n if (!exportObj.exportId) {\n throw new TaxoraException('Export response is missing export_id');\n }\n\n return exportObj;\n }\n\n async downloadBulkExport(exportId: string): Promise<Uint8Array> {\n const url = `${this.baseUrl}/vat/certificates/bulk-export/${encodeURIComponent(exportId)}/download`;\n const response = await this.sendBinaryRequest('GET', url);\n const buffer = await response.arrayBuffer();\n return new Uint8Array(buffer);\n }\n\n private buildHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n };\n const token = this.tokenStorage.get();\n if (token) {\n headers['Authorization'] = `Bearer ${token.accessToken}`;\n }\n return headers;\n }\n\n private async sendRequest(method: string, url: string, body?: Record<string, unknown>): Promise<Response> {\n const options: RequestInit = { headers: this.buildHeaders() };\n if (body) options.body = JSON.stringify(body);\n\n return this.httpClient.request(method, url, options);\n }\n\n private async sendBinaryRequest(method: string, url: string): Promise<Response> {\n const headers = this.buildHeaders();\n delete headers['Content-Type'];\n\n const response = await this.httpClient.request(method, url, { headers });\n if (!response.ok) {\n const text = await response.text();\n throw new HttpException(`HTTP error ${response.status}`, response.status, text);\n }\n return response;\n }\n\n private async parseJsonResponse(\n response: Response,\n acceptedStatuses: number[] = [200],\n ): Promise<Record<string, unknown>> {\n const responseText = await response.text();\n\n if (response.status === 422) {\n let errors: Record<string, string[]> = {};\n try {\n const parsed = JSON.parse(responseText) as Record<string, unknown>;\n if (parsed['errors'] !== null && typeof parsed['errors'] === 'object' && !Array.isArray(parsed['errors'])) {\n errors = parsed['errors'] as Record<string, string[]>;\n }\n } catch {\n // ignore parse errors\n }\n throw new ValidationException('Validation failed', errors);\n }\n\n if (!response.ok && !acceptedStatuses.includes(response.status)) {\n throw new HttpException(`HTTP error ${response.status}`, response.status, responseText);\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(responseText);\n } catch {\n throw new HttpException('Invalid JSON response', 0, responseText);\n }\n\n if (typeof parsed !== 'object' || parsed === null) {\n throw new HttpException('Unexpected response format', 0, responseText);\n }\n\n const obj = parsed as Record<string, unknown>;\n if (obj['data'] !== undefined && (typeof obj['data'] === 'object' || Array.isArray(obj['data']))) {\n return obj['data'] as Record<string, unknown>;\n }\n\n return obj;\n }\n\n private formatDate(date: Date | string): string {\n if (date instanceof Date) {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n\n if (!DATE_REGEX.test(date)) {\n throw new TaxoraException(`Invalid date format: \"${date}\". Expected YYYY-MM-DD.`);\n }\n\n return date;\n }\n}\n","export const Environment = {\n SANDBOX: 'sandbox',\n PRODUCTION: 'production',\n} as const;\n\nexport type Environment = (typeof Environment)[keyof typeof Environment];\n\nconst BASE_URLS: Record<Environment, string> = {\n [Environment.SANDBOX]: 'https://sandbox.taxora.io/v1',\n [Environment.PRODUCTION]: 'https://api.taxora.io/v1',\n};\n\nexport function getBaseUrl(environment: Environment): string {\n return BASE_URLS[environment];\n}\n","import { type HttpClientInterface } from './HttpClientInterface.js';\n\nexport class FetchHttpClient implements HttpClientInterface {\n async request(method: string, url: string, options: RequestInit = {}): Promise<Response> {\n return fetch(url, { ...options, method });\n }\n}\n","import { type Token } from '../dto/Token.js';\nimport { type TokenStorageInterface } from './TokenStorageInterface.js';\n\nexport class InMemoryTokenStorage implements TokenStorageInterface {\n private token: Token | null = null;\n\n get(): Token | null {\n return this.token;\n }\n\n set(token: Token): void {\n this.token = token;\n }\n\n clear(): void {\n this.token = null;\n }\n}\n","import { type Token } from '../dto/Token.js';\nimport { AuthenticationException } from '../exceptions/AuthenticationException.js';\nimport { type HttpClientInterface } from './HttpClientInterface.js';\nimport { type TokenStorageInterface } from './TokenStorageInterface.js';\n\nconst AUTH_PATH_PATTERN = /\\/auth\\//;\n\n/**\n * HTTP client wrapper that handles:\n * - Preemptive token refresh when the stored token is expired\n * - Automatic retry with a fresh token on 401 responses\n * - Passthrough for /auth/ routes (no interception)\n */\nexport class AuthRetryHttpClient implements HttpClientInterface {\n constructor(\n private readonly inner: HttpClientInterface,\n private readonly tokenStorage: TokenStorageInterface,\n private readonly refreshFn: () => Promise<Token>,\n ) {}\n\n async request(method: string, url: string, options?: RequestInit): Promise<Response> {\n // Auth routes bypass all retry logic\n if (AUTH_PATH_PATTERN.test(url)) {\n return this.inner.request(method, url, options);\n }\n\n // Preemptive refresh if token is expired\n const currentToken = this.tokenStorage.get();\n if (currentToken?.isExpired()) {\n await this.refreshFn();\n }\n\n // Build request with potentially refreshed token\n const updatedOptions = this.injectAuthHeader(options);\n const response = await this.inner.request(method, url, updatedOptions);\n\n // 401: refresh once and retry\n if (response.status === 401) {\n await this.refreshFn();\n const retryOptions = this.injectAuthHeader(options);\n const retryResponse = await this.inner.request(method, url, retryOptions);\n\n if (retryResponse.status === 401) {\n const body = await retryResponse.text();\n throw new AuthenticationException('Authentication failed after token refresh', { status: 401, body });\n }\n\n return retryResponse;\n }\n\n return response;\n }\n\n private injectAuthHeader(options?: RequestInit): RequestInit {\n const token = this.tokenStorage.get();\n if (!token) return options ?? {};\n\n const existing = options?.headers ?? {};\n const headers = { ...(existing as Record<string, string>), Authorization: `Bearer ${token.accessToken}` };\n return { ...(options ?? {}), headers };\n }\n}\n","import { AuthEndpoint } from '../endpoints/AuthEndpoint.js';\nimport { CompanyEndpoint } from '../endpoints/CompanyEndpoint.js';\nimport { VatEndpoint } from '../endpoints/VatEndpoint.js';\nimport { Environment, getBaseUrl } from '../enums/Environment.js';\nimport { type HttpClientInterface } from '../http/HttpClientInterface.js';\nimport { FetchHttpClient } from '../http/FetchHttpClient.js';\nimport { InMemoryTokenStorage } from '../http/InMemoryTokenStorage.js';\nimport { type TokenStorageInterface } from '../http/TokenStorageInterface.js';\nimport { AuthRetryHttpClient } from '../http/AuthRetryHttpClient.js';\n\nexport interface TaxoraClientOptions {\n apiKey: string;\n environment?: Environment;\n tokenStorage?: TokenStorageInterface;\n httpClient?: HttpClientInterface;\n}\n\nexport class TaxoraClient {\n public readonly auth: AuthEndpoint;\n public readonly vat: VatEndpoint;\n public readonly company: CompanyEndpoint;\n public readonly baseUrl: string;\n\n constructor(options: TaxoraClientOptions) {\n const environment = options.environment ?? Environment.SANDBOX;\n const tokenStorage = options.tokenStorage ?? new InMemoryTokenStorage();\n const httpClient = options.httpClient ?? new FetchHttpClient();\n\n this.baseUrl = getBaseUrl(environment);\n\n // Auth endpoint uses the raw HTTP client — no retry interception for auth routes\n this.auth = new AuthEndpoint(this.baseUrl, options.apiKey, tokenStorage, httpClient);\n\n // All other endpoints use the retry-capable client that handles 401 auto-refresh\n const retryClient = new AuthRetryHttpClient(httpClient, tokenStorage, () => this.auth.refresh());\n\n this.vat = new VatEndpoint(this.baseUrl, options.apiKey, tokenStorage, retryClient);\n this.company = new CompanyEndpoint(this.baseUrl, options.apiKey, tokenStorage, retryClient);\n }\n}\n","import { TaxoraClient, type TaxoraClientOptions } from './TaxoraClient.js';\n\nexport class TaxoraClientFactory {\n static create(options: TaxoraClientOptions): TaxoraClient {\n return new TaxoraClient(options);\n }\n}\n","export const ApiVersion = {\n V1: 'v1',\n} as const;\n\nexport type ApiVersion = (typeof ApiVersion)[keyof typeof ApiVersion];\n","export const Language = {\n ENGLISH: 'en',\n GERMAN: 'de',\n} as const;\n\nexport type Language = (typeof Language)[keyof typeof Language];\n"],"mappings":"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","names":["parsed"]}
package/dist/index.d.cts CHANGED
@@ -172,6 +172,7 @@ declare class VatResource {
172
172
  readonly environment: string | undefined;
173
173
  readonly provider: string | undefined;
174
174
  readonly usedProviders: string[] | undefined;
175
+ readonly providerValid: boolean | null | undefined;
175
176
  readonly providerVatState: string | undefined;
176
177
  readonly providerNote: string | undefined;
177
178
  readonly providerLastCheckedAt: Date | undefined;
@@ -182,9 +183,11 @@ declare class VatResource {
182
183
  constructor(uuid: string | undefined, vatUid: string | undefined, state: VatState | undefined, countryCode: string | undefined, companyName: string | undefined, companyAddress: CompanyAddress | undefined, requestedCompanyName: string | undefined, requestedCompanyNameOriginal: string | undefined, requestedInputAddress: Record<string, string | null> | undefined, checkedAt: Date | undefined, score: number | undefined, scoreSource: string | undefined, scoreAttempts: Array<{
183
184
  source?: string;
184
185
  score?: number;
185
- }> | undefined, breakdown: ScoreBreakdown[] | undefined, environment: string | undefined, provider: string | undefined, usedProviders: string[] | undefined, providerVatState: string | undefined, providerNote: string | undefined, providerLastCheckedAt: Date | undefined, hasApiError: boolean | null | undefined, errorMessage: string | null | undefined, nextApiRecheckAt: string | null | undefined, providerDocument: ProviderDocument | undefined);
186
+ }> | undefined, breakdown: ScoreBreakdown[] | undefined, environment: string | undefined, provider: string | undefined, usedProviders: string[] | undefined, providerValid: boolean | null | undefined, providerVatState: string | undefined, providerNote: string | undefined, providerLastCheckedAt: Date | undefined, hasApiError: boolean | null | undefined, errorMessage: string | null | undefined, nextApiRecheckAt: string | null | undefined, providerDocument: ProviderDocument | undefined);
186
187
  static fromArray(data: Record<string, unknown>): VatResource;
187
188
  getBackendLink(): string | null;
189
+ isValid(useProviderState?: boolean): boolean;
190
+ isProviderValid(): boolean;
188
191
  toArray(): Record<string, unknown>;
189
192
  }
190
193
 
package/dist/index.d.ts CHANGED
@@ -172,6 +172,7 @@ declare class VatResource {
172
172
  readonly environment: string | undefined;
173
173
  readonly provider: string | undefined;
174
174
  readonly usedProviders: string[] | undefined;
175
+ readonly providerValid: boolean | null | undefined;
175
176
  readonly providerVatState: string | undefined;
176
177
  readonly providerNote: string | undefined;
177
178
  readonly providerLastCheckedAt: Date | undefined;
@@ -182,9 +183,11 @@ declare class VatResource {
182
183
  constructor(uuid: string | undefined, vatUid: string | undefined, state: VatState | undefined, countryCode: string | undefined, companyName: string | undefined, companyAddress: CompanyAddress | undefined, requestedCompanyName: string | undefined, requestedCompanyNameOriginal: string | undefined, requestedInputAddress: Record<string, string | null> | undefined, checkedAt: Date | undefined, score: number | undefined, scoreSource: string | undefined, scoreAttempts: Array<{
183
184
  source?: string;
184
185
  score?: number;
185
- }> | undefined, breakdown: ScoreBreakdown[] | undefined, environment: string | undefined, provider: string | undefined, usedProviders: string[] | undefined, providerVatState: string | undefined, providerNote: string | undefined, providerLastCheckedAt: Date | undefined, hasApiError: boolean | null | undefined, errorMessage: string | null | undefined, nextApiRecheckAt: string | null | undefined, providerDocument: ProviderDocument | undefined);
186
+ }> | undefined, breakdown: ScoreBreakdown[] | undefined, environment: string | undefined, provider: string | undefined, usedProviders: string[] | undefined, providerValid: boolean | null | undefined, providerVatState: string | undefined, providerNote: string | undefined, providerLastCheckedAt: Date | undefined, hasApiError: boolean | null | undefined, errorMessage: string | null | undefined, nextApiRecheckAt: string | null | undefined, providerDocument: ProviderDocument | undefined);
186
187
  static fromArray(data: Record<string, unknown>): VatResource;
187
188
  getBackendLink(): string | null;
189
+ isValid(useProviderState?: boolean): boolean;
190
+ isProviderValid(): boolean;
188
191
  toArray(): Record<string, unknown>;
189
192
  }
190
193
 
package/dist/index.js CHANGED
@@ -447,7 +447,7 @@ var ProviderDocument = class _ProviderDocument {
447
447
 
448
448
  // src/dto/VatResource.ts
449
449
  var VatResource = class _VatResource {
450
- constructor(uuid, vatUid, state, countryCode, companyName, companyAddress, requestedCompanyName, requestedCompanyNameOriginal, requestedInputAddress, checkedAt, score, scoreSource, scoreAttempts, breakdown, environment, provider, usedProviders, providerVatState, providerNote, providerLastCheckedAt, hasApiError, errorMessage, nextApiRecheckAt, providerDocument) {
450
+ constructor(uuid, vatUid, state, countryCode, companyName, companyAddress, requestedCompanyName, requestedCompanyNameOriginal, requestedInputAddress, checkedAt, score, scoreSource, scoreAttempts, breakdown, environment, provider, usedProviders, providerValid, providerVatState, providerNote, providerLastCheckedAt, hasApiError, errorMessage, nextApiRecheckAt, providerDocument) {
451
451
  this.uuid = uuid;
452
452
  this.vatUid = vatUid;
453
453
  this.state = state;
@@ -465,6 +465,7 @@ var VatResource = class _VatResource {
465
465
  this.environment = environment;
466
466
  this.provider = provider;
467
467
  this.usedProviders = usedProviders;
468
+ this.providerValid = providerValid;
468
469
  this.providerVatState = providerVatState;
469
470
  this.providerNote = providerNote;
470
471
  this.providerLastCheckedAt = providerLastCheckedAt;
@@ -490,6 +491,7 @@ var VatResource = class _VatResource {
490
491
  environment;
491
492
  provider;
492
493
  usedProviders;
494
+ providerValid;
493
495
  providerVatState;
494
496
  providerNote;
495
497
  providerLastCheckedAt;
@@ -509,6 +511,7 @@ var VatResource = class _VatResource {
509
511
  const hasApiError = data["has_api_error"] === null ? null : typeof data["has_api_error"] === "boolean" ? data["has_api_error"] : void 0;
510
512
  const errorMessage = data["error_message"] === null ? null : typeof data["error_message"] === "string" ? data["error_message"] : void 0;
511
513
  const nextApiRecheckAt = data["next_api_recheck_at"] === null ? null : typeof data["next_api_recheck_at"] === "string" ? data["next_api_recheck_at"] : void 0;
514
+ const providerValid = data["provider_valid"] === null ? null : typeof data["provider_valid"] === "boolean" ? data["provider_valid"] : void 0;
512
515
  const breakdown = Array.isArray(data["breakdown"]) ? data["breakdown"].map(ScoreBreakdown.fromArray) : void 0;
513
516
  const usedProviders = Array.isArray(data["used_providers"]) ? data["used_providers"].filter((v) => typeof v === "string") : void 0;
514
517
  const scoreAttempts = Array.isArray(data["score_attempts"]) ? data["score_attempts"] : void 0;
@@ -531,6 +534,7 @@ var VatResource = class _VatResource {
531
534
  str("environment"),
532
535
  str("provider"),
533
536
  usedProviders,
537
+ providerValid,
534
538
  str("provider_vat_state"),
535
539
  str("provider_note"),
536
540
  providerLastCheckedAt,
@@ -547,6 +551,18 @@ var VatResource = class _VatResource {
547
551
  }
548
552
  return `https://app.sandbox.taxora.io/vat/history/${this.uuid}`;
549
553
  }
554
+ isValid(useProviderState = false) {
555
+ if (useProviderState) {
556
+ return this.isProviderValid();
557
+ }
558
+ return this.state === VatState.VALID;
559
+ }
560
+ isProviderValid() {
561
+ if (this.providerValid !== void 0 && this.providerValid !== null) {
562
+ return this.providerValid;
563
+ }
564
+ return this.providerVatState === VatState.VALID;
565
+ }
550
566
  toArray() {
551
567
  return {
552
568
  uuid: this.uuid,
@@ -566,6 +582,7 @@ var VatResource = class _VatResource {
566
582
  environment: this.environment ?? null,
567
583
  provider: this.provider ?? null,
568
584
  used_providers: this.usedProviders ?? null,
585
+ provider_valid: this.providerValid ?? null,
569
586
  provider_vat_state: this.providerVatState ?? null,
570
587
  provider_note: this.providerNote ?? null,
571
588
  provider_last_checked_at: this.providerLastCheckedAt?.toISOString() ?? null,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/endpoints/AuthEndpoint.ts","../src/dto/Token.ts","../src/enums/LoginIdentifier.ts","../src/exceptions/TaxoraException.ts","../src/exceptions/AuthenticationException.ts","../src/exceptions/HttpException.ts","../src/dto/CompanyResource.ts","../src/endpoints/CompanyEndpoint.ts","../src/enums/VatState.ts","../src/dto/CompanyAddress.ts","../src/dto/ScoreBreakdown.ts","../src/dto/ProviderDocumentLine.ts","../src/dto/ProviderDocument.ts","../src/dto/VatResource.ts","../src/dto/VatCollection.ts","../src/dto/VatCertificateExport.ts","../src/dto/VatValidationAddressInput.ts","../src/exceptions/ValidationException.ts","../src/endpoints/VatEndpoint.ts","../src/enums/Environment.ts","../src/http/FetchHttpClient.ts","../src/http/InMemoryTokenStorage.ts","../src/http/AuthRetryHttpClient.ts","../src/client/TaxoraClient.ts","../src/client/TaxoraClientFactory.ts","../src/enums/ApiVersion.ts","../src/enums/Language.ts"],"sourcesContent":["import { hostname } from 'os';\nimport { Token } from '../dto/Token.js';\nimport { LoginIdentifier } from '../enums/LoginIdentifier.js';\nimport { AuthenticationException } from '../exceptions/AuthenticationException.js';\nimport { HttpException } from '../exceptions/HttpException.js';\nimport { type HttpClientInterface } from '../http/HttpClientInterface.js';\nimport { type TokenStorageInterface } from '../http/TokenStorageInterface.js';\n\nexport class AuthEndpoint {\n constructor(\n private readonly baseUrl: string,\n private readonly apiKey: string,\n private readonly tokenStorage: TokenStorageInterface,\n private readonly httpClient: HttpClientInterface,\n ) {}\n\n async login(\n identifier: string,\n password: string,\n device?: string,\n loginIdentifier: LoginIdentifier = LoginIdentifier.EMAIL,\n ): Promise<Token> {\n const deviceName = device ?? hostname();\n\n const body: Record<string, string> = {\n identifier: loginIdentifier,\n password,\n device_name: deviceName,\n };\n\n if (loginIdentifier === LoginIdentifier.CLIENT_ID) {\n body['client_id'] = identifier;\n } else {\n body['email'] = identifier;\n }\n\n const response = await this.httpClient.request('POST', `${this.baseUrl}/auth/login`, {\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n },\n body: JSON.stringify(body),\n });\n\n const responseText = await response.text();\n\n if (response.status === 401) {\n throw new AuthenticationException('Authentication failed: invalid credentials', {\n status: 401,\n body: responseText,\n });\n }\n\n if (!response.ok) {\n throw new HttpException(`HTTP error ${response.status}`, response.status, responseText);\n }\n\n const data = this.parseResponse(responseText);\n const token = Token.fromArray(data);\n this.tokenStorage.set(token);\n return token;\n }\n\n async loginWithClientId(clientId: string, password: string, device?: string): Promise<Token> {\n return this.login(clientId, password, device, LoginIdentifier.CLIENT_ID);\n }\n\n async refresh(): Promise<Token> {\n const storedToken = this.tokenStorage.get();\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n };\n\n if (storedToken) {\n headers['Authorization'] = `Bearer ${storedToken.accessToken}`;\n }\n\n const response = await this.httpClient.request('POST', `${this.baseUrl}/auth/refresh`, { headers });\n const responseText = await response.text();\n\n if (response.status === 401) {\n throw new AuthenticationException('Token refresh failed: unauthorized', { status: 401, body: responseText });\n }\n\n if (!response.ok) {\n throw new HttpException(`HTTP error ${response.status}`, response.status, responseText);\n }\n\n const data = this.parseResponse(responseText);\n const token = Token.fromArray(data);\n this.tokenStorage.set(token);\n return token;\n }\n\n private parseResponse(responseText: string): Record<string, unknown> {\n let parsed: unknown;\n try {\n parsed = JSON.parse(responseText);\n } catch {\n throw new HttpException('Invalid JSON response', 0, responseText);\n }\n\n if (typeof parsed !== 'object' || parsed === null) {\n throw new HttpException('Unexpected response format', 0, responseText);\n }\n\n const obj = parsed as Record<string, unknown>;\n if (obj['data'] !== undefined && typeof obj['data'] === 'object' && obj['data'] !== null) {\n return obj['data'] as Record<string, unknown>;\n }\n\n return obj;\n }\n}\n","export class Token {\n constructor(\n public readonly accessToken: string,\n public readonly tokenType: string,\n public readonly expiresAt: Date,\n ) {}\n\n isExpired(bufferSeconds = 15): boolean {\n return new Date(Date.now() + bufferSeconds * 1000) >= this.expiresAt;\n }\n\n static fromArray(data: Record<string, unknown>): Token {\n let accessToken = String(data['access_token'] ?? '');\n if (accessToken.startsWith('Bearer ')) {\n accessToken = accessToken.slice(7);\n }\n\n const tokenType = String(data['token_type'] ?? 'Bearer');\n const expiresIn = typeof data['expires_in'] === 'number' ? data['expires_in'] : 3600;\n const expiresAt = new Date(Date.now() + expiresIn * 1000);\n\n return new Token(accessToken, tokenType, expiresAt);\n }\n\n toArray(): { access_token: string; token_type: string; expires_at: string } {\n return {\n access_token: this.accessToken,\n token_type: this.tokenType,\n expires_at: this.expiresAt.toISOString(),\n };\n }\n}\n","export const LoginIdentifier = {\n EMAIL: 'email',\n CLIENT_ID: 'client_id',\n} as const;\n\nexport type LoginIdentifier = (typeof LoginIdentifier)[keyof typeof LoginIdentifier];\n","export class TaxoraException extends Error {\n public readonly context: Record<string, unknown>;\n\n constructor(message: string, context: Record<string, unknown> = {}) {\n super(message);\n this.name = 'TaxoraException';\n this.context = context;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import { TaxoraException } from './TaxoraException.js';\n\nexport class AuthenticationException extends TaxoraException {\n public readonly statusCode = 401;\n\n constructor(message: string, context: Record<string, unknown> = {}) {\n super(message, context);\n this.name = 'AuthenticationException';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import { TaxoraException } from './TaxoraException.js';\n\nexport class HttpException extends TaxoraException {\n public readonly statusCode: number;\n public readonly responseBody: string;\n\n constructor(message: string, statusCode: number, responseBody: string, context: Record<string, unknown> = {}) {\n super(message, context);\n this.name = 'HttpException';\n this.statusCode = statusCode;\n this.responseBody = responseBody;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n getStatusCode(): number {\n return this.statusCode;\n }\n\n getResponseBody(): string {\n return this.responseBody;\n }\n}\n","export interface CompanyResource {\n id?: number;\n uuid?: string;\n name?: string;\n vat_uid?: string;\n address_line_1?: string | null;\n address_line_2?: string | null;\n street?: string | null;\n zip_code?: string | null;\n city?: string | null;\n country_code?: string | null;\n email?: string;\n phone_number?: string | null;\n api_rate_limit: number;\n vat_rate_limit: number;\n /**\n * @deprecated Use api_rate_limit and vat_rate_limit instead.\n */\n rate_limit?: number;\n state?: string;\n source?: string;\n [key: string]: unknown;\n}\n\nexport function normalizeCompanyResource(data: Record<string, unknown>): CompanyResource {\n const apiRateLimit = typeof data['api_rate_limit'] === 'number' ? data['api_rate_limit'] : undefined;\n const vatRateLimit = typeof data['vat_rate_limit'] === 'number' ? data['vat_rate_limit'] : undefined;\n const legacyRateLimit = typeof data['rate_limit'] === 'number' ? data['rate_limit'] : undefined;\n\n return {\n ...data,\n api_rate_limit: apiRateLimit ?? legacyRateLimit ?? 0,\n vat_rate_limit: vatRateLimit ?? legacyRateLimit ?? 0,\n };\n}\n","import { HttpException } from '../exceptions/HttpException.js';\nimport { normalizeCompanyResource, type CompanyResource } from '../dto/CompanyResource.js';\nimport { type HttpClientInterface } from '../http/HttpClientInterface.js';\nimport { type TokenStorageInterface } from '../http/TokenStorageInterface.js';\n\nexport class CompanyEndpoint {\n constructor(\n private readonly baseUrl: string,\n private readonly apiKey: string,\n private readonly tokenStorage: TokenStorageInterface,\n private readonly httpClient: HttpClientInterface,\n ) {}\n\n async get(): Promise<CompanyResource> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n };\n\n const token = this.tokenStorage.get();\n if (token) {\n headers['Authorization'] = `Bearer ${token.accessToken}`;\n }\n\n const response = await this.httpClient.request('GET', `${this.baseUrl}/company`, { headers });\n const responseText = await response.text();\n\n if (!response.ok) {\n throw new HttpException(`HTTP error ${response.status}`, response.status, responseText);\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(responseText);\n } catch {\n throw new HttpException('Invalid JSON response', 0, responseText);\n }\n\n if (typeof parsed !== 'object' || parsed === null) {\n throw new HttpException('Unexpected response format', 0, responseText);\n }\n\n const obj = parsed as Record<string, unknown>;\n if (obj['data'] !== undefined && typeof obj['data'] === 'object' && obj['data'] !== null) {\n return normalizeCompanyResource(obj['data'] as Record<string, unknown>);\n }\n\n return normalizeCompanyResource(obj);\n }\n}\n","export const VatState = {\n VALID: 'valid',\n INVALID: 'invalid',\n FRAUD: 'fraud',\n UNKNOWN: 'unknown',\n} as const;\n\nexport type VatState = (typeof VatState)[keyof typeof VatState];\n\nexport function getFailedVatStates(): VatState[] {\n return [VatState.INVALID, VatState.FRAUD];\n}\n\nconst DESCRIPTIONS: Record<VatState, string> = {\n [VatState.VALID]: 'The VAT number is valid and active.',\n [VatState.INVALID]: 'The VAT number is invalid or not registered.',\n [VatState.FRAUD]: 'The VAT number has been flagged as potentially fraudulent.',\n [VatState.UNKNOWN]: 'The VAT number state could not be determined.',\n};\n\nexport function describeVatState(state: VatState): string {\n return DESCRIPTIONS[state];\n}\n","interface CompanyAddressProps {\n fullAddress?: string | null;\n name?: string | null;\n street?: string | null;\n postalCode?: string | null;\n city?: string | null;\n state?: string | null;\n country?: string | null;\n raw?: string | null;\n}\n\nexport class CompanyAddress {\n public readonly fullAddress: string | null;\n public readonly name: string | null;\n public readonly street: string | null;\n public readonly postalCode: string | null;\n public readonly city: string | null;\n public readonly state: string | null;\n public readonly country: string | null;\n public readonly raw: string | null;\n\n constructor(props: CompanyAddressProps) {\n this.name = props.name ?? null;\n this.street = props.street ?? null;\n this.postalCode = props.postalCode ?? null;\n this.city = props.city ?? null;\n this.state = props.state ?? null;\n this.country = props.country ?? null;\n this.raw = props.raw ?? null;\n this.fullAddress = props.fullAddress ?? this.assembleFullAddress();\n }\n\n private assembleFullAddress(): string | null {\n const parts = [this.street, this.postalCode, this.city, this.country].filter(Boolean);\n return parts.length > 0 ? parts.join(', ') : null;\n }\n\n static from(value: unknown): CompanyAddress | null {\n if (value === null || value === undefined) return null;\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) return null;\n\n try {\n const parsed: unknown = JSON.parse(trimmed);\n if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {\n return CompanyAddress.fromArray(parsed as Record<string, unknown>, trimmed);\n }\n } catch {\n // Not valid JSON — treat as plain string\n }\n return new CompanyAddress({ raw: trimmed });\n }\n\n if (typeof value === 'object' && !Array.isArray(value)) {\n return CompanyAddress.fromArray(value as Record<string, unknown>, null);\n }\n\n return null;\n }\n\n static fromArray(data: Record<string, unknown>, raw: string | null): CompanyAddress {\n const get = (key: string): string | null => {\n const val = data[key] ?? data[key.replace(/_/g, '-')];\n return typeof val === 'string' && val.trim() ? val.trim() : null;\n };\n\n return new CompanyAddress({\n fullAddress: get('full_address'),\n name: get('name'),\n street: get('street'),\n postalCode: get('postal_code') ?? get('postalCode'),\n city: get('city'),\n state: get('state'),\n country: get('country'),\n raw,\n });\n }\n\n toArray(): Record<string, string | null> {\n return {\n full_address: this.fullAddress,\n name: this.name,\n street: this.street,\n postal_code: this.postalCode,\n city: this.city,\n state: this.state,\n country: this.country,\n };\n }\n\n toString(): string {\n return this.fullAddress ?? this.raw ?? '';\n }\n}\n","export class ScoreBreakdown {\n constructor(\n public readonly stepName: string,\n public readonly scoreContribution: number,\n public readonly metadata: Record<string, unknown>,\n ) {}\n\n static fromArray(data: Record<string, unknown>): ScoreBreakdown {\n return new ScoreBreakdown(\n typeof data['step_name'] === 'string' ? data['step_name'] : '',\n typeof data['score_contribution'] === 'number' ? data['score_contribution'] : 0,\n data['metadata'] !== null && typeof data['metadata'] === 'object' && !Array.isArray(data['metadata'])\n ? (data['metadata'] as Record<string, unknown>)\n : {},\n );\n }\n\n toArray(): { step_name: string; score_contribution: number; metadata: Record<string, unknown> } {\n return {\n step_name: this.stepName,\n score_contribution: this.scoreContribution,\n metadata: this.metadata,\n };\n }\n}\n","export class ProviderDocumentLine {\n constructor(\n public readonly id: number | null,\n public readonly vatUid: string | null,\n public readonly rowNumber: number | null,\n public readonly entryIdentifier: string | null,\n public readonly reference: string | null,\n public readonly meta: Record<string, unknown>,\n ) {}\n\n static fromArray(data: unknown): ProviderDocumentLine | null {\n if (data === null || data === undefined || typeof data !== 'object' || Array.isArray(data)) {\n return null;\n }\n const d = data as Record<string, unknown>;\n\n return new ProviderDocumentLine(\n typeof d['id'] === 'number' ? d['id'] : null,\n typeof d['vat_uid'] === 'string' ? d['vat_uid'] : null,\n typeof d['row_number'] === 'number' ? d['row_number'] : null,\n typeof d['entry_identifier'] === 'string' ? d['entry_identifier'] : null,\n typeof d['reference'] === 'string' ? d['reference'] : null,\n d['meta'] !== null && typeof d['meta'] === 'object' && !Array.isArray(d['meta'])\n ? (d['meta'] as Record<string, unknown>)\n : {},\n );\n }\n\n toArray(): Record<string, unknown> {\n return {\n id: this.id,\n vat_uid: this.vatUid,\n row_number: this.rowNumber,\n entry_identifier: this.entryIdentifier,\n reference: this.reference,\n meta: this.meta,\n };\n }\n}\n","import { ProviderDocumentLine } from './ProviderDocumentLine.js';\n\nexport class ProviderDocument {\n constructor(\n public readonly id: number | null,\n public readonly provider: string | null,\n public readonly documentType: string | null,\n public readonly state: string | null,\n public readonly documentDate: Date | null,\n public readonly mime: string | null,\n public readonly size: number | null,\n public readonly hash: string | null,\n public readonly meta: Record<string, unknown>,\n public readonly line: ProviderDocumentLine | null,\n ) {}\n\n static fromArray(data: unknown): ProviderDocument | null {\n if (data === null || data === undefined || typeof data !== 'object' || Array.isArray(data)) {\n return null;\n }\n const d = data as Record<string, unknown>;\n\n const documentDate =\n typeof d['document_date'] === 'string' && d['document_date'] ? new Date(d['document_date']) : null;\n\n return new ProviderDocument(\n typeof d['id'] === 'number' ? d['id'] : null,\n typeof d['provider'] === 'string' ? d['provider'] : null,\n typeof d['document_type'] === 'string' ? d['document_type'] : null,\n typeof d['state'] === 'string' ? d['state'] : null,\n documentDate,\n typeof d['mime'] === 'string' ? d['mime'] : null,\n typeof d['size'] === 'number' ? d['size'] : null,\n typeof d['hash'] === 'string' ? d['hash'] : null,\n d['meta'] !== null && typeof d['meta'] === 'object' && !Array.isArray(d['meta'])\n ? (d['meta'] as Record<string, unknown>)\n : {},\n ProviderDocumentLine.fromArray(d['line']),\n );\n }\n\n toArray(): Record<string, unknown> {\n return {\n id: this.id,\n provider: this.provider,\n document_type: this.documentType,\n state: this.state,\n document_date: this.documentDate?.toISOString() ?? null,\n mime: this.mime,\n size: this.size,\n hash: this.hash,\n meta: this.meta,\n line: this.line?.toArray() ?? null,\n };\n }\n}\n","import { VatState } from '../enums/VatState.js';\nimport { CompanyAddress } from './CompanyAddress.js';\nimport { ScoreBreakdown } from './ScoreBreakdown.js';\nimport { ProviderDocument } from './ProviderDocument.js';\n\nexport class VatResource {\n constructor(\n public readonly uuid: string | undefined,\n public readonly vatUid: string | undefined,\n public readonly state: VatState | undefined,\n public readonly countryCode: string | undefined,\n public readonly companyName: string | undefined,\n public readonly companyAddress: CompanyAddress | undefined,\n public readonly requestedCompanyName: string | undefined,\n public readonly requestedCompanyNameOriginal: string | undefined,\n public readonly requestedInputAddress: Record<string, string | null> | undefined,\n public readonly checkedAt: Date | undefined,\n public readonly score: number | undefined,\n public readonly scoreSource: string | undefined,\n public readonly scoreAttempts: Array<{ source?: string; score?: number }> | undefined,\n public readonly breakdown: ScoreBreakdown[] | undefined,\n public readonly environment: string | undefined,\n public readonly provider: string | undefined,\n public readonly usedProviders: string[] | undefined,\n public readonly providerVatState: string | undefined,\n public readonly providerNote: string | undefined,\n public readonly providerLastCheckedAt: Date | undefined,\n public readonly hasApiError: boolean | null | undefined,\n public readonly errorMessage: string | null | undefined,\n public readonly nextApiRecheckAt: string | null | undefined,\n public readonly providerDocument: ProviderDocument | undefined,\n ) {}\n\n static fromArray(data: Record<string, unknown>): VatResource {\n const str = (key: string): string | undefined => {\n const v = data[key];\n return typeof v === 'string' ? v : undefined;\n };\n\n const stateRaw = str('state');\n const state =\n stateRaw !== undefined && Object.values(VatState).includes(stateRaw as VatState)\n ? (stateRaw as VatState)\n : undefined;\n\n const checkedAt = str('checked_at') ? new Date(data['checked_at'] as string) : undefined;\n const providerLastCheckedAt = str('provider_last_checked_at')\n ? new Date(data['provider_last_checked_at'] as string)\n : undefined;\n const hasApiError =\n data['has_api_error'] === null\n ? null\n : typeof data['has_api_error'] === 'boolean'\n ? data['has_api_error']\n : undefined;\n const errorMessage =\n data['error_message'] === null\n ? null\n : typeof data['error_message'] === 'string'\n ? data['error_message']\n : undefined;\n const nextApiRecheckAt =\n data['next_api_recheck_at'] === null\n ? null\n : typeof data['next_api_recheck_at'] === 'string'\n ? data['next_api_recheck_at']\n : undefined;\n\n const breakdown = Array.isArray(data['breakdown'])\n ? (data['breakdown'] as Record<string, unknown>[]).map(ScoreBreakdown.fromArray)\n : undefined;\n\n const usedProviders = Array.isArray(data['used_providers'])\n ? (data['used_providers'] as unknown[]).filter((v): v is string => typeof v === 'string')\n : undefined;\n\n const scoreAttempts = Array.isArray(data['score_attempts'])\n ? (data['score_attempts'] as Record<string, unknown>[])\n : undefined;\n\n const requestedInputAddress =\n data['requested_input_address'] !== null &&\n typeof data['requested_input_address'] === 'object' &&\n !Array.isArray(data['requested_input_address'])\n ? (data['requested_input_address'] as Record<string, string | null>)\n : undefined;\n\n return new VatResource(\n str('uuid'),\n str('vat_uid'),\n state,\n str('country_code'),\n str('company_name'),\n CompanyAddress.from(data['company_address']) ?? undefined,\n str('requested_company_name'),\n str('requested_company_name_original'),\n requestedInputAddress,\n checkedAt,\n typeof data['score'] === 'number' ? data['score'] : undefined,\n str('score_source'),\n scoreAttempts,\n breakdown,\n str('environment'),\n str('provider'),\n usedProviders,\n str('provider_vat_state'),\n str('provider_note'),\n providerLastCheckedAt,\n hasApiError,\n errorMessage,\n nextApiRecheckAt,\n ProviderDocument.fromArray(data['provider_document']) ?? undefined,\n );\n }\n\n getBackendLink(): string | null {\n if (!this.uuid) return null;\n if (this.environment === 'LIVE') {\n return `https://app.taxora.io/vat/history/${this.uuid}`;\n }\n return `https://app.sandbox.taxora.io/vat/history/${this.uuid}`;\n }\n\n toArray(): Record<string, unknown> {\n return {\n uuid: this.uuid,\n vat_uid: this.vatUid,\n state: this.state,\n country_code: this.countryCode,\n company_name: this.companyName,\n company_address: this.companyAddress?.toArray() ?? null,\n requested_company_name: this.requestedCompanyName,\n requested_company_name_original: this.requestedCompanyNameOriginal,\n requested_input_address: this.requestedInputAddress ?? null,\n checked_at: this.checkedAt?.toISOString() ?? null,\n score: this.score ?? null,\n score_source: this.scoreSource ?? null,\n score_attempts: this.scoreAttempts ?? null,\n breakdown: this.breakdown?.map((b) => b.toArray()) ?? null,\n environment: this.environment ?? null,\n provider: this.provider ?? null,\n used_providers: this.usedProviders ?? null,\n provider_vat_state: this.providerVatState ?? null,\n provider_note: this.providerNote ?? null,\n provider_last_checked_at: this.providerLastCheckedAt?.toISOString() ?? null,\n has_api_error: this.hasApiError ?? null,\n error_message: this.errorMessage ?? null,\n next_api_recheck_at: this.nextApiRecheckAt ?? null,\n provider_document: this.providerDocument?.toArray() ?? null,\n };\n }\n}\n","import { VatResource } from './VatResource.js';\n\nexport class VatCollection implements Iterable<VatResource> {\n private readonly items: VatResource[];\n public readonly self: string | undefined;\n\n constructor(items: VatResource[], self?: string) {\n this.items = items;\n this.self = self;\n }\n\n static fromResponse(data: unknown): VatCollection {\n if (Array.isArray(data)) {\n return new VatCollection((data as Record<string, unknown>[]).map(VatResource.fromArray));\n }\n\n if (typeof data === 'object' && data !== null) {\n const obj = data as Record<string, unknown>;\n const items = Array.isArray(obj['data'])\n ? (obj['data'] as Record<string, unknown>[]).map(VatResource.fromArray)\n : [];\n const self = typeof obj['self'] === 'string' ? obj['self'] : undefined;\n return new VatCollection(items, self);\n }\n\n return new VatCollection([]);\n }\n\n [Symbol.iterator](): Iterator<VatResource> {\n return this.items[Symbol.iterator]();\n }\n\n get length(): number {\n return this.items.length;\n }\n\n all(): VatResource[] {\n return [...this.items];\n }\n}\n","export class VatCertificateExport {\n constructor(\n public readonly exportId: string,\n public readonly message?: string,\n ) {}\n\n static fromArray(data: Record<string, unknown>): VatCertificateExport {\n return new VatCertificateExport(\n typeof data['export_id'] === 'string' ? data['export_id'] : '',\n typeof data['message'] === 'string' ? data['message'] : undefined,\n );\n }\n\n toArray(): { export_id: string; message?: string } {\n const result: { export_id: string; message?: string } = { export_id: this.exportId };\n if (this.message !== undefined) result.message = this.message;\n return result;\n }\n}\n","import { TaxoraException } from '../exceptions/TaxoraException.js';\n\ninterface VatValidationAddressInputProps {\n addressLine1?: string;\n addressLine2?: string;\n postalCode?: string;\n city?: string;\n countryCode?: string;\n}\n\nconst ALLOWED_KEYS = new Set(['address_line_1', 'address_line_2', 'postal_code', 'city', 'country_code']);\n\nexport class VatValidationAddressInput {\n public readonly addressLine1?: string;\n public readonly addressLine2?: string;\n public readonly postalCode?: string;\n public readonly city?: string;\n public readonly countryCode?: string;\n\n constructor(props: VatValidationAddressInputProps) {\n if (props.addressLine1 !== undefined && props.addressLine1.length > 255) {\n throw new TaxoraException('addressLine1 must not exceed 255 characters');\n }\n if (props.addressLine2 !== undefined && props.addressLine2.length > 255) {\n throw new TaxoraException('addressLine2 must not exceed 255 characters');\n }\n if (props.countryCode !== undefined && props.countryCode.length !== 2) {\n throw new TaxoraException('countryCode must be exactly 2 characters (ISO 3166-1 alpha-2)');\n }\n\n this.addressLine1 = props.addressLine1;\n this.addressLine2 = props.addressLine2;\n this.postalCode = props.postalCode;\n this.city = props.city;\n this.countryCode = props.countryCode;\n }\n\n static fromArray(data: Record<string, unknown>): VatValidationAddressInput {\n for (const key of Object.keys(data)) {\n if (!ALLOWED_KEYS.has(key)) {\n throw new TaxoraException(`Unsupported field: \"${key}\". Allowed fields: ${[...ALLOWED_KEYS].join(', ')}`);\n }\n }\n\n const getString = (key: string): string | undefined => {\n const val = data[key];\n if (typeof val !== 'string') return undefined;\n const trimmed = val.trim();\n return trimmed || undefined;\n };\n\n const countryCode = getString('country_code');\n\n return new VatValidationAddressInput({\n addressLine1: getString('address_line_1'),\n addressLine2: getString('address_line_2'),\n postalCode: getString('postal_code'),\n city: getString('city'),\n countryCode: countryCode ? countryCode.toUpperCase() : undefined,\n });\n }\n\n toArray(): Record<string, string> {\n const result: Record<string, string> = {};\n if (this.addressLine1 !== undefined) result['address_line_1'] = this.addressLine1;\n if (this.addressLine2 !== undefined) result['address_line_2'] = this.addressLine2;\n if (this.postalCode !== undefined) result['postal_code'] = this.postalCode;\n if (this.city !== undefined) result['city'] = this.city;\n if (this.countryCode !== undefined) result['country_code'] = this.countryCode;\n return result;\n }\n}\n","import { TaxoraException } from './TaxoraException.js';\n\nexport class ValidationException extends TaxoraException {\n public readonly statusCode = 422;\n private readonly errors: Record<string, string[]>;\n\n constructor(message: string, errors: Record<string, string[]>, context: Record<string, unknown> = {}) {\n super(message, context);\n this.name = 'ValidationException';\n this.errors = errors;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n getErrors(): Record<string, string[]> {\n return this.errors;\n }\n}\n","import { VatResource } from '../dto/VatResource.js';\nimport { VatCollection } from '../dto/VatCollection.js';\nimport { VatCertificateExport } from '../dto/VatCertificateExport.js';\nimport { VatValidationAddressInput } from '../dto/VatValidationAddressInput.js';\nimport { type Language } from '../enums/Language.js';\nimport { HttpException } from '../exceptions/HttpException.js';\nimport { ValidationException } from '../exceptions/ValidationException.js';\nimport { TaxoraException } from '../exceptions/TaxoraException.js';\nimport { type HttpClientInterface } from '../http/HttpClientInterface.js';\nimport { type TokenStorageInterface } from '../http/TokenStorageInterface.js';\n\nconst DATE_REGEX = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nexport class VatEndpoint {\n constructor(\n private readonly baseUrl: string,\n private readonly apiKey: string,\n private readonly tokenStorage: TokenStorageInterface,\n private readonly httpClient: HttpClientInterface,\n ) {}\n\n async validate(\n vatUid: string,\n companyName?: string,\n provider?: string,\n addressInput?: VatValidationAddressInput | Record<string, string>,\n ): Promise<VatResource> {\n const body: Record<string, unknown> = { vat_uid: vatUid };\n if (companyName) body['company_name'] = companyName;\n if (provider) body['source'] = provider;\n\n if (addressInput) {\n body['address_input'] = addressInput instanceof VatValidationAddressInput ? addressInput.toArray() : addressInput;\n }\n\n return this.validateWithGatewayRetry(body, 2);\n }\n\n private async validateWithGatewayRetry(body: Record<string, unknown>, attemptsLeft: number): Promise<VatResource> {\n const response = await this.sendRequest('POST', `${this.baseUrl}/vat/validate`, body);\n\n if (response.status === 504) {\n if (attemptsLeft <= 1) {\n const text = await response.text();\n throw new HttpException('VAT validation timed out after multiple attempts', 504, text);\n }\n return this.validateWithGatewayRetry(body, attemptsLeft - 1);\n }\n\n const data = await this.parseJsonResponse(response);\n return VatResource.fromArray(data);\n }\n\n async validateMultiple(vatUids: string[], companyNames?: string[], provider?: string): Promise<VatCollection> {\n const body: Record<string, unknown> = { vat_uids: vatUids };\n if (companyNames) body['company_names'] = companyNames;\n if (provider) body['source'] = provider;\n\n const response = await this.sendRequest('POST', `${this.baseUrl}/vat/validate/multiple`, body);\n const data = await this.parseJsonResponse(response);\n\n return VatCollection.fromResponse(data);\n }\n\n async validateSchema(vatUid: string): Promise<Record<string, unknown>> {\n const body: Record<string, unknown> = { vat_uid: vatUid };\n const response = await this.sendRequest('POST', `${this.baseUrl}/vat/validate/schema`, body);\n return this.parseJsonResponse(response);\n }\n\n async state(vatUid: string): Promise<VatResource> {\n const response = await this.sendRequest('GET', `${this.baseUrl}/vat/state/${encodeURIComponent(vatUid)}`);\n const data = await this.parseJsonResponse(response);\n return VatResource.fromArray(data);\n }\n\n async history(vatUid?: string): Promise<VatCollection> {\n let url = `${this.baseUrl}/vat/history`;\n if (vatUid) url += `?vat_uid=${encodeURIComponent(vatUid)}`;\n\n const response = await this.sendRequest('GET', url);\n const data = await this.parseJsonResponse(response);\n return VatCollection.fromResponse(data);\n }\n\n async search(term?: string, perPage?: number): Promise<VatCollection> {\n const params = new URLSearchParams();\n if (term) params.set('term', term);\n if (perPage !== undefined) params.set('per_page', String(perPage));\n\n const queryString = params.toString();\n const url = `${this.baseUrl}/vat/search${queryString ? `?${queryString}` : ''}`;\n\n const response = await this.sendRequest('GET', url);\n const data = await this.parseJsonResponse(response);\n return VatCollection.fromResponse(data);\n }\n\n async certificate(uuid: string, lang?: Language): Promise<Uint8Array> {\n let url = `${this.baseUrl}/vat/certificate/${encodeURIComponent(uuid)}`;\n if (lang) url += `?lang=${lang}`;\n\n const response = await this.sendBinaryRequest('GET', url);\n const buffer = await response.arrayBuffer();\n return new Uint8Array(buffer);\n }\n\n async certificatesBulkExport(\n fromDate: Date | string,\n toDate: Date | string,\n countries?: string[],\n lang?: Language,\n ): Promise<VatCertificateExport> {\n return this.exportRequest(`${this.baseUrl}/vat/certificates/bulk-export`, fromDate, toDate, countries, lang);\n }\n\n async certificatesListExport(\n fromDate: Date | string,\n toDate: Date | string,\n countries?: string[],\n lang?: Language,\n ): Promise<VatCertificateExport> {\n return this.exportRequest(`${this.baseUrl}/vat/certificates/list-export`, fromDate, toDate, countries, lang);\n }\n\n private async exportRequest(\n url: string,\n fromDate: Date | string,\n toDate: Date | string,\n countries?: string[],\n lang?: Language,\n ): Promise<VatCertificateExport> {\n const from = this.formatDate(fromDate);\n const to = this.formatDate(toDate);\n\n const body: Record<string, unknown> = { from_date: from, to_date: to };\n if (countries && countries.length > 0) body['countries'] = countries;\n if (lang) body['lang'] = lang;\n\n const response = await this.sendRequest('POST', url, body);\n const data = await this.parseJsonResponse(response, [200, 202]);\n\n const exportObj = VatCertificateExport.fromArray(data);\n if (!exportObj.exportId) {\n throw new TaxoraException('Export response is missing export_id');\n }\n\n return exportObj;\n }\n\n async downloadBulkExport(exportId: string): Promise<Uint8Array> {\n const url = `${this.baseUrl}/vat/certificates/bulk-export/${encodeURIComponent(exportId)}/download`;\n const response = await this.sendBinaryRequest('GET', url);\n const buffer = await response.arrayBuffer();\n return new Uint8Array(buffer);\n }\n\n private buildHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n };\n const token = this.tokenStorage.get();\n if (token) {\n headers['Authorization'] = `Bearer ${token.accessToken}`;\n }\n return headers;\n }\n\n private async sendRequest(method: string, url: string, body?: Record<string, unknown>): Promise<Response> {\n const options: RequestInit = { headers: this.buildHeaders() };\n if (body) options.body = JSON.stringify(body);\n\n return this.httpClient.request(method, url, options);\n }\n\n private async sendBinaryRequest(method: string, url: string): Promise<Response> {\n const headers = this.buildHeaders();\n delete headers['Content-Type'];\n\n const response = await this.httpClient.request(method, url, { headers });\n if (!response.ok) {\n const text = await response.text();\n throw new HttpException(`HTTP error ${response.status}`, response.status, text);\n }\n return response;\n }\n\n private async parseJsonResponse(\n response: Response,\n acceptedStatuses: number[] = [200],\n ): Promise<Record<string, unknown>> {\n const responseText = await response.text();\n\n if (response.status === 422) {\n let errors: Record<string, string[]> = {};\n try {\n const parsed = JSON.parse(responseText) as Record<string, unknown>;\n if (parsed['errors'] !== null && typeof parsed['errors'] === 'object' && !Array.isArray(parsed['errors'])) {\n errors = parsed['errors'] as Record<string, string[]>;\n }\n } catch {\n // ignore parse errors\n }\n throw new ValidationException('Validation failed', errors);\n }\n\n if (!response.ok && !acceptedStatuses.includes(response.status)) {\n throw new HttpException(`HTTP error ${response.status}`, response.status, responseText);\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(responseText);\n } catch {\n throw new HttpException('Invalid JSON response', 0, responseText);\n }\n\n if (typeof parsed !== 'object' || parsed === null) {\n throw new HttpException('Unexpected response format', 0, responseText);\n }\n\n const obj = parsed as Record<string, unknown>;\n if (obj['data'] !== undefined && (typeof obj['data'] === 'object' || Array.isArray(obj['data']))) {\n return obj['data'] as Record<string, unknown>;\n }\n\n return obj;\n }\n\n private formatDate(date: Date | string): string {\n if (date instanceof Date) {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n\n if (!DATE_REGEX.test(date)) {\n throw new TaxoraException(`Invalid date format: \"${date}\". Expected YYYY-MM-DD.`);\n }\n\n return date;\n }\n}\n","export const Environment = {\n SANDBOX: 'sandbox',\n PRODUCTION: 'production',\n} as const;\n\nexport type Environment = (typeof Environment)[keyof typeof Environment];\n\nconst BASE_URLS: Record<Environment, string> = {\n [Environment.SANDBOX]: 'https://sandbox.taxora.io/v1',\n [Environment.PRODUCTION]: 'https://api.taxora.io/v1',\n};\n\nexport function getBaseUrl(environment: Environment): string {\n return BASE_URLS[environment];\n}\n","import { type HttpClientInterface } from './HttpClientInterface.js';\n\nexport class FetchHttpClient implements HttpClientInterface {\n async request(method: string, url: string, options: RequestInit = {}): Promise<Response> {\n return fetch(url, { ...options, method });\n }\n}\n","import { type Token } from '../dto/Token.js';\nimport { type TokenStorageInterface } from './TokenStorageInterface.js';\n\nexport class InMemoryTokenStorage implements TokenStorageInterface {\n private token: Token | null = null;\n\n get(): Token | null {\n return this.token;\n }\n\n set(token: Token): void {\n this.token = token;\n }\n\n clear(): void {\n this.token = null;\n }\n}\n","import { type Token } from '../dto/Token.js';\nimport { AuthenticationException } from '../exceptions/AuthenticationException.js';\nimport { type HttpClientInterface } from './HttpClientInterface.js';\nimport { type TokenStorageInterface } from './TokenStorageInterface.js';\n\nconst AUTH_PATH_PATTERN = /\\/auth\\//;\n\n/**\n * HTTP client wrapper that handles:\n * - Preemptive token refresh when the stored token is expired\n * - Automatic retry with a fresh token on 401 responses\n * - Passthrough for /auth/ routes (no interception)\n */\nexport class AuthRetryHttpClient implements HttpClientInterface {\n constructor(\n private readonly inner: HttpClientInterface,\n private readonly tokenStorage: TokenStorageInterface,\n private readonly refreshFn: () => Promise<Token>,\n ) {}\n\n async request(method: string, url: string, options?: RequestInit): Promise<Response> {\n // Auth routes bypass all retry logic\n if (AUTH_PATH_PATTERN.test(url)) {\n return this.inner.request(method, url, options);\n }\n\n // Preemptive refresh if token is expired\n const currentToken = this.tokenStorage.get();\n if (currentToken?.isExpired()) {\n await this.refreshFn();\n }\n\n // Build request with potentially refreshed token\n const updatedOptions = this.injectAuthHeader(options);\n const response = await this.inner.request(method, url, updatedOptions);\n\n // 401: refresh once and retry\n if (response.status === 401) {\n await this.refreshFn();\n const retryOptions = this.injectAuthHeader(options);\n const retryResponse = await this.inner.request(method, url, retryOptions);\n\n if (retryResponse.status === 401) {\n const body = await retryResponse.text();\n throw new AuthenticationException('Authentication failed after token refresh', { status: 401, body });\n }\n\n return retryResponse;\n }\n\n return response;\n }\n\n private injectAuthHeader(options?: RequestInit): RequestInit {\n const token = this.tokenStorage.get();\n if (!token) return options ?? {};\n\n const existing = options?.headers ?? {};\n const headers = { ...(existing as Record<string, string>), Authorization: `Bearer ${token.accessToken}` };\n return { ...(options ?? {}), headers };\n }\n}\n","import { AuthEndpoint } from '../endpoints/AuthEndpoint.js';\nimport { CompanyEndpoint } from '../endpoints/CompanyEndpoint.js';\nimport { VatEndpoint } from '../endpoints/VatEndpoint.js';\nimport { Environment, getBaseUrl } from '../enums/Environment.js';\nimport { type HttpClientInterface } from '../http/HttpClientInterface.js';\nimport { FetchHttpClient } from '../http/FetchHttpClient.js';\nimport { InMemoryTokenStorage } from '../http/InMemoryTokenStorage.js';\nimport { type TokenStorageInterface } from '../http/TokenStorageInterface.js';\nimport { AuthRetryHttpClient } from '../http/AuthRetryHttpClient.js';\n\nexport interface TaxoraClientOptions {\n apiKey: string;\n environment?: Environment;\n tokenStorage?: TokenStorageInterface;\n httpClient?: HttpClientInterface;\n}\n\nexport class TaxoraClient {\n public readonly auth: AuthEndpoint;\n public readonly vat: VatEndpoint;\n public readonly company: CompanyEndpoint;\n public readonly baseUrl: string;\n\n constructor(options: TaxoraClientOptions) {\n const environment = options.environment ?? Environment.SANDBOX;\n const tokenStorage = options.tokenStorage ?? new InMemoryTokenStorage();\n const httpClient = options.httpClient ?? new FetchHttpClient();\n\n this.baseUrl = getBaseUrl(environment);\n\n // Auth endpoint uses the raw HTTP client — no retry interception for auth routes\n this.auth = new AuthEndpoint(this.baseUrl, options.apiKey, tokenStorage, httpClient);\n\n // All other endpoints use the retry-capable client that handles 401 auto-refresh\n const retryClient = new AuthRetryHttpClient(httpClient, tokenStorage, () => this.auth.refresh());\n\n this.vat = new VatEndpoint(this.baseUrl, options.apiKey, tokenStorage, retryClient);\n this.company = new CompanyEndpoint(this.baseUrl, options.apiKey, tokenStorage, retryClient);\n }\n}\n","import { TaxoraClient, type TaxoraClientOptions } from './TaxoraClient.js';\n\nexport class TaxoraClientFactory {\n static create(options: TaxoraClientOptions): TaxoraClient {\n return new TaxoraClient(options);\n }\n}\n","export const ApiVersion = {\n V1: 'v1',\n} as const;\n\nexport type ApiVersion = (typeof ApiVersion)[keyof typeof ApiVersion];\n","export const Language = {\n ENGLISH: 'en',\n GERMAN: 'de',\n} as const;\n\nexport type Language = (typeof Language)[keyof typeof Language];\n"],"mappings":"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","names":["parsed"]}
1
+ {"version":3,"sources":["../src/endpoints/AuthEndpoint.ts","../src/dto/Token.ts","../src/enums/LoginIdentifier.ts","../src/exceptions/TaxoraException.ts","../src/exceptions/AuthenticationException.ts","../src/exceptions/HttpException.ts","../src/dto/CompanyResource.ts","../src/endpoints/CompanyEndpoint.ts","../src/enums/VatState.ts","../src/dto/CompanyAddress.ts","../src/dto/ScoreBreakdown.ts","../src/dto/ProviderDocumentLine.ts","../src/dto/ProviderDocument.ts","../src/dto/VatResource.ts","../src/dto/VatCollection.ts","../src/dto/VatCertificateExport.ts","../src/dto/VatValidationAddressInput.ts","../src/exceptions/ValidationException.ts","../src/endpoints/VatEndpoint.ts","../src/enums/Environment.ts","../src/http/FetchHttpClient.ts","../src/http/InMemoryTokenStorage.ts","../src/http/AuthRetryHttpClient.ts","../src/client/TaxoraClient.ts","../src/client/TaxoraClientFactory.ts","../src/enums/ApiVersion.ts","../src/enums/Language.ts"],"sourcesContent":["import { hostname } from 'os';\nimport { Token } from '../dto/Token.js';\nimport { LoginIdentifier } from '../enums/LoginIdentifier.js';\nimport { AuthenticationException } from '../exceptions/AuthenticationException.js';\nimport { HttpException } from '../exceptions/HttpException.js';\nimport { type HttpClientInterface } from '../http/HttpClientInterface.js';\nimport { type TokenStorageInterface } from '../http/TokenStorageInterface.js';\n\nexport class AuthEndpoint {\n constructor(\n private readonly baseUrl: string,\n private readonly apiKey: string,\n private readonly tokenStorage: TokenStorageInterface,\n private readonly httpClient: HttpClientInterface,\n ) {}\n\n async login(\n identifier: string,\n password: string,\n device?: string,\n loginIdentifier: LoginIdentifier = LoginIdentifier.EMAIL,\n ): Promise<Token> {\n const deviceName = device ?? hostname();\n\n const body: Record<string, string> = {\n identifier: loginIdentifier,\n password,\n device_name: deviceName,\n };\n\n if (loginIdentifier === LoginIdentifier.CLIENT_ID) {\n body['client_id'] = identifier;\n } else {\n body['email'] = identifier;\n }\n\n const response = await this.httpClient.request('POST', `${this.baseUrl}/auth/login`, {\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n },\n body: JSON.stringify(body),\n });\n\n const responseText = await response.text();\n\n if (response.status === 401) {\n throw new AuthenticationException('Authentication failed: invalid credentials', {\n status: 401,\n body: responseText,\n });\n }\n\n if (!response.ok) {\n throw new HttpException(`HTTP error ${response.status}`, response.status, responseText);\n }\n\n const data = this.parseResponse(responseText);\n const token = Token.fromArray(data);\n this.tokenStorage.set(token);\n return token;\n }\n\n async loginWithClientId(clientId: string, password: string, device?: string): Promise<Token> {\n return this.login(clientId, password, device, LoginIdentifier.CLIENT_ID);\n }\n\n async refresh(): Promise<Token> {\n const storedToken = this.tokenStorage.get();\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n };\n\n if (storedToken) {\n headers['Authorization'] = `Bearer ${storedToken.accessToken}`;\n }\n\n const response = await this.httpClient.request('POST', `${this.baseUrl}/auth/refresh`, { headers });\n const responseText = await response.text();\n\n if (response.status === 401) {\n throw new AuthenticationException('Token refresh failed: unauthorized', { status: 401, body: responseText });\n }\n\n if (!response.ok) {\n throw new HttpException(`HTTP error ${response.status}`, response.status, responseText);\n }\n\n const data = this.parseResponse(responseText);\n const token = Token.fromArray(data);\n this.tokenStorage.set(token);\n return token;\n }\n\n private parseResponse(responseText: string): Record<string, unknown> {\n let parsed: unknown;\n try {\n parsed = JSON.parse(responseText);\n } catch {\n throw new HttpException('Invalid JSON response', 0, responseText);\n }\n\n if (typeof parsed !== 'object' || parsed === null) {\n throw new HttpException('Unexpected response format', 0, responseText);\n }\n\n const obj = parsed as Record<string, unknown>;\n if (obj['data'] !== undefined && typeof obj['data'] === 'object' && obj['data'] !== null) {\n return obj['data'] as Record<string, unknown>;\n }\n\n return obj;\n }\n}\n","export class Token {\n constructor(\n public readonly accessToken: string,\n public readonly tokenType: string,\n public readonly expiresAt: Date,\n ) {}\n\n isExpired(bufferSeconds = 15): boolean {\n return new Date(Date.now() + bufferSeconds * 1000) >= this.expiresAt;\n }\n\n static fromArray(data: Record<string, unknown>): Token {\n let accessToken = String(data['access_token'] ?? '');\n if (accessToken.startsWith('Bearer ')) {\n accessToken = accessToken.slice(7);\n }\n\n const tokenType = String(data['token_type'] ?? 'Bearer');\n const expiresIn = typeof data['expires_in'] === 'number' ? data['expires_in'] : 3600;\n const expiresAt = new Date(Date.now() + expiresIn * 1000);\n\n return new Token(accessToken, tokenType, expiresAt);\n }\n\n toArray(): { access_token: string; token_type: string; expires_at: string } {\n return {\n access_token: this.accessToken,\n token_type: this.tokenType,\n expires_at: this.expiresAt.toISOString(),\n };\n }\n}\n","export const LoginIdentifier = {\n EMAIL: 'email',\n CLIENT_ID: 'client_id',\n} as const;\n\nexport type LoginIdentifier = (typeof LoginIdentifier)[keyof typeof LoginIdentifier];\n","export class TaxoraException extends Error {\n public readonly context: Record<string, unknown>;\n\n constructor(message: string, context: Record<string, unknown> = {}) {\n super(message);\n this.name = 'TaxoraException';\n this.context = context;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import { TaxoraException } from './TaxoraException.js';\n\nexport class AuthenticationException extends TaxoraException {\n public readonly statusCode = 401;\n\n constructor(message: string, context: Record<string, unknown> = {}) {\n super(message, context);\n this.name = 'AuthenticationException';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import { TaxoraException } from './TaxoraException.js';\n\nexport class HttpException extends TaxoraException {\n public readonly statusCode: number;\n public readonly responseBody: string;\n\n constructor(message: string, statusCode: number, responseBody: string, context: Record<string, unknown> = {}) {\n super(message, context);\n this.name = 'HttpException';\n this.statusCode = statusCode;\n this.responseBody = responseBody;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n getStatusCode(): number {\n return this.statusCode;\n }\n\n getResponseBody(): string {\n return this.responseBody;\n }\n}\n","export interface CompanyResource {\n id?: number;\n uuid?: string;\n name?: string;\n vat_uid?: string;\n address_line_1?: string | null;\n address_line_2?: string | null;\n street?: string | null;\n zip_code?: string | null;\n city?: string | null;\n country_code?: string | null;\n email?: string;\n phone_number?: string | null;\n api_rate_limit: number;\n vat_rate_limit: number;\n /**\n * @deprecated Use api_rate_limit and vat_rate_limit instead.\n */\n rate_limit?: number;\n state?: string;\n source?: string;\n [key: string]: unknown;\n}\n\nexport function normalizeCompanyResource(data: Record<string, unknown>): CompanyResource {\n const apiRateLimit = typeof data['api_rate_limit'] === 'number' ? data['api_rate_limit'] : undefined;\n const vatRateLimit = typeof data['vat_rate_limit'] === 'number' ? data['vat_rate_limit'] : undefined;\n const legacyRateLimit = typeof data['rate_limit'] === 'number' ? data['rate_limit'] : undefined;\n\n return {\n ...data,\n api_rate_limit: apiRateLimit ?? legacyRateLimit ?? 0,\n vat_rate_limit: vatRateLimit ?? legacyRateLimit ?? 0,\n };\n}\n","import { HttpException } from '../exceptions/HttpException.js';\nimport { normalizeCompanyResource, type CompanyResource } from '../dto/CompanyResource.js';\nimport { type HttpClientInterface } from '../http/HttpClientInterface.js';\nimport { type TokenStorageInterface } from '../http/TokenStorageInterface.js';\n\nexport class CompanyEndpoint {\n constructor(\n private readonly baseUrl: string,\n private readonly apiKey: string,\n private readonly tokenStorage: TokenStorageInterface,\n private readonly httpClient: HttpClientInterface,\n ) {}\n\n async get(): Promise<CompanyResource> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n };\n\n const token = this.tokenStorage.get();\n if (token) {\n headers['Authorization'] = `Bearer ${token.accessToken}`;\n }\n\n const response = await this.httpClient.request('GET', `${this.baseUrl}/company`, { headers });\n const responseText = await response.text();\n\n if (!response.ok) {\n throw new HttpException(`HTTP error ${response.status}`, response.status, responseText);\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(responseText);\n } catch {\n throw new HttpException('Invalid JSON response', 0, responseText);\n }\n\n if (typeof parsed !== 'object' || parsed === null) {\n throw new HttpException('Unexpected response format', 0, responseText);\n }\n\n const obj = parsed as Record<string, unknown>;\n if (obj['data'] !== undefined && typeof obj['data'] === 'object' && obj['data'] !== null) {\n return normalizeCompanyResource(obj['data'] as Record<string, unknown>);\n }\n\n return normalizeCompanyResource(obj);\n }\n}\n","export const VatState = {\n VALID: 'valid',\n INVALID: 'invalid',\n FRAUD: 'fraud',\n UNKNOWN: 'unknown',\n} as const;\n\nexport type VatState = (typeof VatState)[keyof typeof VatState];\n\nexport function getFailedVatStates(): VatState[] {\n return [VatState.INVALID, VatState.FRAUD];\n}\n\nconst DESCRIPTIONS: Record<VatState, string> = {\n [VatState.VALID]: 'The VAT number is valid and active.',\n [VatState.INVALID]: 'The VAT number is invalid or not registered.',\n [VatState.FRAUD]: 'The VAT number has been flagged as potentially fraudulent.',\n [VatState.UNKNOWN]: 'The VAT number state could not be determined.',\n};\n\nexport function describeVatState(state: VatState): string {\n return DESCRIPTIONS[state];\n}\n","interface CompanyAddressProps {\n fullAddress?: string | null;\n name?: string | null;\n street?: string | null;\n postalCode?: string | null;\n city?: string | null;\n state?: string | null;\n country?: string | null;\n raw?: string | null;\n}\n\nexport class CompanyAddress {\n public readonly fullAddress: string | null;\n public readonly name: string | null;\n public readonly street: string | null;\n public readonly postalCode: string | null;\n public readonly city: string | null;\n public readonly state: string | null;\n public readonly country: string | null;\n public readonly raw: string | null;\n\n constructor(props: CompanyAddressProps) {\n this.name = props.name ?? null;\n this.street = props.street ?? null;\n this.postalCode = props.postalCode ?? null;\n this.city = props.city ?? null;\n this.state = props.state ?? null;\n this.country = props.country ?? null;\n this.raw = props.raw ?? null;\n this.fullAddress = props.fullAddress ?? this.assembleFullAddress();\n }\n\n private assembleFullAddress(): string | null {\n const parts = [this.street, this.postalCode, this.city, this.country].filter(Boolean);\n return parts.length > 0 ? parts.join(', ') : null;\n }\n\n static from(value: unknown): CompanyAddress | null {\n if (value === null || value === undefined) return null;\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) return null;\n\n try {\n const parsed: unknown = JSON.parse(trimmed);\n if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {\n return CompanyAddress.fromArray(parsed as Record<string, unknown>, trimmed);\n }\n } catch {\n // Not valid JSON — treat as plain string\n }\n return new CompanyAddress({ raw: trimmed });\n }\n\n if (typeof value === 'object' && !Array.isArray(value)) {\n return CompanyAddress.fromArray(value as Record<string, unknown>, null);\n }\n\n return null;\n }\n\n static fromArray(data: Record<string, unknown>, raw: string | null): CompanyAddress {\n const get = (key: string): string | null => {\n const val = data[key] ?? data[key.replace(/_/g, '-')];\n return typeof val === 'string' && val.trim() ? val.trim() : null;\n };\n\n return new CompanyAddress({\n fullAddress: get('full_address'),\n name: get('name'),\n street: get('street'),\n postalCode: get('postal_code') ?? get('postalCode'),\n city: get('city'),\n state: get('state'),\n country: get('country'),\n raw,\n });\n }\n\n toArray(): Record<string, string | null> {\n return {\n full_address: this.fullAddress,\n name: this.name,\n street: this.street,\n postal_code: this.postalCode,\n city: this.city,\n state: this.state,\n country: this.country,\n };\n }\n\n toString(): string {\n return this.fullAddress ?? this.raw ?? '';\n }\n}\n","export class ScoreBreakdown {\n constructor(\n public readonly stepName: string,\n public readonly scoreContribution: number,\n public readonly metadata: Record<string, unknown>,\n ) {}\n\n static fromArray(data: Record<string, unknown>): ScoreBreakdown {\n return new ScoreBreakdown(\n typeof data['step_name'] === 'string' ? data['step_name'] : '',\n typeof data['score_contribution'] === 'number' ? data['score_contribution'] : 0,\n data['metadata'] !== null && typeof data['metadata'] === 'object' && !Array.isArray(data['metadata'])\n ? (data['metadata'] as Record<string, unknown>)\n : {},\n );\n }\n\n toArray(): { step_name: string; score_contribution: number; metadata: Record<string, unknown> } {\n return {\n step_name: this.stepName,\n score_contribution: this.scoreContribution,\n metadata: this.metadata,\n };\n }\n}\n","export class ProviderDocumentLine {\n constructor(\n public readonly id: number | null,\n public readonly vatUid: string | null,\n public readonly rowNumber: number | null,\n public readonly entryIdentifier: string | null,\n public readonly reference: string | null,\n public readonly meta: Record<string, unknown>,\n ) {}\n\n static fromArray(data: unknown): ProviderDocumentLine | null {\n if (data === null || data === undefined || typeof data !== 'object' || Array.isArray(data)) {\n return null;\n }\n const d = data as Record<string, unknown>;\n\n return new ProviderDocumentLine(\n typeof d['id'] === 'number' ? d['id'] : null,\n typeof d['vat_uid'] === 'string' ? d['vat_uid'] : null,\n typeof d['row_number'] === 'number' ? d['row_number'] : null,\n typeof d['entry_identifier'] === 'string' ? d['entry_identifier'] : null,\n typeof d['reference'] === 'string' ? d['reference'] : null,\n d['meta'] !== null && typeof d['meta'] === 'object' && !Array.isArray(d['meta'])\n ? (d['meta'] as Record<string, unknown>)\n : {},\n );\n }\n\n toArray(): Record<string, unknown> {\n return {\n id: this.id,\n vat_uid: this.vatUid,\n row_number: this.rowNumber,\n entry_identifier: this.entryIdentifier,\n reference: this.reference,\n meta: this.meta,\n };\n }\n}\n","import { ProviderDocumentLine } from './ProviderDocumentLine.js';\n\nexport class ProviderDocument {\n constructor(\n public readonly id: number | null,\n public readonly provider: string | null,\n public readonly documentType: string | null,\n public readonly state: string | null,\n public readonly documentDate: Date | null,\n public readonly mime: string | null,\n public readonly size: number | null,\n public readonly hash: string | null,\n public readonly meta: Record<string, unknown>,\n public readonly line: ProviderDocumentLine | null,\n ) {}\n\n static fromArray(data: unknown): ProviderDocument | null {\n if (data === null || data === undefined || typeof data !== 'object' || Array.isArray(data)) {\n return null;\n }\n const d = data as Record<string, unknown>;\n\n const documentDate =\n typeof d['document_date'] === 'string' && d['document_date'] ? new Date(d['document_date']) : null;\n\n return new ProviderDocument(\n typeof d['id'] === 'number' ? d['id'] : null,\n typeof d['provider'] === 'string' ? d['provider'] : null,\n typeof d['document_type'] === 'string' ? d['document_type'] : null,\n typeof d['state'] === 'string' ? d['state'] : null,\n documentDate,\n typeof d['mime'] === 'string' ? d['mime'] : null,\n typeof d['size'] === 'number' ? d['size'] : null,\n typeof d['hash'] === 'string' ? d['hash'] : null,\n d['meta'] !== null && typeof d['meta'] === 'object' && !Array.isArray(d['meta'])\n ? (d['meta'] as Record<string, unknown>)\n : {},\n ProviderDocumentLine.fromArray(d['line']),\n );\n }\n\n toArray(): Record<string, unknown> {\n return {\n id: this.id,\n provider: this.provider,\n document_type: this.documentType,\n state: this.state,\n document_date: this.documentDate?.toISOString() ?? null,\n mime: this.mime,\n size: this.size,\n hash: this.hash,\n meta: this.meta,\n line: this.line?.toArray() ?? null,\n };\n }\n}\n","import { VatState } from '../enums/VatState.js';\nimport { CompanyAddress } from './CompanyAddress.js';\nimport { ScoreBreakdown } from './ScoreBreakdown.js';\nimport { ProviderDocument } from './ProviderDocument.js';\n\nexport class VatResource {\n constructor(\n public readonly uuid: string | undefined,\n public readonly vatUid: string | undefined,\n public readonly state: VatState | undefined,\n public readonly countryCode: string | undefined,\n public readonly companyName: string | undefined,\n public readonly companyAddress: CompanyAddress | undefined,\n public readonly requestedCompanyName: string | undefined,\n public readonly requestedCompanyNameOriginal: string | undefined,\n public readonly requestedInputAddress: Record<string, string | null> | undefined,\n public readonly checkedAt: Date | undefined,\n public readonly score: number | undefined,\n public readonly scoreSource: string | undefined,\n public readonly scoreAttempts: Array<{ source?: string; score?: number }> | undefined,\n public readonly breakdown: ScoreBreakdown[] | undefined,\n public readonly environment: string | undefined,\n public readonly provider: string | undefined,\n public readonly usedProviders: string[] | undefined,\n public readonly providerValid: boolean | null | undefined,\n public readonly providerVatState: string | undefined,\n public readonly providerNote: string | undefined,\n public readonly providerLastCheckedAt: Date | undefined,\n public readonly hasApiError: boolean | null | undefined,\n public readonly errorMessage: string | null | undefined,\n public readonly nextApiRecheckAt: string | null | undefined,\n public readonly providerDocument: ProviderDocument | undefined,\n ) {}\n\n static fromArray(data: Record<string, unknown>): VatResource {\n const str = (key: string): string | undefined => {\n const v = data[key];\n return typeof v === 'string' ? v : undefined;\n };\n\n const stateRaw = str('state');\n const state =\n stateRaw !== undefined && Object.values(VatState).includes(stateRaw as VatState)\n ? (stateRaw as VatState)\n : undefined;\n\n const checkedAt = str('checked_at') ? new Date(data['checked_at'] as string) : undefined;\n const providerLastCheckedAt = str('provider_last_checked_at')\n ? new Date(data['provider_last_checked_at'] as string)\n : undefined;\n const hasApiError =\n data['has_api_error'] === null\n ? null\n : typeof data['has_api_error'] === 'boolean'\n ? data['has_api_error']\n : undefined;\n const errorMessage =\n data['error_message'] === null\n ? null\n : typeof data['error_message'] === 'string'\n ? data['error_message']\n : undefined;\n const nextApiRecheckAt =\n data['next_api_recheck_at'] === null\n ? null\n : typeof data['next_api_recheck_at'] === 'string'\n ? data['next_api_recheck_at']\n : undefined;\n const providerValid =\n data['provider_valid'] === null\n ? null\n : typeof data['provider_valid'] === 'boolean'\n ? data['provider_valid']\n : undefined;\n\n const breakdown = Array.isArray(data['breakdown'])\n ? (data['breakdown'] as Record<string, unknown>[]).map(ScoreBreakdown.fromArray)\n : undefined;\n\n const usedProviders = Array.isArray(data['used_providers'])\n ? (data['used_providers'] as unknown[]).filter((v): v is string => typeof v === 'string')\n : undefined;\n\n const scoreAttempts = Array.isArray(data['score_attempts'])\n ? (data['score_attempts'] as Record<string, unknown>[])\n : undefined;\n\n const requestedInputAddress =\n data['requested_input_address'] !== null &&\n typeof data['requested_input_address'] === 'object' &&\n !Array.isArray(data['requested_input_address'])\n ? (data['requested_input_address'] as Record<string, string | null>)\n : undefined;\n\n return new VatResource(\n str('uuid'),\n str('vat_uid'),\n state,\n str('country_code'),\n str('company_name'),\n CompanyAddress.from(data['company_address']) ?? undefined,\n str('requested_company_name'),\n str('requested_company_name_original'),\n requestedInputAddress,\n checkedAt,\n typeof data['score'] === 'number' ? data['score'] : undefined,\n str('score_source'),\n scoreAttempts,\n breakdown,\n str('environment'),\n str('provider'),\n usedProviders,\n providerValid,\n str('provider_vat_state'),\n str('provider_note'),\n providerLastCheckedAt,\n hasApiError,\n errorMessage,\n nextApiRecheckAt,\n ProviderDocument.fromArray(data['provider_document']) ?? undefined,\n );\n }\n\n getBackendLink(): string | null {\n if (!this.uuid) return null;\n if (this.environment === 'LIVE') {\n return `https://app.taxora.io/vat/history/${this.uuid}`;\n }\n return `https://app.sandbox.taxora.io/vat/history/${this.uuid}`;\n }\n\n isValid(useProviderState = false): boolean {\n if (useProviderState) {\n return this.isProviderValid();\n }\n\n return this.state === VatState.VALID;\n }\n\n isProviderValid(): boolean {\n if (this.providerValid !== undefined && this.providerValid !== null) {\n return this.providerValid;\n }\n\n return this.providerVatState === VatState.VALID;\n }\n\n toArray(): Record<string, unknown> {\n return {\n uuid: this.uuid,\n vat_uid: this.vatUid,\n state: this.state,\n country_code: this.countryCode,\n company_name: this.companyName,\n company_address: this.companyAddress?.toArray() ?? null,\n requested_company_name: this.requestedCompanyName,\n requested_company_name_original: this.requestedCompanyNameOriginal,\n requested_input_address: this.requestedInputAddress ?? null,\n checked_at: this.checkedAt?.toISOString() ?? null,\n score: this.score ?? null,\n score_source: this.scoreSource ?? null,\n score_attempts: this.scoreAttempts ?? null,\n breakdown: this.breakdown?.map((b) => b.toArray()) ?? null,\n environment: this.environment ?? null,\n provider: this.provider ?? null,\n used_providers: this.usedProviders ?? null,\n provider_valid: this.providerValid ?? null,\n provider_vat_state: this.providerVatState ?? null,\n provider_note: this.providerNote ?? null,\n provider_last_checked_at: this.providerLastCheckedAt?.toISOString() ?? null,\n has_api_error: this.hasApiError ?? null,\n error_message: this.errorMessage ?? null,\n next_api_recheck_at: this.nextApiRecheckAt ?? null,\n provider_document: this.providerDocument?.toArray() ?? null,\n };\n }\n}\n","import { VatResource } from './VatResource.js';\n\nexport class VatCollection implements Iterable<VatResource> {\n private readonly items: VatResource[];\n public readonly self: string | undefined;\n\n constructor(items: VatResource[], self?: string) {\n this.items = items;\n this.self = self;\n }\n\n static fromResponse(data: unknown): VatCollection {\n if (Array.isArray(data)) {\n return new VatCollection((data as Record<string, unknown>[]).map(VatResource.fromArray));\n }\n\n if (typeof data === 'object' && data !== null) {\n const obj = data as Record<string, unknown>;\n const items = Array.isArray(obj['data'])\n ? (obj['data'] as Record<string, unknown>[]).map(VatResource.fromArray)\n : [];\n const self = typeof obj['self'] === 'string' ? obj['self'] : undefined;\n return new VatCollection(items, self);\n }\n\n return new VatCollection([]);\n }\n\n [Symbol.iterator](): Iterator<VatResource> {\n return this.items[Symbol.iterator]();\n }\n\n get length(): number {\n return this.items.length;\n }\n\n all(): VatResource[] {\n return [...this.items];\n }\n}\n","export class VatCertificateExport {\n constructor(\n public readonly exportId: string,\n public readonly message?: string,\n ) {}\n\n static fromArray(data: Record<string, unknown>): VatCertificateExport {\n return new VatCertificateExport(\n typeof data['export_id'] === 'string' ? data['export_id'] : '',\n typeof data['message'] === 'string' ? data['message'] : undefined,\n );\n }\n\n toArray(): { export_id: string; message?: string } {\n const result: { export_id: string; message?: string } = { export_id: this.exportId };\n if (this.message !== undefined) result.message = this.message;\n return result;\n }\n}\n","import { TaxoraException } from '../exceptions/TaxoraException.js';\n\ninterface VatValidationAddressInputProps {\n addressLine1?: string;\n addressLine2?: string;\n postalCode?: string;\n city?: string;\n countryCode?: string;\n}\n\nconst ALLOWED_KEYS = new Set(['address_line_1', 'address_line_2', 'postal_code', 'city', 'country_code']);\n\nexport class VatValidationAddressInput {\n public readonly addressLine1?: string;\n public readonly addressLine2?: string;\n public readonly postalCode?: string;\n public readonly city?: string;\n public readonly countryCode?: string;\n\n constructor(props: VatValidationAddressInputProps) {\n if (props.addressLine1 !== undefined && props.addressLine1.length > 255) {\n throw new TaxoraException('addressLine1 must not exceed 255 characters');\n }\n if (props.addressLine2 !== undefined && props.addressLine2.length > 255) {\n throw new TaxoraException('addressLine2 must not exceed 255 characters');\n }\n if (props.countryCode !== undefined && props.countryCode.length !== 2) {\n throw new TaxoraException('countryCode must be exactly 2 characters (ISO 3166-1 alpha-2)');\n }\n\n this.addressLine1 = props.addressLine1;\n this.addressLine2 = props.addressLine2;\n this.postalCode = props.postalCode;\n this.city = props.city;\n this.countryCode = props.countryCode;\n }\n\n static fromArray(data: Record<string, unknown>): VatValidationAddressInput {\n for (const key of Object.keys(data)) {\n if (!ALLOWED_KEYS.has(key)) {\n throw new TaxoraException(`Unsupported field: \"${key}\". Allowed fields: ${[...ALLOWED_KEYS].join(', ')}`);\n }\n }\n\n const getString = (key: string): string | undefined => {\n const val = data[key];\n if (typeof val !== 'string') return undefined;\n const trimmed = val.trim();\n return trimmed || undefined;\n };\n\n const countryCode = getString('country_code');\n\n return new VatValidationAddressInput({\n addressLine1: getString('address_line_1'),\n addressLine2: getString('address_line_2'),\n postalCode: getString('postal_code'),\n city: getString('city'),\n countryCode: countryCode ? countryCode.toUpperCase() : undefined,\n });\n }\n\n toArray(): Record<string, string> {\n const result: Record<string, string> = {};\n if (this.addressLine1 !== undefined) result['address_line_1'] = this.addressLine1;\n if (this.addressLine2 !== undefined) result['address_line_2'] = this.addressLine2;\n if (this.postalCode !== undefined) result['postal_code'] = this.postalCode;\n if (this.city !== undefined) result['city'] = this.city;\n if (this.countryCode !== undefined) result['country_code'] = this.countryCode;\n return result;\n }\n}\n","import { TaxoraException } from './TaxoraException.js';\n\nexport class ValidationException extends TaxoraException {\n public readonly statusCode = 422;\n private readonly errors: Record<string, string[]>;\n\n constructor(message: string, errors: Record<string, string[]>, context: Record<string, unknown> = {}) {\n super(message, context);\n this.name = 'ValidationException';\n this.errors = errors;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n getErrors(): Record<string, string[]> {\n return this.errors;\n }\n}\n","import { VatResource } from '../dto/VatResource.js';\nimport { VatCollection } from '../dto/VatCollection.js';\nimport { VatCertificateExport } from '../dto/VatCertificateExport.js';\nimport { VatValidationAddressInput } from '../dto/VatValidationAddressInput.js';\nimport { type Language } from '../enums/Language.js';\nimport { HttpException } from '../exceptions/HttpException.js';\nimport { ValidationException } from '../exceptions/ValidationException.js';\nimport { TaxoraException } from '../exceptions/TaxoraException.js';\nimport { type HttpClientInterface } from '../http/HttpClientInterface.js';\nimport { type TokenStorageInterface } from '../http/TokenStorageInterface.js';\n\nconst DATE_REGEX = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nexport class VatEndpoint {\n constructor(\n private readonly baseUrl: string,\n private readonly apiKey: string,\n private readonly tokenStorage: TokenStorageInterface,\n private readonly httpClient: HttpClientInterface,\n ) {}\n\n async validate(\n vatUid: string,\n companyName?: string,\n provider?: string,\n addressInput?: VatValidationAddressInput | Record<string, string>,\n ): Promise<VatResource> {\n const body: Record<string, unknown> = { vat_uid: vatUid };\n if (companyName) body['company_name'] = companyName;\n if (provider) body['source'] = provider;\n\n if (addressInput) {\n body['address_input'] = addressInput instanceof VatValidationAddressInput ? addressInput.toArray() : addressInput;\n }\n\n return this.validateWithGatewayRetry(body, 2);\n }\n\n private async validateWithGatewayRetry(body: Record<string, unknown>, attemptsLeft: number): Promise<VatResource> {\n const response = await this.sendRequest('POST', `${this.baseUrl}/vat/validate`, body);\n\n if (response.status === 504) {\n if (attemptsLeft <= 1) {\n const text = await response.text();\n throw new HttpException('VAT validation timed out after multiple attempts', 504, text);\n }\n return this.validateWithGatewayRetry(body, attemptsLeft - 1);\n }\n\n const data = await this.parseJsonResponse(response);\n return VatResource.fromArray(data);\n }\n\n async validateMultiple(vatUids: string[], companyNames?: string[], provider?: string): Promise<VatCollection> {\n const body: Record<string, unknown> = { vat_uids: vatUids };\n if (companyNames) body['company_names'] = companyNames;\n if (provider) body['source'] = provider;\n\n const response = await this.sendRequest('POST', `${this.baseUrl}/vat/validate/multiple`, body);\n const data = await this.parseJsonResponse(response);\n\n return VatCollection.fromResponse(data);\n }\n\n async validateSchema(vatUid: string): Promise<Record<string, unknown>> {\n const body: Record<string, unknown> = { vat_uid: vatUid };\n const response = await this.sendRequest('POST', `${this.baseUrl}/vat/validate/schema`, body);\n return this.parseJsonResponse(response);\n }\n\n async state(vatUid: string): Promise<VatResource> {\n const response = await this.sendRequest('GET', `${this.baseUrl}/vat/state/${encodeURIComponent(vatUid)}`);\n const data = await this.parseJsonResponse(response);\n return VatResource.fromArray(data);\n }\n\n async history(vatUid?: string): Promise<VatCollection> {\n let url = `${this.baseUrl}/vat/history`;\n if (vatUid) url += `?vat_uid=${encodeURIComponent(vatUid)}`;\n\n const response = await this.sendRequest('GET', url);\n const data = await this.parseJsonResponse(response);\n return VatCollection.fromResponse(data);\n }\n\n async search(term?: string, perPage?: number): Promise<VatCollection> {\n const params = new URLSearchParams();\n if (term) params.set('term', term);\n if (perPage !== undefined) params.set('per_page', String(perPage));\n\n const queryString = params.toString();\n const url = `${this.baseUrl}/vat/search${queryString ? `?${queryString}` : ''}`;\n\n const response = await this.sendRequest('GET', url);\n const data = await this.parseJsonResponse(response);\n return VatCollection.fromResponse(data);\n }\n\n async certificate(uuid: string, lang?: Language): Promise<Uint8Array> {\n let url = `${this.baseUrl}/vat/certificate/${encodeURIComponent(uuid)}`;\n if (lang) url += `?lang=${lang}`;\n\n const response = await this.sendBinaryRequest('GET', url);\n const buffer = await response.arrayBuffer();\n return new Uint8Array(buffer);\n }\n\n async certificatesBulkExport(\n fromDate: Date | string,\n toDate: Date | string,\n countries?: string[],\n lang?: Language,\n ): Promise<VatCertificateExport> {\n return this.exportRequest(`${this.baseUrl}/vat/certificates/bulk-export`, fromDate, toDate, countries, lang);\n }\n\n async certificatesListExport(\n fromDate: Date | string,\n toDate: Date | string,\n countries?: string[],\n lang?: Language,\n ): Promise<VatCertificateExport> {\n return this.exportRequest(`${this.baseUrl}/vat/certificates/list-export`, fromDate, toDate, countries, lang);\n }\n\n private async exportRequest(\n url: string,\n fromDate: Date | string,\n toDate: Date | string,\n countries?: string[],\n lang?: Language,\n ): Promise<VatCertificateExport> {\n const from = this.formatDate(fromDate);\n const to = this.formatDate(toDate);\n\n const body: Record<string, unknown> = { from_date: from, to_date: to };\n if (countries && countries.length > 0) body['countries'] = countries;\n if (lang) body['lang'] = lang;\n\n const response = await this.sendRequest('POST', url, body);\n const data = await this.parseJsonResponse(response, [200, 202]);\n\n const exportObj = VatCertificateExport.fromArray(data);\n if (!exportObj.exportId) {\n throw new TaxoraException('Export response is missing export_id');\n }\n\n return exportObj;\n }\n\n async downloadBulkExport(exportId: string): Promise<Uint8Array> {\n const url = `${this.baseUrl}/vat/certificates/bulk-export/${encodeURIComponent(exportId)}/download`;\n const response = await this.sendBinaryRequest('GET', url);\n const buffer = await response.arrayBuffer();\n return new Uint8Array(buffer);\n }\n\n private buildHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n };\n const token = this.tokenStorage.get();\n if (token) {\n headers['Authorization'] = `Bearer ${token.accessToken}`;\n }\n return headers;\n }\n\n private async sendRequest(method: string, url: string, body?: Record<string, unknown>): Promise<Response> {\n const options: RequestInit = { headers: this.buildHeaders() };\n if (body) options.body = JSON.stringify(body);\n\n return this.httpClient.request(method, url, options);\n }\n\n private async sendBinaryRequest(method: string, url: string): Promise<Response> {\n const headers = this.buildHeaders();\n delete headers['Content-Type'];\n\n const response = await this.httpClient.request(method, url, { headers });\n if (!response.ok) {\n const text = await response.text();\n throw new HttpException(`HTTP error ${response.status}`, response.status, text);\n }\n return response;\n }\n\n private async parseJsonResponse(\n response: Response,\n acceptedStatuses: number[] = [200],\n ): Promise<Record<string, unknown>> {\n const responseText = await response.text();\n\n if (response.status === 422) {\n let errors: Record<string, string[]> = {};\n try {\n const parsed = JSON.parse(responseText) as Record<string, unknown>;\n if (parsed['errors'] !== null && typeof parsed['errors'] === 'object' && !Array.isArray(parsed['errors'])) {\n errors = parsed['errors'] as Record<string, string[]>;\n }\n } catch {\n // ignore parse errors\n }\n throw new ValidationException('Validation failed', errors);\n }\n\n if (!response.ok && !acceptedStatuses.includes(response.status)) {\n throw new HttpException(`HTTP error ${response.status}`, response.status, responseText);\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(responseText);\n } catch {\n throw new HttpException('Invalid JSON response', 0, responseText);\n }\n\n if (typeof parsed !== 'object' || parsed === null) {\n throw new HttpException('Unexpected response format', 0, responseText);\n }\n\n const obj = parsed as Record<string, unknown>;\n if (obj['data'] !== undefined && (typeof obj['data'] === 'object' || Array.isArray(obj['data']))) {\n return obj['data'] as Record<string, unknown>;\n }\n\n return obj;\n }\n\n private formatDate(date: Date | string): string {\n if (date instanceof Date) {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n\n if (!DATE_REGEX.test(date)) {\n throw new TaxoraException(`Invalid date format: \"${date}\". Expected YYYY-MM-DD.`);\n }\n\n return date;\n }\n}\n","export const Environment = {\n SANDBOX: 'sandbox',\n PRODUCTION: 'production',\n} as const;\n\nexport type Environment = (typeof Environment)[keyof typeof Environment];\n\nconst BASE_URLS: Record<Environment, string> = {\n [Environment.SANDBOX]: 'https://sandbox.taxora.io/v1',\n [Environment.PRODUCTION]: 'https://api.taxora.io/v1',\n};\n\nexport function getBaseUrl(environment: Environment): string {\n return BASE_URLS[environment];\n}\n","import { type HttpClientInterface } from './HttpClientInterface.js';\n\nexport class FetchHttpClient implements HttpClientInterface {\n async request(method: string, url: string, options: RequestInit = {}): Promise<Response> {\n return fetch(url, { ...options, method });\n }\n}\n","import { type Token } from '../dto/Token.js';\nimport { type TokenStorageInterface } from './TokenStorageInterface.js';\n\nexport class InMemoryTokenStorage implements TokenStorageInterface {\n private token: Token | null = null;\n\n get(): Token | null {\n return this.token;\n }\n\n set(token: Token): void {\n this.token = token;\n }\n\n clear(): void {\n this.token = null;\n }\n}\n","import { type Token } from '../dto/Token.js';\nimport { AuthenticationException } from '../exceptions/AuthenticationException.js';\nimport { type HttpClientInterface } from './HttpClientInterface.js';\nimport { type TokenStorageInterface } from './TokenStorageInterface.js';\n\nconst AUTH_PATH_PATTERN = /\\/auth\\//;\n\n/**\n * HTTP client wrapper that handles:\n * - Preemptive token refresh when the stored token is expired\n * - Automatic retry with a fresh token on 401 responses\n * - Passthrough for /auth/ routes (no interception)\n */\nexport class AuthRetryHttpClient implements HttpClientInterface {\n constructor(\n private readonly inner: HttpClientInterface,\n private readonly tokenStorage: TokenStorageInterface,\n private readonly refreshFn: () => Promise<Token>,\n ) {}\n\n async request(method: string, url: string, options?: RequestInit): Promise<Response> {\n // Auth routes bypass all retry logic\n if (AUTH_PATH_PATTERN.test(url)) {\n return this.inner.request(method, url, options);\n }\n\n // Preemptive refresh if token is expired\n const currentToken = this.tokenStorage.get();\n if (currentToken?.isExpired()) {\n await this.refreshFn();\n }\n\n // Build request with potentially refreshed token\n const updatedOptions = this.injectAuthHeader(options);\n const response = await this.inner.request(method, url, updatedOptions);\n\n // 401: refresh once and retry\n if (response.status === 401) {\n await this.refreshFn();\n const retryOptions = this.injectAuthHeader(options);\n const retryResponse = await this.inner.request(method, url, retryOptions);\n\n if (retryResponse.status === 401) {\n const body = await retryResponse.text();\n throw new AuthenticationException('Authentication failed after token refresh', { status: 401, body });\n }\n\n return retryResponse;\n }\n\n return response;\n }\n\n private injectAuthHeader(options?: RequestInit): RequestInit {\n const token = this.tokenStorage.get();\n if (!token) return options ?? {};\n\n const existing = options?.headers ?? {};\n const headers = { ...(existing as Record<string, string>), Authorization: `Bearer ${token.accessToken}` };\n return { ...(options ?? {}), headers };\n }\n}\n","import { AuthEndpoint } from '../endpoints/AuthEndpoint.js';\nimport { CompanyEndpoint } from '../endpoints/CompanyEndpoint.js';\nimport { VatEndpoint } from '../endpoints/VatEndpoint.js';\nimport { Environment, getBaseUrl } from '../enums/Environment.js';\nimport { type HttpClientInterface } from '../http/HttpClientInterface.js';\nimport { FetchHttpClient } from '../http/FetchHttpClient.js';\nimport { InMemoryTokenStorage } from '../http/InMemoryTokenStorage.js';\nimport { type TokenStorageInterface } from '../http/TokenStorageInterface.js';\nimport { AuthRetryHttpClient } from '../http/AuthRetryHttpClient.js';\n\nexport interface TaxoraClientOptions {\n apiKey: string;\n environment?: Environment;\n tokenStorage?: TokenStorageInterface;\n httpClient?: HttpClientInterface;\n}\n\nexport class TaxoraClient {\n public readonly auth: AuthEndpoint;\n public readonly vat: VatEndpoint;\n public readonly company: CompanyEndpoint;\n public readonly baseUrl: string;\n\n constructor(options: TaxoraClientOptions) {\n const environment = options.environment ?? Environment.SANDBOX;\n const tokenStorage = options.tokenStorage ?? new InMemoryTokenStorage();\n const httpClient = options.httpClient ?? new FetchHttpClient();\n\n this.baseUrl = getBaseUrl(environment);\n\n // Auth endpoint uses the raw HTTP client — no retry interception for auth routes\n this.auth = new AuthEndpoint(this.baseUrl, options.apiKey, tokenStorage, httpClient);\n\n // All other endpoints use the retry-capable client that handles 401 auto-refresh\n const retryClient = new AuthRetryHttpClient(httpClient, tokenStorage, () => this.auth.refresh());\n\n this.vat = new VatEndpoint(this.baseUrl, options.apiKey, tokenStorage, retryClient);\n this.company = new CompanyEndpoint(this.baseUrl, options.apiKey, tokenStorage, retryClient);\n }\n}\n","import { TaxoraClient, type TaxoraClientOptions } from './TaxoraClient.js';\n\nexport class TaxoraClientFactory {\n static create(options: TaxoraClientOptions): TaxoraClient {\n return new TaxoraClient(options);\n }\n}\n","export const ApiVersion = {\n V1: 'v1',\n} as const;\n\nexport type ApiVersion = (typeof ApiVersion)[keyof typeof ApiVersion];\n","export const Language = {\n ENGLISH: 'en',\n GERMAN: 'de',\n} as const;\n\nexport type Language = (typeof Language)[keyof typeof Language];\n"],"mappings":";AAAA,SAAS,gBAAgB;;;ACAlB,IAAM,QAAN,MAAM,OAAM;AAAA,EACjB,YACkB,aACA,WACA,WAChB;AAHgB;AACA;AACA;AAAA,EACf;AAAA,EAHe;AAAA,EACA;AAAA,EACA;AAAA,EAGlB,UAAU,gBAAgB,IAAa;AACrC,WAAO,IAAI,KAAK,KAAK,IAAI,IAAI,gBAAgB,GAAI,KAAK,KAAK;AAAA,EAC7D;AAAA,EAEA,OAAO,UAAU,MAAsC;AACrD,QAAI,cAAc,OAAO,KAAK,cAAc,KAAK,EAAE;AACnD,QAAI,YAAY,WAAW,SAAS,GAAG;AACrC,oBAAc,YAAY,MAAM,CAAC;AAAA,IACnC;AAEA,UAAM,YAAY,OAAO,KAAK,YAAY,KAAK,QAAQ;AACvD,UAAM,YAAY,OAAO,KAAK,YAAY,MAAM,WAAW,KAAK,YAAY,IAAI;AAChF,UAAM,YAAY,IAAI,KAAK,KAAK,IAAI,IAAI,YAAY,GAAI;AAExD,WAAO,IAAI,OAAM,aAAa,WAAW,SAAS;AAAA,EACpD;AAAA,EAEA,UAA4E;AAC1E,WAAO;AAAA,MACL,cAAc,KAAK;AAAA,MACnB,YAAY,KAAK;AAAA,MACjB,YAAY,KAAK,UAAU,YAAY;AAAA,IACzC;AAAA,EACF;AACF;;;AC/BO,IAAM,kBAAkB;AAAA,EAC7B,OAAO;AAAA,EACP,WAAW;AACb;;;ACHO,IAAM,kBAAN,cAA8B,MAAM;AAAA,EACzB;AAAA,EAEhB,YAAY,SAAiB,UAAmC,CAAC,GAAG;AAClE,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,UAAU;AACf,WAAO,eAAe,MAAM,WAAW,SAAS;AAAA,EAClD;AACF;;;ACPO,IAAM,0BAAN,cAAsC,gBAAgB;AAAA,EAC3C,aAAa;AAAA,EAE7B,YAAY,SAAiB,UAAmC,CAAC,GAAG;AAClE,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AACZ,WAAO,eAAe,MAAM,WAAW,SAAS;AAAA,EAClD;AACF;;;ACRO,IAAM,gBAAN,cAA4B,gBAAgB;AAAA,EACjC;AAAA,EACA;AAAA,EAEhB,YAAY,SAAiB,YAAoB,cAAsB,UAAmC,CAAC,GAAG;AAC5G,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AACZ,SAAK,aAAa;AAClB,SAAK,eAAe;AACpB,WAAO,eAAe,MAAM,WAAW,SAAS;AAAA,EAClD;AAAA,EAEA,gBAAwB;AACtB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,kBAA0B;AACxB,WAAO,KAAK;AAAA,EACd;AACF;;;ALbO,IAAM,eAAN,MAAmB;AAAA,EACxB,YACmB,SACA,QACA,cACA,YACjB;AAJiB;AACA;AACA;AACA;AAAA,EAChB;AAAA,EAJgB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGnB,MAAM,MACJ,YACA,UACA,QACA,kBAAmC,gBAAgB,OACnC;AAChB,UAAM,aAAa,UAAU,SAAS;AAEtC,UAAM,OAA+B;AAAA,MACnC,YAAY;AAAA,MACZ;AAAA,MACA,aAAa;AAAA,IACf;AAEA,QAAI,oBAAoB,gBAAgB,WAAW;AACjD,WAAK,WAAW,IAAI;AAAA,IACtB,OAAO;AACL,WAAK,OAAO,IAAI;AAAA,IAClB;AAEA,UAAM,WAAW,MAAM,KAAK,WAAW,QAAQ,QAAQ,GAAG,KAAK,OAAO,eAAe;AAAA,MACnF,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,aAAa,KAAK;AAAA,MACpB;AAAA,MACA,MAAM,KAAK,UAAU,IAAI;AAAA,IAC3B,CAAC;AAED,UAAM,eAAe,MAAM,SAAS,KAAK;AAEzC,QAAI,SAAS,WAAW,KAAK;AAC3B,YAAM,IAAI,wBAAwB,8CAA8C;AAAA,QAC9E,QAAQ;AAAA,QACR,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AAEA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,cAAc,cAAc,SAAS,MAAM,IAAI,SAAS,QAAQ,YAAY;AAAA,IACxF;AAEA,UAAM,OAAO,KAAK,cAAc,YAAY;AAC5C,UAAM,QAAQ,MAAM,UAAU,IAAI;AAClC,SAAK,aAAa,IAAI,KAAK;AAC3B,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,kBAAkB,UAAkB,UAAkB,QAAiC;AAC3F,WAAO,KAAK,MAAM,UAAU,UAAU,QAAQ,gBAAgB,SAAS;AAAA,EACzE;AAAA,EAEA,MAAM,UAA0B;AAC9B,UAAM,cAAc,KAAK,aAAa,IAAI;AAC1C,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,MAChB,aAAa,KAAK;AAAA,IACpB;AAEA,QAAI,aAAa;AACf,cAAQ,eAAe,IAAI,UAAU,YAAY,WAAW;AAAA,IAC9D;AAEA,UAAM,WAAW,MAAM,KAAK,WAAW,QAAQ,QAAQ,GAAG,KAAK,OAAO,iBAAiB,EAAE,QAAQ,CAAC;AAClG,UAAM,eAAe,MAAM,SAAS,KAAK;AAEzC,QAAI,SAAS,WAAW,KAAK;AAC3B,YAAM,IAAI,wBAAwB,sCAAsC,EAAE,QAAQ,KAAK,MAAM,aAAa,CAAC;AAAA,IAC7G;AAEA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,cAAc,cAAc,SAAS,MAAM,IAAI,SAAS,QAAQ,YAAY;AAAA,IACxF;AAEA,UAAM,OAAO,KAAK,cAAc,YAAY;AAC5C,UAAM,QAAQ,MAAM,UAAU,IAAI;AAClC,SAAK,aAAa,IAAI,KAAK;AAC3B,WAAO;AAAA,EACT;AAAA,EAEQ,cAAc,cAA+C;AACnE,QAAI;AACJ,QAAI;AACF,eAAS,KAAK,MAAM,YAAY;AAAA,IAClC,QAAQ;AACN,YAAM,IAAI,cAAc,yBAAyB,GAAG,YAAY;AAAA,IAClE;AAEA,QAAI,OAAO,WAAW,YAAY,WAAW,MAAM;AACjD,YAAM,IAAI,cAAc,8BAA8B,GAAG,YAAY;AAAA,IACvE;AAEA,UAAM,MAAM;AACZ,QAAI,IAAI,MAAM,MAAM,UAAa,OAAO,IAAI,MAAM,MAAM,YAAY,IAAI,MAAM,MAAM,MAAM;AACxF,aAAO,IAAI,MAAM;AAAA,IACnB;AAEA,WAAO;AAAA,EACT;AACF;;;AM1FO,SAAS,yBAAyB,MAAgD;AACvF,QAAM,eAAe,OAAO,KAAK,gBAAgB,MAAM,WAAW,KAAK,gBAAgB,IAAI;AAC3F,QAAM,eAAe,OAAO,KAAK,gBAAgB,MAAM,WAAW,KAAK,gBAAgB,IAAI;AAC3F,QAAM,kBAAkB,OAAO,KAAK,YAAY,MAAM,WAAW,KAAK,YAAY,IAAI;AAEtF,SAAO;AAAA,IACL,GAAG;AAAA,IACH,gBAAgB,gBAAgB,mBAAmB;AAAA,IACnD,gBAAgB,gBAAgB,mBAAmB;AAAA,EACrD;AACF;;;AC7BO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YACmB,SACA,QACA,cACA,YACjB;AAJiB;AACA;AACA;AACA;AAAA,EAChB;AAAA,EAJgB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGnB,MAAM,MAAgC;AACpC,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,MAChB,aAAa,KAAK;AAAA,IACpB;AAEA,UAAM,QAAQ,KAAK,aAAa,IAAI;AACpC,QAAI,OAAO;AACT,cAAQ,eAAe,IAAI,UAAU,MAAM,WAAW;AAAA,IACxD;AAEA,UAAM,WAAW,MAAM,KAAK,WAAW,QAAQ,OAAO,GAAG,KAAK,OAAO,YAAY,EAAE,QAAQ,CAAC;AAC5F,UAAM,eAAe,MAAM,SAAS,KAAK;AAEzC,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,cAAc,cAAc,SAAS,MAAM,IAAI,SAAS,QAAQ,YAAY;AAAA,IACxF;AAEA,QAAI;AACJ,QAAI;AACF,eAAS,KAAK,MAAM,YAAY;AAAA,IAClC,QAAQ;AACN,YAAM,IAAI,cAAc,yBAAyB,GAAG,YAAY;AAAA,IAClE;AAEA,QAAI,OAAO,WAAW,YAAY,WAAW,MAAM;AACjD,YAAM,IAAI,cAAc,8BAA8B,GAAG,YAAY;AAAA,IACvE;AAEA,UAAM,MAAM;AACZ,QAAI,IAAI,MAAM,MAAM,UAAa,OAAO,IAAI,MAAM,MAAM,YAAY,IAAI,MAAM,MAAM,MAAM;AACxF,aAAO,yBAAyB,IAAI,MAAM,CAA4B;AAAA,IACxE;AAEA,WAAO,yBAAyB,GAAG;AAAA,EACrC;AACF;;;ACjDO,IAAM,WAAW;AAAA,EACtB,OAAO;AAAA,EACP,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AACX;AAIO,SAAS,qBAAiC;AAC/C,SAAO,CAAC,SAAS,SAAS,SAAS,KAAK;AAC1C;AAEA,IAAM,eAAyC;AAAA,EAC7C,CAAC,SAAS,KAAK,GAAG;AAAA,EAClB,CAAC,SAAS,OAAO,GAAG;AAAA,EACpB,CAAC,SAAS,KAAK,GAAG;AAAA,EAClB,CAAC,SAAS,OAAO,GAAG;AACtB;AAEO,SAAS,iBAAiB,OAAyB;AACxD,SAAO,aAAa,KAAK;AAC3B;;;ACXO,IAAM,iBAAN,MAAM,gBAAe;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEhB,YAAY,OAA4B;AACtC,SAAK,OAAO,MAAM,QAAQ;AAC1B,SAAK,SAAS,MAAM,UAAU;AAC9B,SAAK,aAAa,MAAM,cAAc;AACtC,SAAK,OAAO,MAAM,QAAQ;AAC1B,SAAK,QAAQ,MAAM,SAAS;AAC5B,SAAK,UAAU,MAAM,WAAW;AAChC,SAAK,MAAM,MAAM,OAAO;AACxB,SAAK,cAAc,MAAM,eAAe,KAAK,oBAAoB;AAAA,EACnE;AAAA,EAEQ,sBAAqC;AAC3C,UAAM,QAAQ,CAAC,KAAK,QAAQ,KAAK,YAAY,KAAK,MAAM,KAAK,OAAO,EAAE,OAAO,OAAO;AACpF,WAAO,MAAM,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI;AAAA,EAC/C;AAAA,EAEA,OAAO,KAAK,OAAuC;AACjD,QAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAElD,QAAI,OAAO,UAAU,UAAU;AAC7B,YAAM,UAAU,MAAM,KAAK;AAC3B,UAAI,CAAC,QAAS,QAAO;AAErB,UAAI;AACF,cAAM,SAAkB,KAAK,MAAM,OAAO;AAC1C,YAAI,OAAO,WAAW,YAAY,WAAW,QAAQ,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC3E,iBAAO,gBAAe,UAAU,QAAmC,OAAO;AAAA,QAC5E;AAAA,MACF,QAAQ;AAAA,MAER;AACA,aAAO,IAAI,gBAAe,EAAE,KAAK,QAAQ,CAAC;AAAA,IAC5C;AAEA,QAAI,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AACtD,aAAO,gBAAe,UAAU,OAAkC,IAAI;AAAA,IACxE;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,UAAU,MAA+B,KAAoC;AAClF,UAAM,MAAM,CAAC,QAA+B;AAC1C,YAAM,MAAM,KAAK,GAAG,KAAK,KAAK,IAAI,QAAQ,MAAM,GAAG,CAAC;AACpD,aAAO,OAAO,QAAQ,YAAY,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI;AAAA,IAC9D;AAEA,WAAO,IAAI,gBAAe;AAAA,MACxB,aAAa,IAAI,cAAc;AAAA,MAC/B,MAAM,IAAI,MAAM;AAAA,MAChB,QAAQ,IAAI,QAAQ;AAAA,MACpB,YAAY,IAAI,aAAa,KAAK,IAAI,YAAY;AAAA,MAClD,MAAM,IAAI,MAAM;AAAA,MAChB,OAAO,IAAI,OAAO;AAAA,MAClB,SAAS,IAAI,SAAS;AAAA,MACtB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,UAAyC;AACvC,WAAO;AAAA,MACL,cAAc,KAAK;AAAA,MACnB,MAAM,KAAK;AAAA,MACX,QAAQ,KAAK;AAAA,MACb,aAAa,KAAK;AAAA,MAClB,MAAM,KAAK;AAAA,MACX,OAAO,KAAK;AAAA,MACZ,SAAS,KAAK;AAAA,IAChB;AAAA,EACF;AAAA,EAEA,WAAmB;AACjB,WAAO,KAAK,eAAe,KAAK,OAAO;AAAA,EACzC;AACF;;;AC/FO,IAAM,iBAAN,MAAM,gBAAe;AAAA,EAC1B,YACkB,UACA,mBACA,UAChB;AAHgB;AACA;AACA;AAAA,EACf;AAAA,EAHe;AAAA,EACA;AAAA,EACA;AAAA,EAGlB,OAAO,UAAU,MAA+C;AAC9D,WAAO,IAAI;AAAA,MACT,OAAO,KAAK,WAAW,MAAM,WAAW,KAAK,WAAW,IAAI;AAAA,MAC5D,OAAO,KAAK,oBAAoB,MAAM,WAAW,KAAK,oBAAoB,IAAI;AAAA,MAC9E,KAAK,UAAU,MAAM,QAAQ,OAAO,KAAK,UAAU,MAAM,YAAY,CAAC,MAAM,QAAQ,KAAK,UAAU,CAAC,IAC/F,KAAK,UAAU,IAChB,CAAC;AAAA,IACP;AAAA,EACF;AAAA,EAEA,UAAgG;AAC9F,WAAO;AAAA,MACL,WAAW,KAAK;AAAA,MAChB,oBAAoB,KAAK;AAAA,MACzB,UAAU,KAAK;AAAA,IACjB;AAAA,EACF;AACF;;;ACxBO,IAAM,uBAAN,MAAM,sBAAqB;AAAA,EAChC,YACkB,IACA,QACA,WACA,iBACA,WACA,MAChB;AANgB;AACA;AACA;AACA;AACA;AACA;AAAA,EACf;AAAA,EANe;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGlB,OAAO,UAAU,MAA4C;AAC3D,QAAI,SAAS,QAAQ,SAAS,UAAa,OAAO,SAAS,YAAY,MAAM,QAAQ,IAAI,GAAG;AAC1F,aAAO;AAAA,IACT;AACA,UAAM,IAAI;AAEV,WAAO,IAAI;AAAA,MACT,OAAO,EAAE,IAAI,MAAM,WAAW,EAAE,IAAI,IAAI;AAAA,MACxC,OAAO,EAAE,SAAS,MAAM,WAAW,EAAE,SAAS,IAAI;AAAA,MAClD,OAAO,EAAE,YAAY,MAAM,WAAW,EAAE,YAAY,IAAI;AAAA,MACxD,OAAO,EAAE,kBAAkB,MAAM,WAAW,EAAE,kBAAkB,IAAI;AAAA,MACpE,OAAO,EAAE,WAAW,MAAM,WAAW,EAAE,WAAW,IAAI;AAAA,MACtD,EAAE,MAAM,MAAM,QAAQ,OAAO,EAAE,MAAM,MAAM,YAAY,CAAC,MAAM,QAAQ,EAAE,MAAM,CAAC,IAC1E,EAAE,MAAM,IACT,CAAC;AAAA,IACP;AAAA,EACF;AAAA,EAEA,UAAmC;AACjC,WAAO;AAAA,MACL,IAAI,KAAK;AAAA,MACT,SAAS,KAAK;AAAA,MACd,YAAY,KAAK;AAAA,MACjB,kBAAkB,KAAK;AAAA,MACvB,WAAW,KAAK;AAAA,MAChB,MAAM,KAAK;AAAA,IACb;AAAA,EACF;AACF;;;ACpCO,IAAM,mBAAN,MAAM,kBAAiB;AAAA,EAC5B,YACkB,IACA,UACA,cACA,OACA,cACA,MACA,MACA,MACA,MACA,MAChB;AAVgB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA,EACf;AAAA,EAVe;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGlB,OAAO,UAAU,MAAwC;AACvD,QAAI,SAAS,QAAQ,SAAS,UAAa,OAAO,SAAS,YAAY,MAAM,QAAQ,IAAI,GAAG;AAC1F,aAAO;AAAA,IACT;AACA,UAAM,IAAI;AAEV,UAAM,eACJ,OAAO,EAAE,eAAe,MAAM,YAAY,EAAE,eAAe,IAAI,IAAI,KAAK,EAAE,eAAe,CAAC,IAAI;AAEhG,WAAO,IAAI;AAAA,MACT,OAAO,EAAE,IAAI,MAAM,WAAW,EAAE,IAAI,IAAI;AAAA,MACxC,OAAO,EAAE,UAAU,MAAM,WAAW,EAAE,UAAU,IAAI;AAAA,MACpD,OAAO,EAAE,eAAe,MAAM,WAAW,EAAE,eAAe,IAAI;AAAA,MAC9D,OAAO,EAAE,OAAO,MAAM,WAAW,EAAE,OAAO,IAAI;AAAA,MAC9C;AAAA,MACA,OAAO,EAAE,MAAM,MAAM,WAAW,EAAE,MAAM,IAAI;AAAA,MAC5C,OAAO,EAAE,MAAM,MAAM,WAAW,EAAE,MAAM,IAAI;AAAA,MAC5C,OAAO,EAAE,MAAM,MAAM,WAAW,EAAE,MAAM,IAAI;AAAA,MAC5C,EAAE,MAAM,MAAM,QAAQ,OAAO,EAAE,MAAM,MAAM,YAAY,CAAC,MAAM,QAAQ,EAAE,MAAM,CAAC,IAC1E,EAAE,MAAM,IACT,CAAC;AAAA,MACL,qBAAqB,UAAU,EAAE,MAAM,CAAC;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,UAAmC;AACjC,WAAO;AAAA,MACL,IAAI,KAAK;AAAA,MACT,UAAU,KAAK;AAAA,MACf,eAAe,KAAK;AAAA,MACpB,OAAO,KAAK;AAAA,MACZ,eAAe,KAAK,cAAc,YAAY,KAAK;AAAA,MACnD,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,MAAM,KAAK,MAAM,QAAQ,KAAK;AAAA,IAChC;AAAA,EACF;AACF;;;AClDO,IAAM,cAAN,MAAM,aAAY;AAAA,EACvB,YACkB,MACA,QACA,OACA,aACA,aACA,gBACA,sBACA,8BACA,uBACA,WACA,OACA,aACA,eACA,WACA,aACA,UACA,eACA,eACA,kBACA,cACA,uBACA,aACA,cACA,kBACA,kBAChB;AAzBgB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA,EACf;AAAA,EAzBe;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGlB,OAAO,UAAU,MAA4C;AAC3D,UAAM,MAAM,CAAC,QAAoC;AAC/C,YAAM,IAAI,KAAK,GAAG;AAClB,aAAO,OAAO,MAAM,WAAW,IAAI;AAAA,IACrC;AAEA,UAAM,WAAW,IAAI,OAAO;AAC5B,UAAM,QACJ,aAAa,UAAa,OAAO,OAAO,QAAQ,EAAE,SAAS,QAAoB,IAC1E,WACD;AAEN,UAAM,YAAY,IAAI,YAAY,IAAI,IAAI,KAAK,KAAK,YAAY,CAAW,IAAI;AAC/E,UAAM,wBAAwB,IAAI,0BAA0B,IACxD,IAAI,KAAK,KAAK,0BAA0B,CAAW,IACnD;AACJ,UAAM,cACJ,KAAK,eAAe,MAAM,OACtB,OACA,OAAO,KAAK,eAAe,MAAM,YAC/B,KAAK,eAAe,IACpB;AACR,UAAM,eACJ,KAAK,eAAe,MAAM,OACtB,OACA,OAAO,KAAK,eAAe,MAAM,WAC/B,KAAK,eAAe,IACpB;AACR,UAAM,mBACJ,KAAK,qBAAqB,MAAM,OAC5B,OACA,OAAO,KAAK,qBAAqB,MAAM,WACrC,KAAK,qBAAqB,IAC1B;AACR,UAAM,gBACJ,KAAK,gBAAgB,MAAM,OACvB,OACA,OAAO,KAAK,gBAAgB,MAAM,YAChC,KAAK,gBAAgB,IACrB;AAER,UAAM,YAAY,MAAM,QAAQ,KAAK,WAAW,CAAC,IAC5C,KAAK,WAAW,EAAgC,IAAI,eAAe,SAAS,IAC7E;AAEJ,UAAM,gBAAgB,MAAM,QAAQ,KAAK,gBAAgB,CAAC,IACrD,KAAK,gBAAgB,EAAgB,OAAO,CAAC,MAAmB,OAAO,MAAM,QAAQ,IACtF;AAEJ,UAAM,gBAAgB,MAAM,QAAQ,KAAK,gBAAgB,CAAC,IACrD,KAAK,gBAAgB,IACtB;AAEJ,UAAM,wBACJ,KAAK,yBAAyB,MAAM,QACpC,OAAO,KAAK,yBAAyB,MAAM,YAC3C,CAAC,MAAM,QAAQ,KAAK,yBAAyB,CAAC,IACzC,KAAK,yBAAyB,IAC/B;AAEN,WAAO,IAAI;AAAA,MACT,IAAI,MAAM;AAAA,MACV,IAAI,SAAS;AAAA,MACb;AAAA,MACA,IAAI,cAAc;AAAA,MAClB,IAAI,cAAc;AAAA,MAClB,eAAe,KAAK,KAAK,iBAAiB,CAAC,KAAK;AAAA,MAChD,IAAI,wBAAwB;AAAA,MAC5B,IAAI,iCAAiC;AAAA,MACrC;AAAA,MACA;AAAA,MACA,OAAO,KAAK,OAAO,MAAM,WAAW,KAAK,OAAO,IAAI;AAAA,MACpD,IAAI,cAAc;AAAA,MAClB;AAAA,MACA;AAAA,MACA,IAAI,aAAa;AAAA,MACjB,IAAI,UAAU;AAAA,MACd;AAAA,MACA;AAAA,MACA,IAAI,oBAAoB;AAAA,MACxB,IAAI,eAAe;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,iBAAiB,UAAU,KAAK,mBAAmB,CAAC,KAAK;AAAA,IAC3D;AAAA,EACF;AAAA,EAEA,iBAAgC;AAC9B,QAAI,CAAC,KAAK,KAAM,QAAO;AACvB,QAAI,KAAK,gBAAgB,QAAQ;AAC/B,aAAO,qCAAqC,KAAK,IAAI;AAAA,IACvD;AACA,WAAO,6CAA6C,KAAK,IAAI;AAAA,EAC/D;AAAA,EAEA,QAAQ,mBAAmB,OAAgB;AACzC,QAAI,kBAAkB;AACpB,aAAO,KAAK,gBAAgB;AAAA,IAC9B;AAEA,WAAO,KAAK,UAAU,SAAS;AAAA,EACjC;AAAA,EAEA,kBAA2B;AACzB,QAAI,KAAK,kBAAkB,UAAa,KAAK,kBAAkB,MAAM;AACnE,aAAO,KAAK;AAAA,IACd;AAEA,WAAO,KAAK,qBAAqB,SAAS;AAAA,EAC5C;AAAA,EAEA,UAAmC;AACjC,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,OAAO,KAAK;AAAA,MACZ,cAAc,KAAK;AAAA,MACnB,cAAc,KAAK;AAAA,MACnB,iBAAiB,KAAK,gBAAgB,QAAQ,KAAK;AAAA,MACnD,wBAAwB,KAAK;AAAA,MAC7B,iCAAiC,KAAK;AAAA,MACtC,yBAAyB,KAAK,yBAAyB;AAAA,MACvD,YAAY,KAAK,WAAW,YAAY,KAAK;AAAA,MAC7C,OAAO,KAAK,SAAS;AAAA,MACrB,cAAc,KAAK,eAAe;AAAA,MAClC,gBAAgB,KAAK,iBAAiB;AAAA,MACtC,WAAW,KAAK,WAAW,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK;AAAA,MACtD,aAAa,KAAK,eAAe;AAAA,MACjC,UAAU,KAAK,YAAY;AAAA,MAC3B,gBAAgB,KAAK,iBAAiB;AAAA,MACtC,gBAAgB,KAAK,iBAAiB;AAAA,MACtC,oBAAoB,KAAK,oBAAoB;AAAA,MAC7C,eAAe,KAAK,gBAAgB;AAAA,MACpC,0BAA0B,KAAK,uBAAuB,YAAY,KAAK;AAAA,MACvE,eAAe,KAAK,eAAe;AAAA,MACnC,eAAe,KAAK,gBAAgB;AAAA,MACpC,qBAAqB,KAAK,oBAAoB;AAAA,MAC9C,mBAAmB,KAAK,kBAAkB,QAAQ,KAAK;AAAA,IACzD;AAAA,EACF;AACF;;;AC9KO,IAAM,gBAAN,MAAM,eAA+C;AAAA,EACzC;AAAA,EACD;AAAA,EAEhB,YAAY,OAAsB,MAAe;AAC/C,SAAK,QAAQ;AACb,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,OAAO,aAAa,MAA8B;AAChD,QAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,aAAO,IAAI,eAAe,KAAmC,IAAI,YAAY,SAAS,CAAC;AAAA,IACzF;AAEA,QAAI,OAAO,SAAS,YAAY,SAAS,MAAM;AAC7C,YAAM,MAAM;AACZ,YAAM,QAAQ,MAAM,QAAQ,IAAI,MAAM,CAAC,IAClC,IAAI,MAAM,EAAgC,IAAI,YAAY,SAAS,IACpE,CAAC;AACL,YAAM,OAAO,OAAO,IAAI,MAAM,MAAM,WAAW,IAAI,MAAM,IAAI;AAC7D,aAAO,IAAI,eAAc,OAAO,IAAI;AAAA,IACtC;AAEA,WAAO,IAAI,eAAc,CAAC,CAAC;AAAA,EAC7B;AAAA,EAEA,CAAC,OAAO,QAAQ,IAA2B;AACzC,WAAO,KAAK,MAAM,OAAO,QAAQ,EAAE;AAAA,EACrC;AAAA,EAEA,IAAI,SAAiB;AACnB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,MAAqB;AACnB,WAAO,CAAC,GAAG,KAAK,KAAK;AAAA,EACvB;AACF;;;ACvCO,IAAM,uBAAN,MAAM,sBAAqB;AAAA,EAChC,YACkB,UACA,SAChB;AAFgB;AACA;AAAA,EACf;AAAA,EAFe;AAAA,EACA;AAAA,EAGlB,OAAO,UAAU,MAAqD;AACpE,WAAO,IAAI;AAAA,MACT,OAAO,KAAK,WAAW,MAAM,WAAW,KAAK,WAAW,IAAI;AAAA,MAC5D,OAAO,KAAK,SAAS,MAAM,WAAW,KAAK,SAAS,IAAI;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,UAAmD;AACjD,UAAM,SAAkD,EAAE,WAAW,KAAK,SAAS;AACnF,QAAI,KAAK,YAAY,OAAW,QAAO,UAAU,KAAK;AACtD,WAAO;AAAA,EACT;AACF;;;ACRA,IAAM,eAAe,oBAAI,IAAI,CAAC,kBAAkB,kBAAkB,eAAe,QAAQ,cAAc,CAAC;AAEjG,IAAM,4BAAN,MAAM,2BAA0B;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEhB,YAAY,OAAuC;AACjD,QAAI,MAAM,iBAAiB,UAAa,MAAM,aAAa,SAAS,KAAK;AACvE,YAAM,IAAI,gBAAgB,6CAA6C;AAAA,IACzE;AACA,QAAI,MAAM,iBAAiB,UAAa,MAAM,aAAa,SAAS,KAAK;AACvE,YAAM,IAAI,gBAAgB,6CAA6C;AAAA,IACzE;AACA,QAAI,MAAM,gBAAgB,UAAa,MAAM,YAAY,WAAW,GAAG;AACrE,YAAM,IAAI,gBAAgB,+DAA+D;AAAA,IAC3F;AAEA,SAAK,eAAe,MAAM;AAC1B,SAAK,eAAe,MAAM;AAC1B,SAAK,aAAa,MAAM;AACxB,SAAK,OAAO,MAAM;AAClB,SAAK,cAAc,MAAM;AAAA,EAC3B;AAAA,EAEA,OAAO,UAAU,MAA0D;AACzE,eAAW,OAAO,OAAO,KAAK,IAAI,GAAG;AACnC,UAAI,CAAC,aAAa,IAAI,GAAG,GAAG;AAC1B,cAAM,IAAI,gBAAgB,uBAAuB,GAAG,sBAAsB,CAAC,GAAG,YAAY,EAAE,KAAK,IAAI,CAAC,EAAE;AAAA,MAC1G;AAAA,IACF;AAEA,UAAM,YAAY,CAAC,QAAoC;AACrD,YAAM,MAAM,KAAK,GAAG;AACpB,UAAI,OAAO,QAAQ,SAAU,QAAO;AACpC,YAAM,UAAU,IAAI,KAAK;AACzB,aAAO,WAAW;AAAA,IACpB;AAEA,UAAM,cAAc,UAAU,cAAc;AAE5C,WAAO,IAAI,2BAA0B;AAAA,MACnC,cAAc,UAAU,gBAAgB;AAAA,MACxC,cAAc,UAAU,gBAAgB;AAAA,MACxC,YAAY,UAAU,aAAa;AAAA,MACnC,MAAM,UAAU,MAAM;AAAA,MACtB,aAAa,cAAc,YAAY,YAAY,IAAI;AAAA,IACzD,CAAC;AAAA,EACH;AAAA,EAEA,UAAkC;AAChC,UAAM,SAAiC,CAAC;AACxC,QAAI,KAAK,iBAAiB,OAAW,QAAO,gBAAgB,IAAI,KAAK;AACrE,QAAI,KAAK,iBAAiB,OAAW,QAAO,gBAAgB,IAAI,KAAK;AACrE,QAAI,KAAK,eAAe,OAAW,QAAO,aAAa,IAAI,KAAK;AAChE,QAAI,KAAK,SAAS,OAAW,QAAO,MAAM,IAAI,KAAK;AACnD,QAAI,KAAK,gBAAgB,OAAW,QAAO,cAAc,IAAI,KAAK;AAClE,WAAO;AAAA,EACT;AACF;;;ACrEO,IAAM,sBAAN,cAAkC,gBAAgB;AAAA,EACvC,aAAa;AAAA,EACZ;AAAA,EAEjB,YAAY,SAAiB,QAAkC,UAAmC,CAAC,GAAG;AACpG,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,WAAO,eAAe,MAAM,WAAW,SAAS;AAAA,EAClD;AAAA,EAEA,YAAsC;AACpC,WAAO,KAAK;AAAA,EACd;AACF;;;ACLA,IAAM,aAAa;AAEZ,IAAM,cAAN,MAAkB;AAAA,EACvB,YACmB,SACA,QACA,cACA,YACjB;AAJiB;AACA;AACA;AACA;AAAA,EAChB;AAAA,EAJgB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGnB,MAAM,SACJ,QACA,aACA,UACA,cACsB;AACtB,UAAM,OAAgC,EAAE,SAAS,OAAO;AACxD,QAAI,YAAa,MAAK,cAAc,IAAI;AACxC,QAAI,SAAU,MAAK,QAAQ,IAAI;AAE/B,QAAI,cAAc;AAChB,WAAK,eAAe,IAAI,wBAAwB,4BAA4B,aAAa,QAAQ,IAAI;AAAA,IACvG;AAEA,WAAO,KAAK,yBAAyB,MAAM,CAAC;AAAA,EAC9C;AAAA,EAEA,MAAc,yBAAyB,MAA+B,cAA4C;AAChH,UAAM,WAAW,MAAM,KAAK,YAAY,QAAQ,GAAG,KAAK,OAAO,iBAAiB,IAAI;AAEpF,QAAI,SAAS,WAAW,KAAK;AAC3B,UAAI,gBAAgB,GAAG;AACrB,cAAM,OAAO,MAAM,SAAS,KAAK;AACjC,cAAM,IAAI,cAAc,oDAAoD,KAAK,IAAI;AAAA,MACvF;AACA,aAAO,KAAK,yBAAyB,MAAM,eAAe,CAAC;AAAA,IAC7D;AAEA,UAAM,OAAO,MAAM,KAAK,kBAAkB,QAAQ;AAClD,WAAO,YAAY,UAAU,IAAI;AAAA,EACnC;AAAA,EAEA,MAAM,iBAAiB,SAAmB,cAAyB,UAA2C;AAC5G,UAAM,OAAgC,EAAE,UAAU,QAAQ;AAC1D,QAAI,aAAc,MAAK,eAAe,IAAI;AAC1C,QAAI,SAAU,MAAK,QAAQ,IAAI;AAE/B,UAAM,WAAW,MAAM,KAAK,YAAY,QAAQ,GAAG,KAAK,OAAO,0BAA0B,IAAI;AAC7F,UAAM,OAAO,MAAM,KAAK,kBAAkB,QAAQ;AAElD,WAAO,cAAc,aAAa,IAAI;AAAA,EACxC;AAAA,EAEA,MAAM,eAAe,QAAkD;AACrE,UAAM,OAAgC,EAAE,SAAS,OAAO;AACxD,UAAM,WAAW,MAAM,KAAK,YAAY,QAAQ,GAAG,KAAK,OAAO,wBAAwB,IAAI;AAC3F,WAAO,KAAK,kBAAkB,QAAQ;AAAA,EACxC;AAAA,EAEA,MAAM,MAAM,QAAsC;AAChD,UAAM,WAAW,MAAM,KAAK,YAAY,OAAO,GAAG,KAAK,OAAO,cAAc,mBAAmB,MAAM,CAAC,EAAE;AACxG,UAAM,OAAO,MAAM,KAAK,kBAAkB,QAAQ;AAClD,WAAO,YAAY,UAAU,IAAI;AAAA,EACnC;AAAA,EAEA,MAAM,QAAQ,QAAyC;AACrD,QAAI,MAAM,GAAG,KAAK,OAAO;AACzB,QAAI,OAAQ,QAAO,YAAY,mBAAmB,MAAM,CAAC;AAEzD,UAAM,WAAW,MAAM,KAAK,YAAY,OAAO,GAAG;AAClD,UAAM,OAAO,MAAM,KAAK,kBAAkB,QAAQ;AAClD,WAAO,cAAc,aAAa,IAAI;AAAA,EACxC;AAAA,EAEA,MAAM,OAAO,MAAe,SAA0C;AACpE,UAAM,SAAS,IAAI,gBAAgB;AACnC,QAAI,KAAM,QAAO,IAAI,QAAQ,IAAI;AACjC,QAAI,YAAY,OAAW,QAAO,IAAI,YAAY,OAAO,OAAO,CAAC;AAEjE,UAAM,cAAc,OAAO,SAAS;AACpC,UAAM,MAAM,GAAG,KAAK,OAAO,cAAc,cAAc,IAAI,WAAW,KAAK,EAAE;AAE7E,UAAM,WAAW,MAAM,KAAK,YAAY,OAAO,GAAG;AAClD,UAAM,OAAO,MAAM,KAAK,kBAAkB,QAAQ;AAClD,WAAO,cAAc,aAAa,IAAI;AAAA,EACxC;AAAA,EAEA,MAAM,YAAY,MAAc,MAAsC;AACpE,QAAI,MAAM,GAAG,KAAK,OAAO,oBAAoB,mBAAmB,IAAI,CAAC;AACrE,QAAI,KAAM,QAAO,SAAS,IAAI;AAE9B,UAAM,WAAW,MAAM,KAAK,kBAAkB,OAAO,GAAG;AACxD,UAAM,SAAS,MAAM,SAAS,YAAY;AAC1C,WAAO,IAAI,WAAW,MAAM;AAAA,EAC9B;AAAA,EAEA,MAAM,uBACJ,UACA,QACA,WACA,MAC+B;AAC/B,WAAO,KAAK,cAAc,GAAG,KAAK,OAAO,iCAAiC,UAAU,QAAQ,WAAW,IAAI;AAAA,EAC7G;AAAA,EAEA,MAAM,uBACJ,UACA,QACA,WACA,MAC+B;AAC/B,WAAO,KAAK,cAAc,GAAG,KAAK,OAAO,iCAAiC,UAAU,QAAQ,WAAW,IAAI;AAAA,EAC7G;AAAA,EAEA,MAAc,cACZ,KACA,UACA,QACA,WACA,MAC+B;AAC/B,UAAM,OAAO,KAAK,WAAW,QAAQ;AACrC,UAAM,KAAK,KAAK,WAAW,MAAM;AAEjC,UAAM,OAAgC,EAAE,WAAW,MAAM,SAAS,GAAG;AACrE,QAAI,aAAa,UAAU,SAAS,EAAG,MAAK,WAAW,IAAI;AAC3D,QAAI,KAAM,MAAK,MAAM,IAAI;AAEzB,UAAM,WAAW,MAAM,KAAK,YAAY,QAAQ,KAAK,IAAI;AACzD,UAAM,OAAO,MAAM,KAAK,kBAAkB,UAAU,CAAC,KAAK,GAAG,CAAC;AAE9D,UAAM,YAAY,qBAAqB,UAAU,IAAI;AACrD,QAAI,CAAC,UAAU,UAAU;AACvB,YAAM,IAAI,gBAAgB,sCAAsC;AAAA,IAClE;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,mBAAmB,UAAuC;AAC9D,UAAM,MAAM,GAAG,KAAK,OAAO,iCAAiC,mBAAmB,QAAQ,CAAC;AACxF,UAAM,WAAW,MAAM,KAAK,kBAAkB,OAAO,GAAG;AACxD,UAAM,SAAS,MAAM,SAAS,YAAY;AAC1C,WAAO,IAAI,WAAW,MAAM;AAAA,EAC9B;AAAA,EAEQ,eAAuC;AAC7C,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,MAChB,aAAa,KAAK;AAAA,IACpB;AACA,UAAM,QAAQ,KAAK,aAAa,IAAI;AACpC,QAAI,OAAO;AACT,cAAQ,eAAe,IAAI,UAAU,MAAM,WAAW;AAAA,IACxD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,YAAY,QAAgB,KAAa,MAAmD;AACxG,UAAM,UAAuB,EAAE,SAAS,KAAK,aAAa,EAAE;AAC5D,QAAI,KAAM,SAAQ,OAAO,KAAK,UAAU,IAAI;AAE5C,WAAO,KAAK,WAAW,QAAQ,QAAQ,KAAK,OAAO;AAAA,EACrD;AAAA,EAEA,MAAc,kBAAkB,QAAgB,KAAgC;AAC9E,UAAM,UAAU,KAAK,aAAa;AAClC,WAAO,QAAQ,cAAc;AAE7B,UAAM,WAAW,MAAM,KAAK,WAAW,QAAQ,QAAQ,KAAK,EAAE,QAAQ,CAAC;AACvE,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,OAAO,MAAM,SAAS,KAAK;AACjC,YAAM,IAAI,cAAc,cAAc,SAAS,MAAM,IAAI,SAAS,QAAQ,IAAI;AAAA,IAChF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,kBACZ,UACA,mBAA6B,CAAC,GAAG,GACC;AAClC,UAAM,eAAe,MAAM,SAAS,KAAK;AAEzC,QAAI,SAAS,WAAW,KAAK;AAC3B,UAAI,SAAmC,CAAC;AACxC,UAAI;AACF,cAAMA,UAAS,KAAK,MAAM,YAAY;AACtC,YAAIA,QAAO,QAAQ,MAAM,QAAQ,OAAOA,QAAO,QAAQ,MAAM,YAAY,CAAC,MAAM,QAAQA,QAAO,QAAQ,CAAC,GAAG;AACzG,mBAASA,QAAO,QAAQ;AAAA,QAC1B;AAAA,MACF,QAAQ;AAAA,MAER;AACA,YAAM,IAAI,oBAAoB,qBAAqB,MAAM;AAAA,IAC3D;AAEA,QAAI,CAAC,SAAS,MAAM,CAAC,iBAAiB,SAAS,SAAS,MAAM,GAAG;AAC/D,YAAM,IAAI,cAAc,cAAc,SAAS,MAAM,IAAI,SAAS,QAAQ,YAAY;AAAA,IACxF;AAEA,QAAI;AACJ,QAAI;AACF,eAAS,KAAK,MAAM,YAAY;AAAA,IAClC,QAAQ;AACN,YAAM,IAAI,cAAc,yBAAyB,GAAG,YAAY;AAAA,IAClE;AAEA,QAAI,OAAO,WAAW,YAAY,WAAW,MAAM;AACjD,YAAM,IAAI,cAAc,8BAA8B,GAAG,YAAY;AAAA,IACvE;AAEA,UAAM,MAAM;AACZ,QAAI,IAAI,MAAM,MAAM,WAAc,OAAO,IAAI,MAAM,MAAM,YAAY,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI;AAChG,aAAO,IAAI,MAAM;AAAA,IACnB;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,WAAW,MAA6B;AAC9C,QAAI,gBAAgB,MAAM;AACxB,YAAM,OAAO,KAAK,YAAY;AAC9B,YAAM,QAAQ,OAAO,KAAK,SAAS,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG;AACzD,YAAM,MAAM,OAAO,KAAK,QAAQ,CAAC,EAAE,SAAS,GAAG,GAAG;AAClD,aAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG;AAAA,IAChC;AAEA,QAAI,CAAC,WAAW,KAAK,IAAI,GAAG;AAC1B,YAAM,IAAI,gBAAgB,yBAAyB,IAAI,yBAAyB;AAAA,IAClF;AAEA,WAAO;AAAA,EACT;AACF;;;ACpPO,IAAM,cAAc;AAAA,EACzB,SAAS;AAAA,EACT,YAAY;AACd;AAIA,IAAM,YAAyC;AAAA,EAC7C,CAAC,YAAY,OAAO,GAAG;AAAA,EACvB,CAAC,YAAY,UAAU,GAAG;AAC5B;AAEO,SAAS,WAAW,aAAkC;AAC3D,SAAO,UAAU,WAAW;AAC9B;;;ACZO,IAAM,kBAAN,MAAqD;AAAA,EAC1D,MAAM,QAAQ,QAAgB,KAAa,UAAuB,CAAC,GAAsB;AACvF,WAAO,MAAM,KAAK,EAAE,GAAG,SAAS,OAAO,CAAC;AAAA,EAC1C;AACF;;;ACHO,IAAM,uBAAN,MAA4D;AAAA,EACzD,QAAsB;AAAA,EAE9B,MAAoB;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,OAAoB;AACtB,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,QAAc;AACZ,SAAK,QAAQ;AAAA,EACf;AACF;;;ACZA,IAAM,oBAAoB;AAQnB,IAAM,sBAAN,MAAyD;AAAA,EAC9D,YACmB,OACA,cACA,WACjB;AAHiB;AACA;AACA;AAAA,EAChB;AAAA,EAHgB;AAAA,EACA;AAAA,EACA;AAAA,EAGnB,MAAM,QAAQ,QAAgB,KAAa,SAA0C;AAEnF,QAAI,kBAAkB,KAAK,GAAG,GAAG;AAC/B,aAAO,KAAK,MAAM,QAAQ,QAAQ,KAAK,OAAO;AAAA,IAChD;AAGA,UAAM,eAAe,KAAK,aAAa,IAAI;AAC3C,QAAI,cAAc,UAAU,GAAG;AAC7B,YAAM,KAAK,UAAU;AAAA,IACvB;AAGA,UAAM,iBAAiB,KAAK,iBAAiB,OAAO;AACpD,UAAM,WAAW,MAAM,KAAK,MAAM,QAAQ,QAAQ,KAAK,cAAc;AAGrE,QAAI,SAAS,WAAW,KAAK;AAC3B,YAAM,KAAK,UAAU;AACrB,YAAM,eAAe,KAAK,iBAAiB,OAAO;AAClD,YAAM,gBAAgB,MAAM,KAAK,MAAM,QAAQ,QAAQ,KAAK,YAAY;AAExE,UAAI,cAAc,WAAW,KAAK;AAChC,cAAM,OAAO,MAAM,cAAc,KAAK;AACtC,cAAM,IAAI,wBAAwB,6CAA6C,EAAE,QAAQ,KAAK,KAAK,CAAC;AAAA,MACtG;AAEA,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,iBAAiB,SAAoC;AAC3D,UAAM,QAAQ,KAAK,aAAa,IAAI;AACpC,QAAI,CAAC,MAAO,QAAO,WAAW,CAAC;AAE/B,UAAM,WAAW,SAAS,WAAW,CAAC;AACtC,UAAM,UAAU,EAAE,GAAI,UAAqC,eAAe,UAAU,MAAM,WAAW,GAAG;AACxG,WAAO,EAAE,GAAI,WAAW,CAAC,GAAI,QAAQ;AAAA,EACvC;AACF;;;AC5CO,IAAM,eAAN,MAAmB;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEhB,YAAY,SAA8B;AACxC,UAAM,cAAc,QAAQ,eAAe,YAAY;AACvD,UAAM,eAAe,QAAQ,gBAAgB,IAAI,qBAAqB;AACtE,UAAM,aAAa,QAAQ,cAAc,IAAI,gBAAgB;AAE7D,SAAK,UAAU,WAAW,WAAW;AAGrC,SAAK,OAAO,IAAI,aAAa,KAAK,SAAS,QAAQ,QAAQ,cAAc,UAAU;AAGnF,UAAM,cAAc,IAAI,oBAAoB,YAAY,cAAc,MAAM,KAAK,KAAK,QAAQ,CAAC;AAE/F,SAAK,MAAM,IAAI,YAAY,KAAK,SAAS,QAAQ,QAAQ,cAAc,WAAW;AAClF,SAAK,UAAU,IAAI,gBAAgB,KAAK,SAAS,QAAQ,QAAQ,cAAc,WAAW;AAAA,EAC5F;AACF;;;ACrCO,IAAM,sBAAN,MAA0B;AAAA,EAC/B,OAAO,OAAO,SAA4C;AACxD,WAAO,IAAI,aAAa,OAAO;AAAA,EACjC;AACF;;;ACNO,IAAM,aAAa;AAAA,EACxB,IAAI;AACN;;;ACFO,IAAM,WAAW;AAAA,EACtB,SAAS;AAAA,EACT,QAAQ;AACV;","names":["parsed"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@taxora/sdk",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "Taxora VAT Validation API SDK for Node.js",
5
5
  "license": "MIT",
6
6
  "type": "module",