@scell/sdk 1.2.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/client.ts","../src/utils/retry.ts","../src/resources/api-keys.ts","../src/resources/auth.ts","../src/resources/balance.ts","../src/resources/companies.ts","../src/resources/invoices.ts","../src/resources/signatures.ts","../src/resources/webhooks.ts","../src/utils/webhook-verify.ts","../src/index.ts"],"names":["parseApiError","crypto"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Scell SDK Error Classes\n *\n * @packageDocumentation\n */\n\nimport type { ApiErrorResponse } from './types/common.js';\n\n/**\n * Base error class for all Scell API errors\n */\nexport class ScellError extends Error {\n /** HTTP status code */\n public readonly status: number;\n /** Error code from API */\n public readonly code: string | undefined;\n /** Original response body */\n public readonly body: unknown;\n\n constructor(\n message: string,\n status: number,\n code?: string,\n body?: unknown\n ) {\n super(message);\n this.name = 'ScellError';\n this.status = status;\n this.code = code;\n this.body = body;\n\n // Maintains proper stack trace in V8 environments\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n}\n\n/**\n * Error thrown when authentication fails (401)\n *\n * @example\n * ```typescript\n * try {\n * await client.invoices.list();\n * } catch (error) {\n * if (error instanceof ScellAuthenticationError) {\n * console.log('Invalid or expired token');\n * }\n * }\n * ```\n */\nexport class ScellAuthenticationError extends ScellError {\n constructor(message = 'Authentication failed', body?: unknown) {\n super(message, 401, 'AUTHENTICATION_ERROR', body);\n this.name = 'ScellAuthenticationError';\n }\n}\n\n/**\n * Error thrown when authorization fails (403)\n *\n * @example\n * ```typescript\n * try {\n * await client.admin.users();\n * } catch (error) {\n * if (error instanceof ScellAuthorizationError) {\n * console.log('Insufficient permissions');\n * }\n * }\n * ```\n */\nexport class ScellAuthorizationError extends ScellError {\n constructor(message = 'Access denied', body?: unknown) {\n super(message, 403, 'AUTHORIZATION_ERROR', body);\n this.name = 'ScellAuthorizationError';\n }\n}\n\n/**\n * Error thrown when validation fails (422)\n *\n * @example\n * ```typescript\n * try {\n * await client.invoices.create(invalidData);\n * } catch (error) {\n * if (error instanceof ScellValidationError) {\n * console.log('Validation errors:', error.errors);\n * }\n * }\n * ```\n */\nexport class ScellValidationError extends ScellError {\n /** Field-level validation errors */\n public readonly errors: Record<string, string[]>;\n\n constructor(\n message: string,\n errors: Record<string, string[]> = {},\n body?: unknown\n ) {\n super(message, 422, 'VALIDATION_ERROR', body);\n this.name = 'ScellValidationError';\n this.errors = errors;\n }\n\n /**\n * Get all error messages as a flat array\n */\n getAllMessages(): string[] {\n return Object.values(this.errors).flat();\n }\n\n /**\n * Get error messages for a specific field\n */\n getFieldErrors(field: string): string[] {\n return this.errors[field] ?? [];\n }\n\n /**\n * Check if a specific field has errors\n */\n hasFieldError(field: string): boolean {\n const fieldErrors = this.errors[field];\n return fieldErrors !== undefined && fieldErrors.length > 0;\n }\n}\n\n/**\n * Error thrown when rate limit is exceeded (429)\n *\n * @example\n * ```typescript\n * try {\n * await client.invoices.create(data);\n * } catch (error) {\n * if (error instanceof ScellRateLimitError) {\n * console.log(`Retry after ${error.retryAfter} seconds`);\n * }\n * }\n * ```\n */\nexport class ScellRateLimitError extends ScellError {\n /** Seconds to wait before retrying */\n public readonly retryAfter: number | undefined;\n\n constructor(\n message = 'Rate limit exceeded',\n retryAfter?: number,\n body?: unknown\n ) {\n super(message, 429, 'RATE_LIMIT_EXCEEDED', body);\n this.name = 'ScellRateLimitError';\n this.retryAfter = retryAfter;\n }\n}\n\n/**\n * Error thrown when a resource is not found (404)\n */\nexport class ScellNotFoundError extends ScellError {\n constructor(message = 'Resource not found', body?: unknown) {\n super(message, 404, 'NOT_FOUND', body);\n this.name = 'ScellNotFoundError';\n }\n}\n\n/**\n * Error thrown when the API returns a server error (5xx)\n */\nexport class ScellServerError extends ScellError {\n constructor(\n message = 'Internal server error',\n status = 500,\n body?: unknown\n ) {\n super(message, status, 'SERVER_ERROR', body);\n this.name = 'ScellServerError';\n }\n}\n\n/**\n * Error thrown when insufficient balance for an operation\n */\nexport class ScellInsufficientBalanceError extends ScellError {\n constructor(message = 'Insufficient balance', body?: unknown) {\n super(message, 402, 'INSUFFICIENT_BALANCE', body);\n this.name = 'ScellInsufficientBalanceError';\n }\n}\n\n/**\n * Error thrown for network-related issues\n */\nexport class ScellNetworkError extends ScellError {\n public readonly originalError: Error;\n\n constructor(message: string, originalError: Error) {\n super(message, 0, 'NETWORK_ERROR');\n this.name = 'ScellNetworkError';\n this.originalError = originalError;\n }\n}\n\n/**\n * Error thrown when request times out\n */\nexport class ScellTimeoutError extends ScellError {\n constructor(message = 'Request timed out') {\n super(message, 0, 'TIMEOUT');\n this.name = 'ScellTimeoutError';\n }\n}\n\n/**\n * Parse API error response and throw appropriate error\n */\nexport function parseApiError(\n status: number,\n body: unknown,\n headers?: Headers\n): never {\n const errorBody = body as ApiErrorResponse | undefined;\n const message = errorBody?.message ?? 'Unknown error';\n const errors = errorBody?.errors ?? {};\n const code = errorBody?.code;\n\n switch (status) {\n case 401:\n throw new ScellAuthenticationError(message, body);\n case 402:\n throw new ScellInsufficientBalanceError(message, body);\n case 403:\n throw new ScellAuthorizationError(message, body);\n case 404:\n throw new ScellNotFoundError(message, body);\n case 422:\n throw new ScellValidationError(message, errors, body);\n case 429: {\n const retryAfter = headers?.get('Retry-After');\n throw new ScellRateLimitError(\n message,\n retryAfter ? parseInt(retryAfter, 10) : undefined,\n body\n );\n }\n default:\n if (status >= 500) {\n throw new ScellServerError(message, status, body);\n }\n throw new ScellError(message, status, code, body);\n }\n}\n","/**\n * Scell HTTP Client\n *\n * @packageDocumentation\n */\n\nimport {\n parseApiError,\n ScellNetworkError,\n ScellTimeoutError,\n} from './errors.js';\nimport { withRetry, type RetryOptions } from './utils/retry.js';\n\n/**\n * Authentication mode\n */\nexport type AuthMode = 'bearer' | 'api-key';\n\n/**\n * Client configuration options\n */\nexport interface ClientConfig {\n /** Base URL for the API (default: https://api.scell.io/api/v1) */\n baseUrl?: string | undefined;\n /** Request timeout in milliseconds (default: 30000) */\n timeout?: number | undefined;\n /** Retry configuration */\n retry?: RetryOptions | undefined;\n /** Enable automatic retries (default: true) */\n enableRetry?: boolean | undefined;\n /** Custom fetch implementation */\n fetch?: typeof fetch | undefined;\n}\n\n/**\n * Request options for individual requests\n */\nexport interface RequestOptions {\n /** Override timeout for this request */\n timeout?: number | undefined;\n /** Skip retry for this request */\n skipRetry?: boolean | undefined;\n /** Additional headers */\n headers?: Record<string, string> | undefined;\n /** Abort signal */\n signal?: AbortSignal | undefined;\n}\n\n/**\n * Internal request configuration\n */\ninterface InternalRequestConfig extends RequestOptions {\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n path: string;\n body?: unknown;\n query?: Record<string, string | number | boolean | undefined>;\n}\n\n/**\n * HTTP client for Scell API\n */\nexport class HttpClient {\n private readonly baseUrl: string;\n private readonly timeout: number;\n private readonly retryOptions: RetryOptions;\n private readonly enableRetry: boolean;\n private readonly fetchFn: typeof fetch;\n private readonly authMode: AuthMode;\n private readonly authToken: string;\n\n constructor(\n authMode: AuthMode,\n authToken: string,\n config: ClientConfig = {}\n ) {\n this.authMode = authMode;\n this.authToken = authToken;\n this.baseUrl = config.baseUrl ?? 'https://api.scell.io/api/v1';\n this.timeout = config.timeout ?? 30000;\n this.retryOptions = config.retry ?? {};\n this.enableRetry = config.enableRetry ?? true;\n this.fetchFn = config.fetch ?? fetch;\n }\n\n /**\n * Build URL with query parameters\n */\n private buildUrl(\n path: string,\n query?: Record<string, string | number | boolean | undefined>\n ): string {\n const url = new URL(path, this.baseUrl);\n\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n return url.toString();\n }\n\n /**\n * Build headers for request\n */\n private buildHeaders(\n additionalHeaders?: Record<string, string>\n ): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n ...additionalHeaders,\n };\n\n if (this.authMode === 'bearer') {\n headers['Authorization'] = `Bearer ${this.authToken}`;\n } else {\n headers['X-API-Key'] = this.authToken;\n }\n\n return headers;\n }\n\n /**\n * Execute HTTP request\n */\n private async executeRequest<T>(config: InternalRequestConfig): Promise<T> {\n const { method, path, body, query, headers, timeout, signal } = config;\n\n const url = this.buildUrl(path, query);\n const requestHeaders = this.buildHeaders(headers);\n const requestTimeout = timeout ?? this.timeout;\n\n // Create abort controller for timeout\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), requestTimeout);\n\n // Combine signals if provided\n const combinedSignal = signal\n ? new AbortController().signal\n : controller.signal;\n\n if (signal) {\n signal.addEventListener('abort', () => controller.abort());\n }\n\n try {\n const fetchOptions: RequestInit = {\n method,\n headers: requestHeaders,\n signal: combinedSignal,\n };\n\n if (body !== undefined) {\n fetchOptions.body = JSON.stringify(body);\n }\n\n const response = await this.fetchFn(url, fetchOptions);\n\n clearTimeout(timeoutId);\n\n // Parse response body\n const contentType = response.headers.get('Content-Type') ?? '';\n let responseBody: unknown;\n\n if (contentType.includes('application/json')) {\n responseBody = await response.json();\n } else {\n responseBody = await response.text();\n }\n\n // Handle errors\n if (!response.ok) {\n parseApiError(response.status, responseBody, response.headers);\n }\n\n return responseBody as T;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof Error) {\n // Handle abort/timeout\n if (error.name === 'AbortError') {\n throw new ScellTimeoutError(\n `Request timed out after ${requestTimeout}ms`\n );\n }\n\n // Handle network errors\n if (\n error.name === 'TypeError' &&\n error.message.includes('fetch')\n ) {\n throw new ScellNetworkError('Network request failed', error);\n }\n }\n\n throw error;\n }\n }\n\n /**\n * Execute request with optional retry\n */\n private async request<T>(config: InternalRequestConfig): Promise<T> {\n const shouldRetry = this.enableRetry && !config.skipRetry;\n\n if (shouldRetry) {\n return withRetry(\n () => this.executeRequest<T>(config),\n this.retryOptions\n );\n }\n\n return this.executeRequest<T>(config);\n }\n\n /**\n * GET request\n */\n async get<T>(\n path: string,\n query?: Record<string, string | number | boolean | undefined>,\n options?: RequestOptions\n ): Promise<T> {\n const config: InternalRequestConfig = {\n method: 'GET',\n path,\n ...options,\n };\n if (query !== undefined) {\n config.query = query;\n }\n return this.request<T>(config);\n }\n\n /**\n * POST request\n */\n async post<T>(\n path: string,\n body?: unknown,\n options?: RequestOptions\n ): Promise<T> {\n return this.request<T>({\n method: 'POST',\n path,\n body,\n ...options,\n });\n }\n\n /**\n * PUT request\n */\n async put<T>(\n path: string,\n body?: unknown,\n options?: RequestOptions\n ): Promise<T> {\n return this.request<T>({\n method: 'PUT',\n path,\n body,\n ...options,\n });\n }\n\n /**\n * PATCH request\n */\n async patch<T>(\n path: string,\n body?: unknown,\n options?: RequestOptions\n ): Promise<T> {\n return this.request<T>({\n method: 'PATCH',\n path,\n body,\n ...options,\n });\n }\n\n /**\n * DELETE request\n */\n async delete<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>({\n method: 'DELETE',\n path,\n ...options,\n });\n }\n\n /**\n * GET request that returns raw binary data as ArrayBuffer\n *\n * Use this for downloading files (PDF, XML, etc.)\n *\n * @param path - API endpoint path\n * @param query - Query parameters\n * @param options - Request options\n * @returns ArrayBuffer containing the file content\n */\n async getRaw(\n path: string,\n query?: Record<string, string | number | boolean | undefined>,\n options?: RequestOptions\n ): Promise<ArrayBuffer> {\n const url = this.buildUrl(path, query);\n const requestHeaders = this.buildHeaders(options?.headers);\n const requestTimeout = options?.timeout ?? this.timeout;\n\n // Remove JSON content-type for raw requests\n delete requestHeaders['Content-Type'];\n requestHeaders['Accept'] = '*/*';\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), requestTimeout);\n\n if (options?.signal) {\n options.signal.addEventListener('abort', () => controller.abort());\n }\n\n try {\n const response = await this.fetchFn(url, {\n method: 'GET',\n headers: requestHeaders,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n // Try to parse error as JSON\n const contentType = response.headers.get('Content-Type') ?? '';\n let responseBody: unknown;\n\n if (contentType.includes('application/json')) {\n responseBody = await response.json();\n } else {\n responseBody = await response.text();\n }\n\n parseApiError(response.status, responseBody, response.headers);\n }\n\n return response.arrayBuffer();\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new ScellTimeoutError(\n `Request timed out after ${requestTimeout}ms`\n );\n }\n\n if (\n error.name === 'TypeError' &&\n error.message.includes('fetch')\n ) {\n throw new ScellNetworkError('Network request failed', error);\n }\n }\n\n throw error;\n }\n }\n}\n","/**\n * Retry utility with exponential backoff and jitter\n *\n * @packageDocumentation\n */\n\nimport { ScellRateLimitError, ScellServerError } from '../errors.js';\n\n/**\n * Retry configuration options\n */\nexport interface RetryOptions {\n /** Maximum number of retry attempts (default: 3) */\n maxRetries?: number | undefined;\n /** Base delay in milliseconds (default: 1000) */\n baseDelay?: number | undefined;\n /** Maximum delay in milliseconds (default: 30000) */\n maxDelay?: number | undefined;\n /** Jitter factor (0-1, default: 0.1) */\n jitterFactor?: number | undefined;\n /** Custom function to determine if error is retryable */\n isRetryable?: ((error: unknown) => boolean) | undefined;\n}\n\n/**\n * Default retry options\n */\nconst DEFAULT_RETRY_OPTIONS: Required<Omit<RetryOptions, 'isRetryable'>> = {\n maxRetries: 3,\n baseDelay: 1000,\n maxDelay: 30000,\n jitterFactor: 0.1,\n};\n\n/**\n * Check if an error is retryable (429 or 5xx)\n */\nexport function isRetryableError(error: unknown): boolean {\n if (error instanceof ScellRateLimitError) {\n return true;\n }\n if (error instanceof ScellServerError) {\n return true;\n }\n // Network errors are also retryable\n if (error instanceof Error && error.name === 'ScellNetworkError') {\n return true;\n }\n return false;\n}\n\n/**\n * Calculate delay with exponential backoff and jitter\n *\n * @param attempt - Current attempt number (0-indexed)\n * @param baseDelay - Base delay in milliseconds\n * @param maxDelay - Maximum delay in milliseconds\n * @param jitterFactor - Jitter factor (0-1)\n * @param retryAfter - Optional retry-after header value in seconds\n * @returns Delay in milliseconds\n */\nexport function calculateDelay(\n attempt: number,\n baseDelay: number,\n maxDelay: number,\n jitterFactor: number,\n retryAfter?: number\n): number {\n // If we have a retry-after header, use it\n if (retryAfter !== undefined && retryAfter > 0) {\n return retryAfter * 1000;\n }\n\n // Exponential backoff: baseDelay * 2^attempt\n const exponentialDelay = baseDelay * Math.pow(2, attempt);\n\n // Cap at maxDelay\n const cappedDelay = Math.min(exponentialDelay, maxDelay);\n\n // Add jitter: delay * (1 +/- jitterFactor * random)\n const jitter = cappedDelay * jitterFactor * (Math.random() * 2 - 1);\n\n return Math.floor(cappedDelay + jitter);\n}\n\n/**\n * Sleep for a specified duration\n */\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Execute a function with retry logic\n *\n * @param fn - Async function to execute\n * @param options - Retry options\n * @returns Result of the function\n *\n * @example\n * ```typescript\n * const result = await withRetry(\n * () => client.invoices.create(data),\n * { maxRetries: 5 }\n * );\n * ```\n */\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n options: RetryOptions = {}\n): Promise<T> {\n const maxRetries = options.maxRetries ?? DEFAULT_RETRY_OPTIONS.maxRetries;\n const baseDelay = options.baseDelay ?? DEFAULT_RETRY_OPTIONS.baseDelay;\n const maxDelay = options.maxDelay ?? DEFAULT_RETRY_OPTIONS.maxDelay;\n const jitterFactor = options.jitterFactor ?? DEFAULT_RETRY_OPTIONS.jitterFactor;\n const isRetryable = options.isRetryable ?? isRetryableError;\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error;\n\n // Check if we should retry\n if (attempt >= maxRetries || !isRetryable(error)) {\n throw error;\n }\n\n // Get retry-after header if available\n const retryAfter: number | undefined =\n error instanceof ScellRateLimitError ? error.retryAfter : undefined;\n\n // Calculate delay\n const delay = calculateDelay(\n attempt,\n baseDelay,\n maxDelay,\n jitterFactor,\n retryAfter\n );\n\n // Wait before retrying\n await sleep(delay);\n }\n }\n\n // This should never be reached, but TypeScript needs it\n throw lastError;\n}\n\n/**\n * Create a retry wrapper with pre-configured options\n *\n * @example\n * ```typescript\n * const retry = createRetryWrapper({ maxRetries: 5 });\n * const result = await retry(() => client.invoices.create(data));\n * ```\n */\nexport function createRetryWrapper(\n defaultOptions: RetryOptions = {}\n): <T>(fn: () => Promise<T>, options?: RetryOptions) => Promise<T> {\n return <T>(fn: () => Promise<T>, options: RetryOptions = {}) =>\n withRetry(fn, { ...defaultOptions, ...options });\n}\n","/**\n * API Keys Resource\n *\n * @packageDocumentation\n */\n\nimport type { HttpClient, RequestOptions } from '../client.js';\nimport type {\n MessageResponse,\n MessageWithDataResponse,\n SingleResponse,\n} from '../types/common.js';\nimport type {\n ApiKey,\n ApiKeyWithSecret,\n CreateApiKeyInput,\n} from '../types/api-keys.js';\n\n/**\n * API Keys resource\n *\n * @example\n * ```typescript\n * // Create an API key for a company\n * const apiKey = await client.apiKeys.create({\n * name: 'Production Key',\n * company_id: 'company-uuid',\n * environment: 'production'\n * });\n *\n * // Store the key securely!\n * console.log('API Key:', apiKey.key);\n * ```\n */\nexport class ApiKeysResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List all API keys\n *\n * @param requestOptions - Request options\n * @returns List of API keys (without secrets)\n *\n * @example\n * ```typescript\n * const { data: keys } = await client.apiKeys.list();\n * keys.forEach(key => {\n * console.log(`${key.name}: ${key.key_prefix}...`);\n * });\n * ```\n */\n async list(requestOptions?: RequestOptions): Promise<{ data: ApiKey[] }> {\n return this.http.get<{ data: ApiKey[] }>(\n '/api-keys',\n undefined,\n requestOptions\n );\n }\n\n /**\n * Get a specific API key\n *\n * @param id - API Key UUID\n * @param requestOptions - Request options\n * @returns API key details (without secret)\n *\n * @example\n * ```typescript\n * const { data: key } = await client.apiKeys.get('key-uuid');\n * console.log(`Last used: ${key.last_used_at}`);\n * ```\n */\n async get(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<ApiKey>> {\n return this.http.get<SingleResponse<ApiKey>>(\n `/api-keys/${id}`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Create a new API key\n *\n * Important: The full key is only returned once during creation.\n * Store it securely - you won't be able to retrieve it again.\n *\n * @param input - API key configuration\n * @param requestOptions - Request options\n * @returns Created API key with full key value\n *\n * @example\n * ```typescript\n * const { data: apiKey } = await client.apiKeys.create({\n * name: 'Production Integration',\n * company_id: 'company-uuid',\n * environment: 'production',\n * permissions: ['invoices:write', 'signatures:write']\n * });\n *\n * // IMPORTANT: Store this key securely!\n * // You won't be able to see it again.\n * console.log('Save this key:', apiKey.key);\n * ```\n */\n async create(\n input: CreateApiKeyInput,\n requestOptions?: RequestOptions\n ): Promise<MessageWithDataResponse<ApiKeyWithSecret>> {\n return this.http.post<MessageWithDataResponse<ApiKeyWithSecret>>(\n '/api-keys',\n input,\n requestOptions\n );\n }\n\n /**\n * Delete an API key\n *\n * Warning: This will immediately revoke the key and all\n * requests using it will fail.\n *\n * @param id - API Key UUID\n * @param requestOptions - Request options\n * @returns Deletion confirmation\n *\n * @example\n * ```typescript\n * await client.apiKeys.delete('key-uuid');\n * console.log('API key revoked');\n * ```\n */\n async delete(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<MessageResponse> {\n return this.http.delete<MessageResponse>(`/api-keys/${id}`, requestOptions);\n }\n}\n","/**\n * Auth Resource\n *\n * @packageDocumentation\n */\n\nimport type { HttpClient, RequestOptions } from '../client.js';\nimport type { MessageResponse, SingleResponse } from '../types/common.js';\nimport type {\n AuthResponse,\n ForgotPasswordInput,\n LoginCredentials,\n RegisterInput,\n ResetPasswordInput,\n User,\n} from '../types/auth.js';\n\n/**\n * Auth API resource\n *\n * Note: Most auth endpoints are only used during initial setup.\n * After login, use the returned token to create a ScellClient.\n *\n * @example\n * ```typescript\n * // Login and get token\n * const auth = await ScellAuth.login({\n * email: 'user@example.com',\n * password: 'password'\n * });\n *\n * // Create client with token\n * const client = new ScellClient(auth.token);\n *\n * // Get current user\n * const user = await client.auth.me();\n * ```\n */\nexport class AuthResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Get current authenticated user\n *\n * @param requestOptions - Request options\n * @returns Current user details\n *\n * @example\n * ```typescript\n * const { data: user } = await client.auth.me();\n * console.log(`Logged in as: ${user.name} (${user.email})`);\n * ```\n */\n async me(requestOptions?: RequestOptions): Promise<SingleResponse<User>> {\n return this.http.get<SingleResponse<User>>(\n '/auth/me',\n undefined,\n requestOptions\n );\n }\n\n /**\n * Logout (revoke current token)\n *\n * @param requestOptions - Request options\n * @returns Logout confirmation\n *\n * @example\n * ```typescript\n * await client.auth.logout();\n * // Token is now invalid\n * ```\n */\n async logout(requestOptions?: RequestOptions): Promise<MessageResponse> {\n return this.http.post<MessageResponse>(\n '/auth/logout',\n undefined,\n requestOptions\n );\n }\n}\n\n/**\n * Static auth methods (don't require authentication)\n *\n * @example\n * ```typescript\n * import { ScellAuth } from '@scell/sdk';\n *\n * // Register new user\n * const auth = await ScellAuth.register({\n * name: 'John Doe',\n * email: 'john@example.com',\n * password: 'securepassword123',\n * password_confirmation: 'securepassword123'\n * });\n *\n * // Login existing user\n * const auth = await ScellAuth.login({\n * email: 'john@example.com',\n * password: 'securepassword123'\n * });\n *\n * // Use the token\n * const client = new ScellClient(auth.token);\n * ```\n */\nexport const ScellAuth = {\n /**\n * Default base URL for auth requests\n */\n baseUrl: 'https://api.scell.io/api/v1',\n\n /**\n * Register a new user\n *\n * @param input - Registration data\n * @param baseUrl - Optional base URL override\n * @returns Auth response with token\n *\n * @example\n * ```typescript\n * const auth = await ScellAuth.register({\n * name: 'Jane Doe',\n * email: 'jane@example.com',\n * password: 'MySecurePassword123!',\n * password_confirmation: 'MySecurePassword123!'\n * });\n *\n * console.log('Welcome,', auth.user.name);\n * const client = new ScellClient(auth.token);\n * ```\n */\n async register(\n input: RegisterInput,\n baseUrl?: string\n ): Promise<AuthResponse> {\n const url = `${baseUrl ?? this.baseUrl}/auth/register`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify(input),\n });\n\n const body = await response.json();\n\n if (!response.ok) {\n const { parseApiError } = await import('../errors.js');\n parseApiError(response.status, body, response.headers);\n }\n\n return body as AuthResponse;\n },\n\n /**\n * Login an existing user\n *\n * @param credentials - Login credentials\n * @param baseUrl - Optional base URL override\n * @returns Auth response with token\n *\n * @example\n * ```typescript\n * const auth = await ScellAuth.login({\n * email: 'user@example.com',\n * password: 'password'\n * });\n *\n * // Store the token securely\n * localStorage.setItem('scell_token', auth.token);\n *\n * // Create client\n * const client = new ScellClient(auth.token);\n * ```\n */\n async login(\n credentials: LoginCredentials,\n baseUrl?: string\n ): Promise<AuthResponse> {\n const url = `${baseUrl ?? this.baseUrl}/auth/login`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify(credentials),\n });\n\n const body = await response.json();\n\n if (!response.ok) {\n const { parseApiError } = await import('../errors.js');\n parseApiError(response.status, body, response.headers);\n }\n\n return body as AuthResponse;\n },\n\n /**\n * Request password reset email\n *\n * @param input - Email address\n * @param baseUrl - Optional base URL override\n * @returns Confirmation message\n *\n * @example\n * ```typescript\n * await ScellAuth.forgotPassword({\n * email: 'user@example.com'\n * });\n * console.log('Check your email for reset link');\n * ```\n */\n async forgotPassword(\n input: ForgotPasswordInput,\n baseUrl?: string\n ): Promise<MessageResponse> {\n const url = `${baseUrl ?? this.baseUrl}/auth/forgot-password`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify(input),\n });\n\n const body = await response.json();\n\n if (!response.ok) {\n const { parseApiError } = await import('../errors.js');\n parseApiError(response.status, body, response.headers);\n }\n\n return body as MessageResponse;\n },\n\n /**\n * Reset password with token from email\n *\n * @param input - Reset password data\n * @param baseUrl - Optional base URL override\n * @returns Confirmation message\n *\n * @example\n * ```typescript\n * await ScellAuth.resetPassword({\n * email: 'user@example.com',\n * token: 'reset-token-from-email',\n * password: 'NewSecurePassword123!',\n * password_confirmation: 'NewSecurePassword123!'\n * });\n * ```\n */\n async resetPassword(\n input: ResetPasswordInput,\n baseUrl?: string\n ): Promise<MessageResponse> {\n const url = `${baseUrl ?? this.baseUrl}/auth/reset-password`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify(input),\n });\n\n const body = await response.json();\n\n if (!response.ok) {\n const { parseApiError } = await import('../errors.js');\n parseApiError(response.status, body, response.headers);\n }\n\n return body as MessageResponse;\n },\n};\n","/**\n * Balance Resource\n *\n * @packageDocumentation\n */\n\nimport type { HttpClient, RequestOptions } from '../client.js';\nimport type {\n MessageWithDataResponse,\n PaginatedResponse,\n SingleResponse,\n} from '../types/common.js';\nimport type {\n Balance,\n ReloadBalanceInput,\n ReloadBalanceResponse,\n Transaction,\n TransactionListOptions,\n UpdateBalanceSettingsInput,\n} from '../types/balance.js';\n\n/**\n * Balance API resource\n *\n * @example\n * ```typescript\n * // Check balance\n * const balance = await client.balance.get();\n * console.log(`Current balance: ${balance.amount} ${balance.currency}`);\n *\n * // Reload balance\n * await client.balance.reload({ amount: 100 });\n *\n * // View transactions\n * const transactions = await client.balance.transactions({\n * type: 'debit',\n * service: 'invoice'\n * });\n * ```\n */\nexport class BalanceResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Get current balance and settings\n *\n * @param requestOptions - Request options\n * @returns Current balance details\n *\n * @example\n * ```typescript\n * const { data: balance } = await client.balance.get();\n * console.log(`Balance: ${balance.amount} ${balance.currency}`);\n *\n * if (balance.amount < balance.low_balance_alert_threshold) {\n * console.log('Warning: Low balance!');\n * }\n * ```\n */\n async get(requestOptions?: RequestOptions): Promise<SingleResponse<Balance>> {\n return this.http.get<SingleResponse<Balance>>(\n '/balance',\n undefined,\n requestOptions\n );\n }\n\n /**\n * Reload balance\n *\n * Note: This is a simulation endpoint. In production, use Stripe integration.\n *\n * @param input - Reload amount (10-10000 EUR)\n * @param requestOptions - Request options\n * @returns Reload transaction details\n *\n * @example\n * ```typescript\n * const { transaction } = await client.balance.reload({ amount: 100 });\n * console.log(`New balance: ${transaction.balance_after}`);\n * ```\n */\n async reload(\n input: ReloadBalanceInput,\n requestOptions?: RequestOptions\n ): Promise<ReloadBalanceResponse> {\n return this.http.post<ReloadBalanceResponse>(\n '/balance/reload',\n input,\n requestOptions\n );\n }\n\n /**\n * Update balance settings\n *\n * Configure auto-reload and alert thresholds.\n *\n * @param input - Settings to update\n * @param requestOptions - Request options\n * @returns Updated settings\n *\n * @example\n * ```typescript\n * await client.balance.updateSettings({\n * auto_reload_enabled: true,\n * auto_reload_threshold: 50,\n * auto_reload_amount: 200,\n * low_balance_alert_threshold: 100,\n * critical_balance_alert_threshold: 25\n * });\n * ```\n */\n async updateSettings(\n input: UpdateBalanceSettingsInput,\n requestOptions?: RequestOptions\n ): Promise<MessageWithDataResponse<Partial<Balance>>> {\n return this.http.put<MessageWithDataResponse<Partial<Balance>>>(\n '/balance/settings',\n input,\n requestOptions\n );\n }\n\n /**\n * List balance transactions\n *\n * @param options - Filter and pagination options\n * @param requestOptions - Request options\n * @returns Paginated list of transactions\n *\n * @example\n * ```typescript\n * // List all invoice debits\n * const { data, meta } = await client.balance.transactions({\n * type: 'debit',\n * service: 'invoice',\n * from: '2024-01-01',\n * to: '2024-01-31'\n * });\n *\n * data.forEach(tx => {\n * console.log(`${tx.description}: -${tx.amount} EUR`);\n * });\n * ```\n */\n async transactions(\n options: TransactionListOptions = {},\n requestOptions?: RequestOptions\n ): Promise<PaginatedResponse<Transaction>> {\n return this.http.get<PaginatedResponse<Transaction>>(\n '/balance/transactions',\n options as Record<string, string | number | boolean | undefined>,\n requestOptions\n );\n }\n}\n","/**\n * Companies Resource\n *\n * @packageDocumentation\n */\n\nimport type { HttpClient, RequestOptions } from '../client.js';\nimport type {\n MessageResponse,\n MessageWithDataResponse,\n SingleResponse,\n} from '../types/common.js';\nimport type {\n Company,\n CreateCompanyInput,\n KycInitiateResponse,\n KycStatusResponse,\n UpdateCompanyInput,\n} from '../types/companies.js';\n\n/**\n * Companies API resource\n *\n * @example\n * ```typescript\n * // Create a company\n * const company = await client.companies.create({\n * name: 'My Company',\n * siret: '12345678901234',\n * address_line1: '1 Rue de la Paix',\n * postal_code: '75001',\n * city: 'Paris'\n * });\n *\n * // Initiate KYC\n * const kyc = await client.companies.initiateKyc(company.id);\n * console.log('KYC URL:', kyc.redirect_url);\n * ```\n */\nexport class CompaniesResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List all companies for the authenticated user\n *\n * @param requestOptions - Request options\n * @returns List of companies\n *\n * @example\n * ```typescript\n * const { data: companies } = await client.companies.list();\n * companies.forEach(c => console.log(c.name, c.status));\n * ```\n */\n async list(\n requestOptions?: RequestOptions\n ): Promise<{ data: Company[] }> {\n return this.http.get<{ data: Company[] }>(\n '/companies',\n undefined,\n requestOptions\n );\n }\n\n /**\n * Get a specific company by ID\n *\n * @param id - Company UUID\n * @param requestOptions - Request options\n * @returns Company details\n *\n * @example\n * ```typescript\n * const { data: company } = await client.companies.get('uuid');\n * console.log(company.name, company.siret);\n * ```\n */\n async get(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<Company>> {\n return this.http.get<SingleResponse<Company>>(\n `/companies/${id}`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Create a new company\n *\n * @param input - Company creation data\n * @param requestOptions - Request options\n * @returns Created company\n *\n * @example\n * ```typescript\n * const { data: company } = await client.companies.create({\n * name: 'Acme Corp',\n * siret: '12345678901234',\n * vat_number: 'FR12345678901',\n * legal_form: 'SAS',\n * address_line1: '123 Business Street',\n * postal_code: '75001',\n * city: 'Paris',\n * country: 'FR',\n * email: 'contact@acme.com',\n * phone: '+33 1 23 45 67 89'\n * });\n * ```\n */\n async create(\n input: CreateCompanyInput,\n requestOptions?: RequestOptions\n ): Promise<MessageWithDataResponse<Company>> {\n return this.http.post<MessageWithDataResponse<Company>>(\n '/companies',\n input,\n requestOptions\n );\n }\n\n /**\n * Update a company\n *\n * @param id - Company UUID\n * @param input - Fields to update\n * @param requestOptions - Request options\n * @returns Updated company\n *\n * @example\n * ```typescript\n * const { data: company } = await client.companies.update('uuid', {\n * email: 'new-email@acme.com',\n * phone: '+33 1 98 76 54 32'\n * });\n * ```\n */\n async update(\n id: string,\n input: UpdateCompanyInput,\n requestOptions?: RequestOptions\n ): Promise<MessageWithDataResponse<Company>> {\n return this.http.put<MessageWithDataResponse<Company>>(\n `/companies/${id}`,\n input,\n requestOptions\n );\n }\n\n /**\n * Delete a company\n *\n * @param id - Company UUID\n * @param requestOptions - Request options\n * @returns Deletion confirmation\n *\n * @example\n * ```typescript\n * await client.companies.delete('company-uuid');\n * ```\n */\n async delete(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<MessageResponse> {\n return this.http.delete<MessageResponse>(\n `/companies/${id}`,\n requestOptions\n );\n }\n\n /**\n * Initiate KYC verification for a company\n *\n * @param id - Company UUID\n * @param requestOptions - Request options\n * @returns KYC reference and redirect URL\n *\n * @example\n * ```typescript\n * const { kyc_reference, redirect_url } = await client.companies.initiateKyc(\n * 'company-uuid'\n * );\n * // Redirect user to redirect_url for KYC verification\n * ```\n */\n async initiateKyc(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<KycInitiateResponse> {\n return this.http.post<KycInitiateResponse>(\n `/companies/${id}/kyc`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Get KYC verification status\n *\n * @param id - Company UUID\n * @param requestOptions - Request options\n * @returns Current KYC status\n *\n * @example\n * ```typescript\n * const status = await client.companies.kycStatus('company-uuid');\n * if (status.status === 'active') {\n * console.log('KYC completed at:', status.kyc_completed_at);\n * }\n * ```\n */\n async kycStatus(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<KycStatusResponse> {\n return this.http.get<KycStatusResponse>(\n `/companies/${id}/kyc/status`,\n undefined,\n requestOptions\n );\n }\n}\n","/**\n * Invoices Resource\n *\n * @packageDocumentation\n */\n\nimport type { HttpClient, RequestOptions } from '../client.js';\nimport type {\n MessageWithDataResponse,\n PaginatedResponse,\n SingleResponse,\n} from '../types/common.js';\nimport type {\n AcceptInvoiceInput,\n AuditTrailResponse,\n ConvertInvoiceInput,\n CreateInvoiceInput,\n DisputeInvoiceInput,\n IncomingInvoiceParams,\n Invoice,\n InvoiceDownloadResponse,\n InvoiceDownloadType,\n InvoiceFileFormat,\n InvoiceListOptions,\n MarkPaidInput,\n RejectInvoiceInput,\n} from '../types/invoices.js';\n\n/**\n * Invoices API resource\n *\n * @example\n * ```typescript\n * // List invoices\n * const invoices = await client.invoices.list({\n * direction: 'outgoing',\n * status: 'validated'\n * });\n *\n * // Create an invoice\n * const invoice = await client.invoices.create({\n * invoice_number: 'FACT-2024-001',\n * direction: 'outgoing',\n * output_format: 'facturx',\n * // ...\n * });\n *\n * // Download invoice\n * const download = await client.invoices.download(invoice.id, 'pdf');\n * console.log('Download URL:', download.url);\n * ```\n */\nexport class InvoicesResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List invoices with optional filtering\n *\n * @param options - Filter and pagination options\n * @param requestOptions - Request options\n * @returns Paginated list of invoices\n *\n * @example\n * ```typescript\n * // List all outgoing invoices\n * const { data, meta } = await client.invoices.list({\n * direction: 'outgoing',\n * per_page: 50\n * });\n * console.log(`Found ${meta.total} invoices`);\n * ```\n */\n async list(\n options: InvoiceListOptions = {},\n requestOptions?: RequestOptions\n ): Promise<PaginatedResponse<Invoice>> {\n return this.http.get<PaginatedResponse<Invoice>>(\n '/invoices',\n options as Record<string, string | number | boolean | undefined>,\n requestOptions\n );\n }\n\n /**\n * Get a specific invoice by ID\n *\n * @param id - Invoice UUID\n * @param requestOptions - Request options\n * @returns Invoice details\n *\n * @example\n * ```typescript\n * const { data: invoice } = await client.invoices.get('uuid-here');\n * console.log('Invoice number:', invoice.invoice_number);\n * ```\n */\n async get(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<Invoice>> {\n return this.http.get<SingleResponse<Invoice>>(\n `/invoices/${id}`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Create a new invoice\n *\n * Note: This endpoint requires API key authentication.\n * Creating an invoice in production mode will debit your balance.\n *\n * @param input - Invoice creation data\n * @param requestOptions - Request options\n * @returns Created invoice\n *\n * @example\n * ```typescript\n * const { data: invoice } = await client.invoices.create({\n * invoice_number: 'FACT-2024-001',\n * direction: 'outgoing',\n * output_format: 'facturx',\n * issue_date: '2024-01-15',\n * total_ht: 100.00,\n * total_tax: 20.00,\n * total_ttc: 120.00,\n * seller_siret: '12345678901234',\n * seller_name: 'My Company',\n * seller_address: {\n * line1: '1 Rue Example',\n * postal_code: '75001',\n * city: 'Paris',\n * country: 'FR'\n * },\n * buyer_siret: '98765432109876',\n * buyer_name: 'Client Company',\n * buyer_address: {\n * line1: '2 Avenue Test',\n * postal_code: '75002',\n * city: 'Paris',\n * country: 'FR'\n * },\n * lines: [{\n * description: 'Service prestation',\n * quantity: 1,\n * unit_price: 100.00,\n * tax_rate: 20.00,\n * total_ht: 100.00,\n * total_tax: 20.00,\n * total_ttc: 120.00\n * }]\n * });\n * ```\n */\n async create(\n input: CreateInvoiceInput,\n requestOptions?: RequestOptions\n ): Promise<MessageWithDataResponse<Invoice>> {\n return this.http.post<MessageWithDataResponse<Invoice>>(\n '/invoices',\n input,\n requestOptions\n );\n }\n\n /**\n * Download invoice file\n *\n * @param id - Invoice UUID\n * @param type - File type to download\n * @param requestOptions - Request options\n * @returns Temporary download URL\n *\n * @example\n * ```typescript\n * // Download PDF version\n * const { url, expires_at } = await client.invoices.download(\n * 'invoice-uuid',\n * 'pdf'\n * );\n * console.log('Download before:', expires_at);\n * ```\n */\n async download(\n id: string,\n type: InvoiceDownloadType,\n requestOptions?: RequestOptions\n ): Promise<InvoiceDownloadResponse> {\n return this.http.get<InvoiceDownloadResponse>(\n `/invoices/${id}/download/${type}`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Get invoice audit trail (Piste d'Audit Fiable)\n *\n * @param id - Invoice UUID\n * @param requestOptions - Request options\n * @returns Audit trail entries with integrity validation\n *\n * @example\n * ```typescript\n * const { data: entries, integrity_valid } = await client.invoices.auditTrail(\n * 'invoice-uuid'\n * );\n *\n * if (integrity_valid) {\n * console.log('Audit trail is valid');\n * entries.forEach(e => console.log(e.action, e.created_at));\n * }\n * ```\n */\n async auditTrail(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<AuditTrailResponse> {\n return this.http.get<AuditTrailResponse>(\n `/invoices/${id}/audit-trail`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Convert invoice to another format\n *\n * @param input - Conversion parameters\n * @param requestOptions - Request options\n * @returns Conversion status\n *\n * @example\n * ```typescript\n * await client.invoices.convert({\n * invoice_id: 'invoice-uuid',\n * target_format: 'ubl'\n * });\n * ```\n */\n async convert(\n input: ConvertInvoiceInput,\n requestOptions?: RequestOptions\n ): Promise<{ message: string; invoice_id: string; target_format: string }> {\n return this.http.post<{\n message: string;\n invoice_id: string;\n target_format: string;\n }>('/invoices/convert', input, requestOptions);\n }\n\n /**\n * List incoming invoices (from suppliers)\n *\n * Returns invoices where your company is the buyer.\n *\n * @param params - Filter and pagination options\n * @param requestOptions - Request options\n * @returns Paginated list of incoming invoices\n *\n * @example\n * ```typescript\n * // List all incoming invoices\n * const { data, meta } = await client.invoices.incoming({\n * status: 'pending',\n * per_page: 50\n * });\n * console.log(`Found ${meta.total} incoming invoices`);\n *\n * // Filter by seller\n * const fromSupplier = await client.invoices.incoming({\n * seller_siret: '12345678901234'\n * });\n * ```\n */\n async incoming(\n params: IncomingInvoiceParams = {},\n requestOptions?: RequestOptions\n ): Promise<PaginatedResponse<Invoice>> {\n return this.http.get<PaginatedResponse<Invoice>>(\n '/invoices/incoming',\n params as Record<string, string | number | boolean | undefined>,\n requestOptions\n );\n }\n\n /**\n * Accept an incoming invoice\n *\n * Mark an incoming invoice as accepted, optionally specifying a payment date.\n *\n * @param id - Invoice UUID\n * @param data - Optional acceptance data\n * @param requestOptions - Request options\n * @returns Updated invoice\n *\n * @example\n * ```typescript\n * // Accept with payment date\n * const { data: invoice } = await client.invoices.accept('invoice-uuid', {\n * payment_date: '2024-02-15',\n * note: 'Approved by accounting'\n * });\n *\n * // Simple acceptance\n * await client.invoices.accept('invoice-uuid');\n * ```\n */\n async accept(\n id: string,\n data?: AcceptInvoiceInput,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<Invoice>> {\n return this.http.post<SingleResponse<Invoice>>(\n `/invoices/${id}/accept`,\n data,\n requestOptions\n );\n }\n\n /**\n * Reject an incoming invoice\n *\n * Mark an incoming invoice as rejected with a reason.\n *\n * @param id - Invoice UUID\n * @param data - Rejection details\n * @param requestOptions - Request options\n * @returns Updated invoice\n *\n * @example\n * ```typescript\n * const { data: invoice } = await client.invoices.reject('invoice-uuid', {\n * reason: 'Invoice amount does not match purchase order',\n * reason_code: 'incorrect_amount'\n * });\n * ```\n */\n async reject(\n id: string,\n data: RejectInvoiceInput,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<Invoice>> {\n return this.http.post<SingleResponse<Invoice>>(\n `/invoices/${id}/reject`,\n data,\n requestOptions\n );\n }\n\n /**\n * Dispute an incoming invoice\n *\n * Open a dispute on an incoming invoice for resolution.\n *\n * @param id - Invoice UUID\n * @param data - Dispute details\n * @param requestOptions - Request options\n * @returns Updated invoice\n *\n * @example\n * ```typescript\n * const { data: invoice } = await client.invoices.dispute('invoice-uuid', {\n * reason: 'Billed amount exceeds agreed price',\n * dispute_type: 'amount_dispute',\n * expected_amount: 950.00\n * });\n * ```\n */\n async dispute(\n id: string,\n data: DisputeInvoiceInput,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<Invoice>> {\n return this.http.post<SingleResponse<Invoice>>(\n `/invoices/${id}/dispute`,\n data,\n requestOptions\n );\n }\n\n /**\n * Mark an incoming invoice as paid\n *\n * This is a mandatory step in the French e-invoicing lifecycle for incoming invoices.\n * Once marked as paid, the invoice status changes to 'paid' and payment details are recorded.\n *\n * @param id - Invoice UUID\n * @param data - Optional payment details (reference, date, note)\n * @param requestOptions - Request options\n * @returns Updated invoice with payment information\n *\n * @example\n * ```typescript\n * // Mark as paid with payment details\n * const { data: invoice } = await client.invoices.markPaid('invoice-uuid', {\n * payment_reference: 'VIR-2026-0124',\n * paid_at: '2026-01-24T10:30:00Z',\n * note: 'Payment received via bank transfer'\n * });\n *\n * // Simple mark as paid (uses current date/time)\n * await client.invoices.markPaid('invoice-uuid');\n * ```\n */\n async markPaid(\n id: string,\n data?: MarkPaidInput,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<Invoice>> {\n return this.http.post<SingleResponse<Invoice>>(\n `/invoices/${id}/mark-paid`,\n data,\n requestOptions\n );\n }\n\n /**\n * Download invoice source file as binary content\n *\n * Downloads the original invoice file (PDF with embedded XML for Factur-X,\n * or standalone XML for UBL/CII formats).\n *\n * @param id - Invoice UUID\n * @param format - File format to download: 'pdf' (default) or 'xml'\n * @param requestOptions - Request options\n * @returns ArrayBuffer containing the file content\n *\n * @example\n * ```typescript\n * // Download invoice as PDF (Factur-X)\n * const pdfBuffer = await client.invoices.downloadFile('invoice-uuid');\n *\n * // In Node.js, save to file:\n * import { writeFileSync } from 'fs';\n * writeFileSync('invoice.pdf', Buffer.from(pdfBuffer));\n *\n * // Download XML version (UBL/CII)\n * const xmlBuffer = await client.invoices.downloadFile('invoice-uuid', 'xml');\n * writeFileSync('invoice.xml', Buffer.from(xmlBuffer));\n *\n * // In browser, trigger download:\n * const blob = new Blob([pdfBuffer], { type: 'application/pdf' });\n * const url = URL.createObjectURL(blob);\n * const a = document.createElement('a');\n * a.href = url;\n * a.download = 'invoice.pdf';\n * a.click();\n * ```\n */\n async downloadFile(\n id: string,\n format: InvoiceFileFormat = 'pdf',\n requestOptions?: RequestOptions\n ): Promise<ArrayBuffer> {\n return this.http.getRaw(\n `/invoices/${id}/download`,\n { format },\n requestOptions\n );\n }\n}\n","/**\n * Signatures Resource\n *\n * @packageDocumentation\n */\n\nimport type { HttpClient, RequestOptions } from '../client.js';\nimport type {\n MessageResponse,\n MessageWithDataResponse,\n PaginatedResponse,\n SingleResponse,\n} from '../types/common.js';\nimport type {\n CreateSignatureInput,\n Signature,\n SignatureDownloadResponse,\n SignatureDownloadType,\n SignatureListOptions,\n SignatureRemindResponse,\n} from '../types/signatures.js';\n\n/**\n * Signatures API resource\n *\n * @example\n * ```typescript\n * // Create a signature request\n * const signature = await client.signatures.create({\n * title: 'Employment Contract',\n * document: btoa(pdfContent), // Base64 encoded\n * document_name: 'contract.pdf',\n * signers: [{\n * first_name: 'John',\n * last_name: 'Doe',\n * email: 'john@example.com',\n * auth_method: 'email'\n * }]\n * });\n *\n * // Send reminder\n * await client.signatures.remind(signature.id);\n * ```\n */\nexport class SignaturesResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List signature requests with optional filtering\n *\n * @param options - Filter and pagination options\n * @param requestOptions - Request options\n * @returns Paginated list of signatures\n *\n * @example\n * ```typescript\n * const { data, meta } = await client.signatures.list({\n * status: 'pending',\n * per_page: 25\n * });\n * console.log(`${meta.total} pending signatures`);\n * ```\n */\n async list(\n options: SignatureListOptions = {},\n requestOptions?: RequestOptions\n ): Promise<PaginatedResponse<Signature>> {\n return this.http.get<PaginatedResponse<Signature>>(\n '/signatures',\n options as Record<string, string | number | boolean | undefined>,\n requestOptions\n );\n }\n\n /**\n * Get a specific signature by ID\n *\n * @param id - Signature UUID\n * @param requestOptions - Request options\n * @returns Signature details with signers\n *\n * @example\n * ```typescript\n * const { data: signature } = await client.signatures.get('uuid-here');\n * signature.signers?.forEach(signer => {\n * console.log(`${signer.full_name}: ${signer.status}`);\n * });\n * ```\n */\n async get(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<Signature>> {\n return this.http.get<SingleResponse<Signature>>(\n `/signatures/${id}`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Create a new signature request\n *\n * Note: This endpoint requires API key authentication.\n * Creating a signature in production mode will debit your balance.\n *\n * @param input - Signature creation data\n * @param requestOptions - Request options\n * @returns Created signature\n *\n * @example\n * ```typescript\n * import { readFileSync } from 'fs';\n *\n * const pdfContent = readFileSync('contract.pdf');\n * const { data: signature } = await client.signatures.create({\n * title: 'Service Agreement',\n * description: 'Annual service contract',\n * document: pdfContent.toString('base64'),\n * document_name: 'contract.pdf',\n * signers: [\n * {\n * first_name: 'Alice',\n * last_name: 'Smith',\n * email: 'alice@example.com',\n * auth_method: 'email'\n * },\n * {\n * first_name: 'Bob',\n * last_name: 'Jones',\n * phone: '+33612345678',\n * auth_method: 'sms'\n * }\n * ],\n * ui_config: {\n * logo_url: 'https://mycompany.com/logo.png',\n * primary_color: '#3b82f6',\n * company_name: 'My Company'\n * },\n * redirect_complete_url: 'https://myapp.com/signed',\n * redirect_cancel_url: 'https://myapp.com/cancelled'\n * });\n *\n * // Send signing URLs to signers\n * signature.signers?.forEach(signer => {\n * console.log(`${signer.email}: ${signer.signing_url}`);\n * });\n * ```\n */\n async create(\n input: CreateSignatureInput,\n requestOptions?: RequestOptions\n ): Promise<MessageWithDataResponse<Signature>> {\n return this.http.post<MessageWithDataResponse<Signature>>(\n '/signatures',\n input,\n requestOptions\n );\n }\n\n /**\n * Download signature files\n *\n * @param id - Signature UUID\n * @param type - File type to download\n * @param requestOptions - Request options\n * @returns Temporary download URL\n *\n * @example\n * ```typescript\n * // Download signed document\n * const { url } = await client.signatures.download(\n * 'signature-uuid',\n * 'signed'\n * );\n *\n * // Download audit trail (proof file)\n * const { url: auditUrl } = await client.signatures.download(\n * 'signature-uuid',\n * 'audit_trail'\n * );\n * ```\n */\n async download(\n id: string,\n type: SignatureDownloadType,\n requestOptions?: RequestOptions\n ): Promise<SignatureDownloadResponse> {\n return this.http.get<SignatureDownloadResponse>(\n `/signatures/${id}/download/${type}`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Send reminder to pending signers\n *\n * @param id - Signature UUID\n * @param requestOptions - Request options\n * @returns Number of signers reminded\n *\n * @example\n * ```typescript\n * const { signers_reminded } = await client.signatures.remind('uuid');\n * console.log(`Reminded ${signers_reminded} signers`);\n * ```\n */\n async remind(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<SignatureRemindResponse> {\n return this.http.post<SignatureRemindResponse>(\n `/signatures/${id}/remind`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Cancel a signature request\n *\n * Note: Cannot cancel completed signatures.\n *\n * @param id - Signature UUID\n * @param requestOptions - Request options\n * @returns Cancellation confirmation\n *\n * @example\n * ```typescript\n * await client.signatures.cancel('signature-uuid');\n * console.log('Signature cancelled');\n * ```\n */\n async cancel(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<MessageResponse> {\n return this.http.post<MessageResponse>(\n `/signatures/${id}/cancel`,\n undefined,\n requestOptions\n );\n }\n}\n","/**\n * Webhooks Resource\n *\n * @packageDocumentation\n */\n\nimport type { HttpClient, RequestOptions } from '../client.js';\nimport type {\n MessageResponse,\n MessageWithDataResponse,\n PaginatedResponse,\n} from '../types/common.js';\nimport type {\n CreateWebhookInput,\n UpdateWebhookInput,\n Webhook,\n WebhookListOptions,\n WebhookLog,\n WebhookTestResponse,\n WebhookWithSecret,\n} from '../types/webhooks.js';\n\n/**\n * Webhooks API resource\n *\n * @example\n * ```typescript\n * // Create a webhook\n * const webhook = await client.webhooks.create({\n * url: 'https://myapp.com/webhooks/scell',\n * events: ['invoice.validated', 'signature.completed'],\n * environment: 'production'\n * });\n *\n * // Store the secret securely!\n * console.log('Webhook secret:', webhook.secret);\n *\n * // Test the webhook\n * const test = await client.webhooks.test(webhook.id);\n * console.log('Test success:', test.success);\n * ```\n */\nexport class WebhooksResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List all webhooks\n *\n * @param options - Filter options\n * @param requestOptions - Request options\n * @returns List of webhooks\n *\n * @example\n * ```typescript\n * const { data: webhooks } = await client.webhooks.list();\n * webhooks.forEach(wh => {\n * console.log(`${wh.url}: ${wh.is_active ? 'active' : 'inactive'}`);\n * });\n * ```\n */\n async list(\n options: WebhookListOptions = {},\n requestOptions?: RequestOptions\n ): Promise<{ data: Webhook[] }> {\n return this.http.get<{ data: Webhook[] }>(\n '/webhooks',\n options as Record<string, string | number | boolean | undefined>,\n requestOptions\n );\n }\n\n /**\n * Create a new webhook\n *\n * Important: The secret is only returned once during creation.\n * Store it securely - you'll need it to verify webhook signatures.\n *\n * @param input - Webhook configuration\n * @param requestOptions - Request options\n * @returns Created webhook with secret\n *\n * @example\n * ```typescript\n * const { data: webhook } = await client.webhooks.create({\n * url: 'https://myapp.com/webhooks/scell',\n * events: [\n * 'invoice.created',\n * 'invoice.validated',\n * 'signature.completed',\n * 'balance.low'\n * ],\n * environment: 'production',\n * headers: {\n * 'X-Custom-Auth': 'my-secret-token'\n * },\n * retry_count: 5,\n * timeout_seconds: 30\n * });\n *\n * // IMPORTANT: Store this secret securely!\n * await saveWebhookSecret(webhook.id, webhook.secret);\n * ```\n */\n async create(\n input: CreateWebhookInput,\n requestOptions?: RequestOptions\n ): Promise<MessageWithDataResponse<WebhookWithSecret>> {\n return this.http.post<MessageWithDataResponse<WebhookWithSecret>>(\n '/webhooks',\n input,\n requestOptions\n );\n }\n\n /**\n * Update a webhook\n *\n * @param id - Webhook UUID\n * @param input - Fields to update\n * @param requestOptions - Request options\n * @returns Updated webhook\n *\n * @example\n * ```typescript\n * // Disable a webhook temporarily\n * await client.webhooks.update('webhook-uuid', {\n * is_active: false\n * });\n *\n * // Update events\n * await client.webhooks.update('webhook-uuid', {\n * events: ['invoice.validated', 'signature.completed']\n * });\n * ```\n */\n async update(\n id: string,\n input: UpdateWebhookInput,\n requestOptions?: RequestOptions\n ): Promise<MessageWithDataResponse<Webhook>> {\n return this.http.put<MessageWithDataResponse<Webhook>>(\n `/webhooks/${id}`,\n input,\n requestOptions\n );\n }\n\n /**\n * Delete a webhook\n *\n * @param id - Webhook UUID\n * @param requestOptions - Request options\n * @returns Deletion confirmation\n *\n * @example\n * ```typescript\n * await client.webhooks.delete('webhook-uuid');\n * ```\n */\n async delete(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<MessageResponse> {\n return this.http.delete<MessageResponse>(`/webhooks/${id}`, requestOptions);\n }\n\n /**\n * Regenerate webhook secret\n *\n * Use this if your secret has been compromised.\n * The old secret will immediately stop working.\n *\n * @param id - Webhook UUID\n * @param requestOptions - Request options\n * @returns Webhook with new secret\n *\n * @example\n * ```typescript\n * const { data: webhook } = await client.webhooks.regenerateSecret(\n * 'webhook-uuid'\n * );\n *\n * // Update your stored secret\n * await updateWebhookSecret(webhook.id, webhook.secret);\n * ```\n */\n async regenerateSecret(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<MessageWithDataResponse<WebhookWithSecret>> {\n return this.http.post<MessageWithDataResponse<WebhookWithSecret>>(\n `/webhooks/${id}/regenerate-secret`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Test webhook by sending a test event\n *\n * @param id - Webhook UUID\n * @param requestOptions - Request options\n * @returns Test result\n *\n * @example\n * ```typescript\n * const result = await client.webhooks.test('webhook-uuid');\n *\n * if (result.success) {\n * console.log(`Success! Response time: ${result.response_time_ms}ms`);\n * } else {\n * console.log(`Failed: ${result.error}`);\n * }\n * ```\n */\n async test(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<WebhookTestResponse> {\n return this.http.post<WebhookTestResponse>(\n `/webhooks/${id}/test`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Get webhook delivery logs\n *\n * @param id - Webhook UUID\n * @param options - Pagination options\n * @param requestOptions - Request options\n * @returns Paginated list of logs\n *\n * @example\n * ```typescript\n * const { data: logs } = await client.webhooks.logs('webhook-uuid', {\n * per_page: 50\n * });\n *\n * logs.forEach(log => {\n * const status = log.success ? 'OK' : 'FAILED';\n * console.log(`${log.event} - ${status} (${log.response_time_ms}ms)`);\n * });\n * ```\n */\n async logs(\n id: string,\n options: { per_page?: number } = {},\n requestOptions?: RequestOptions\n ): Promise<PaginatedResponse<WebhookLog>> {\n return this.http.get<PaginatedResponse<WebhookLog>>(\n `/webhooks/${id}/logs`,\n options,\n requestOptions\n );\n }\n}\n","/**\n * Webhook signature verification utility\n *\n * @packageDocumentation\n */\n\nimport type { WebhookPayload } from '../types/webhooks.js';\n\n/**\n * Signature verification options\n */\nexport interface VerifySignatureOptions {\n /** Tolerance in seconds for timestamp validation (default: 300 = 5 minutes) */\n tolerance?: number | undefined;\n}\n\n/**\n * Parse the X-Scell-Signature header\n *\n * @param header - The signature header value (format: \"t=timestamp,v1=signature\")\n * @returns Parsed timestamp and signature\n */\nfunction parseSignatureHeader(header: string): {\n timestamp: number;\n signature: string;\n} | null {\n const parts = header.split(',');\n let timestamp: number | undefined;\n let signature: string | undefined;\n\n for (const part of parts) {\n const splitIndex = part.indexOf('=');\n if (splitIndex === -1) continue;\n\n const key = part.substring(0, splitIndex);\n const value = part.substring(splitIndex + 1);\n\n if (key === 't') {\n timestamp = parseInt(value, 10);\n } else if (key === 'v1') {\n signature = value;\n }\n }\n\n if (timestamp === undefined || signature === undefined) {\n return null;\n }\n\n return { timestamp, signature };\n}\n\n/**\n * Compute HMAC-SHA256 signature\n *\n * @param payload - The payload string\n * @param timestamp - The timestamp\n * @param secret - The webhook secret\n * @returns Hex-encoded signature\n */\nasync function computeSignature(\n payload: string,\n timestamp: number,\n secret: string\n): Promise<string> {\n const signedPayload = `${timestamp}.${payload}`;\n\n // Use Web Crypto API (works in Node.js 18+ and browsers)\n const encoder = new TextEncoder();\n const keyData = encoder.encode(secret);\n const messageData = encoder.encode(signedPayload);\n\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyData,\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n );\n\n const signatureBuffer = await crypto.subtle.sign(\n 'HMAC',\n cryptoKey,\n messageData\n );\n\n // Convert to hex string\n return Array.from(new Uint8Array(signatureBuffer))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\n/**\n * Constant-time string comparison to prevent timing attacks\n */\nfunction secureCompare(a: string, b: string): boolean {\n if (a.length !== b.length) {\n return false;\n }\n\n let result = 0;\n for (let i = 0; i < a.length; i++) {\n result |= a.charCodeAt(i) ^ b.charCodeAt(i);\n }\n\n return result === 0;\n}\n\n/**\n * Scell Webhook signature verification utilities\n *\n * @example\n * ```typescript\n * import { ScellWebhooks } from '@scell/sdk';\n *\n * // In your webhook endpoint\n * app.post('/webhooks/scell', async (req, res) => {\n * const signature = req.headers['x-scell-signature'];\n * const payload = JSON.stringify(req.body);\n *\n * const isValid = await ScellWebhooks.verifySignature(\n * payload,\n * signature,\n * process.env.WEBHOOK_SECRET\n * );\n *\n * if (!isValid) {\n * return res.status(401).send('Invalid signature');\n * }\n *\n * // Process the webhook\n * const event = ScellWebhooks.parsePayload(payload);\n * console.log('Received event:', event.event);\n * });\n * ```\n */\nexport const ScellWebhooks = {\n /**\n * Verify webhook signature\n *\n * @param payload - Raw request body as string\n * @param signature - Value of X-Scell-Signature header\n * @param secret - Your webhook secret (whsec_...)\n * @param options - Verification options\n * @returns True if signature is valid\n *\n * @example\n * ```typescript\n * const isValid = await ScellWebhooks.verifySignature(\n * rawBody,\n * req.headers['x-scell-signature'],\n * 'whsec_abc123...'\n * );\n * ```\n */\n async verifySignature(\n payload: string,\n signature: string,\n secret: string,\n options: VerifySignatureOptions = {}\n ): Promise<boolean> {\n const { tolerance = 300 } = options;\n\n // Parse the signature header\n const parsed = parseSignatureHeader(signature);\n if (!parsed) {\n return false;\n }\n\n const { timestamp, signature: providedSignature } = parsed;\n\n // Check timestamp tolerance\n const now = Math.floor(Date.now() / 1000);\n if (Math.abs(now - timestamp) > tolerance) {\n return false;\n }\n\n // Compute expected signature\n const expectedSignature = await computeSignature(payload, timestamp, secret);\n\n // Constant-time comparison\n return secureCompare(expectedSignature, providedSignature);\n },\n\n /**\n * Verify webhook signature synchronously using Node.js crypto\n * (Only works in Node.js environment)\n *\n * @param payload - Raw request body as string\n * @param signature - Value of X-Scell-Signature header\n * @param secret - Your webhook secret (whsec_...)\n * @param options - Verification options\n * @returns True if signature is valid\n */\n verifySignatureSync(\n payload: string,\n signature: string,\n secret: string,\n options: VerifySignatureOptions = {}\n ): boolean {\n const { tolerance = 300 } = options;\n\n // Parse the signature header\n const parsed = parseSignatureHeader(signature);\n if (!parsed) {\n return false;\n }\n\n const { timestamp, signature: providedSignature } = parsed;\n\n // Check timestamp tolerance\n const now = Math.floor(Date.now() / 1000);\n if (Math.abs(now - timestamp) > tolerance) {\n return false;\n }\n\n // Use Node.js crypto for sync operation\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const crypto = require('crypto') as typeof import('crypto');\n const signedPayload = `${timestamp}.${payload}`;\n const expectedSignature = crypto\n .createHmac('sha256', secret)\n .update(signedPayload)\n .digest('hex');\n\n // Use Node.js timingSafeEqual\n try {\n return crypto.timingSafeEqual(\n Buffer.from(expectedSignature),\n Buffer.from(providedSignature)\n );\n } catch {\n return false;\n }\n },\n\n /**\n * Parse webhook payload\n *\n * @param payload - Raw request body as string\n * @returns Parsed webhook payload\n *\n * @example\n * ```typescript\n * const event = ScellWebhooks.parsePayload<InvoiceWebhookData>(rawBody);\n * if (event.event === 'invoice.validated') {\n * console.log('Invoice validated:', event.data.invoice_number);\n * }\n * ```\n */\n parsePayload<T = unknown>(payload: string): WebhookPayload<T> {\n return JSON.parse(payload) as WebhookPayload<T>;\n },\n\n /**\n * Construct a test webhook event for local testing\n *\n * @param event - Event type\n * @param data - Event data\n * @param secret - Webhook secret for signing\n * @returns Object with payload and headers for testing\n */\n async constructTestEvent<T>(\n event: string,\n data: T,\n secret: string\n ): Promise<{\n payload: string;\n headers: Record<string, string>;\n }> {\n const timestamp = Math.floor(Date.now() / 1000);\n const webhookPayload: WebhookPayload<T> = {\n event: event as WebhookPayload<T>['event'],\n timestamp: new Date().toISOString(),\n data,\n };\n\n const payload = JSON.stringify(webhookPayload);\n const signature = await computeSignature(payload, timestamp, secret);\n\n return {\n payload,\n headers: {\n 'X-Scell-Signature': `t=${timestamp},v1=${signature}`,\n 'X-Scell-Event': event,\n 'X-Scell-Delivery': crypto.randomUUID(),\n 'Content-Type': 'application/json',\n },\n };\n },\n};\n","/**\n * Scell.io Official TypeScript SDK\n *\n * @packageDocumentation\n *\n * @example\n * ```typescript\n * import { ScellClient, ScellApiClient, ScellAuth, ScellWebhooks } from '@scell/sdk';\n *\n * // Dashboard client (Bearer token)\n * const auth = await ScellAuth.login({ email, password });\n * const client = new ScellClient(auth.token);\n *\n * // API client (X-API-Key)\n * const apiClient = new ScellApiClient('your-api-key');\n *\n * // Create invoice\n * const invoice = await apiClient.invoices.create({...});\n *\n * // Verify webhook\n * const isValid = await ScellWebhooks.verifySignature(payload, signature, secret);\n * ```\n */\n\n// Client\nimport { HttpClient, type ClientConfig } from './client.js';\n\n// Resources\nimport { ApiKeysResource } from './resources/api-keys.js';\nimport { AuthResource, ScellAuth } from './resources/auth.js';\nimport { BalanceResource } from './resources/balance.js';\nimport { CompaniesResource } from './resources/companies.js';\nimport { InvoicesResource } from './resources/invoices.js';\nimport { SignaturesResource } from './resources/signatures.js';\nimport { WebhooksResource } from './resources/webhooks.js';\n\n// Utilities\nimport { ScellWebhooks } from './utils/webhook-verify.js';\nimport { withRetry, createRetryWrapper } from './utils/retry.js';\n\n/**\n * Scell Dashboard Client\n *\n * Use this client for dashboard/user operations with Bearer token authentication.\n *\n * @example\n * ```typescript\n * import { ScellClient, ScellAuth } from '@scell/sdk';\n *\n * // Login first\n * const auth = await ScellAuth.login({\n * email: 'user@example.com',\n * password: 'password'\n * });\n *\n * // Create client\n * const client = new ScellClient(auth.token);\n *\n * // Use the client\n * const companies = await client.companies.list();\n * const balance = await client.balance.get();\n * ```\n */\nexport class ScellClient {\n private readonly http: HttpClient;\n\n /** Authentication operations */\n public readonly auth: AuthResource;\n /** Company management */\n public readonly companies: CompaniesResource;\n /** API key management */\n public readonly apiKeys: ApiKeysResource;\n /** Balance and transactions */\n public readonly balance: BalanceResource;\n /** Webhook management */\n public readonly webhooks: WebhooksResource;\n /** Invoice listing (read-only via dashboard) */\n public readonly invoices: InvoicesResource;\n /** Signature listing (read-only via dashboard) */\n public readonly signatures: SignaturesResource;\n\n /**\n * Create a new Scell Dashboard Client\n *\n * @param token - Bearer token from login\n * @param config - Client configuration\n *\n * @example\n * ```typescript\n * const client = new ScellClient('your-bearer-token', {\n * baseUrl: 'https://api.scell.io/api/v1',\n * timeout: 30000,\n * retry: { maxRetries: 3 }\n * });\n * ```\n */\n constructor(token: string, config: ClientConfig = {}) {\n this.http = new HttpClient('bearer', token, config);\n\n this.auth = new AuthResource(this.http);\n this.companies = new CompaniesResource(this.http);\n this.apiKeys = new ApiKeysResource(this.http);\n this.balance = new BalanceResource(this.http);\n this.webhooks = new WebhooksResource(this.http);\n this.invoices = new InvoicesResource(this.http);\n this.signatures = new SignaturesResource(this.http);\n }\n}\n\n/**\n * Scell API Client\n *\n * Use this client for external API operations with X-API-Key authentication.\n * This is the client you'll use for creating invoices and signatures.\n *\n * @example\n * ```typescript\n * import { ScellApiClient } from '@scell/sdk';\n *\n * const client = new ScellApiClient('your-api-key');\n *\n * // Create an invoice\n * const invoice = await client.invoices.create({\n * invoice_number: 'FACT-2024-001',\n * direction: 'outgoing',\n * output_format: 'facturx',\n * // ...\n * });\n *\n * // Create a signature request\n * const signature = await client.signatures.create({\n * title: 'Contract',\n * document: btoa(pdfContent),\n * document_name: 'contract.pdf',\n * signers: [{...}]\n * });\n * ```\n */\nexport class ScellApiClient {\n private readonly http: HttpClient;\n\n /** Invoice operations (create, download, convert) */\n public readonly invoices: InvoicesResource;\n /** Signature operations (create, download, remind, cancel) */\n public readonly signatures: SignaturesResource;\n\n /**\n * Create a new Scell API Client\n *\n * @param apiKey - Your API key (from dashboard)\n * @param config - Client configuration\n *\n * @example\n * ```typescript\n * // Production client\n * const client = new ScellApiClient('sk_live_xxx');\n *\n * // Sandbox client\n * const sandboxClient = new ScellApiClient('sk_test_xxx', {\n * baseUrl: 'https://api.scell.io/api/v1/sandbox'\n * });\n * ```\n */\n constructor(apiKey: string, config: ClientConfig = {}) {\n this.http = new HttpClient('api-key', apiKey, config);\n\n this.invoices = new InvoicesResource(this.http);\n this.signatures = new SignaturesResource(this.http);\n }\n}\n\n// Re-export utilities\nexport { ScellAuth, ScellWebhooks, withRetry, createRetryWrapper };\n\n// Re-export types\nexport type { ClientConfig } from './client.js';\nexport type { RetryOptions } from './utils/retry.js';\nexport type { VerifySignatureOptions } from './utils/webhook-verify.js';\n\n// Re-export errors\nexport {\n ScellError,\n ScellAuthenticationError,\n ScellAuthorizationError,\n ScellValidationError,\n ScellRateLimitError,\n ScellNotFoundError,\n ScellServerError,\n ScellInsufficientBalanceError,\n ScellNetworkError,\n ScellTimeoutError,\n} from './errors.js';\n\n// Re-export all types\nexport * from './types/index.js';\n"]}
1
+ {"version":3,"sources":["../src/errors.ts","../src/client.ts","../src/utils/retry.ts","../src/resources/tenant-direct-invoices.ts","../src/resources/tenant-direct-credit-notes.ts","../src/resources/tenant-incoming-invoices.ts","../src/resources/tenant-credit-notes.ts","../src/resources/fiscal.ts","../src/resources/billing.ts","../src/resources/stats.ts","../src/resources/sub-tenants.ts","../src/tenant-client.ts","../src/resources/api-keys.ts","../src/resources/auth.ts","../src/resources/balance.ts","../src/resources/companies.ts","../src/resources/invoices.ts","../src/resources/signatures.ts","../src/resources/webhooks.ts","../src/utils/webhook-verify.ts","../src/index.ts"],"names":["parseApiError","crypto"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Scell SDK Error Classes\n *\n * @packageDocumentation\n */\n\nimport type { ApiErrorResponse } from './types/common.js';\n\n/**\n * Base error class for all Scell API errors\n */\nexport class ScellError extends Error {\n /** HTTP status code */\n public readonly status: number;\n /** Error code from API */\n public readonly code: string | undefined;\n /** Original response body */\n public readonly body: unknown;\n\n constructor(\n message: string,\n status: number,\n code?: string,\n body?: unknown\n ) {\n super(message);\n this.name = 'ScellError';\n this.status = status;\n this.code = code;\n this.body = body;\n\n // Maintains proper stack trace in V8 environments\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n}\n\n/**\n * Error thrown when authentication fails (401)\n *\n * @example\n * ```typescript\n * try {\n * await client.invoices.list();\n * } catch (error) {\n * if (error instanceof ScellAuthenticationError) {\n * console.log('Invalid or expired token');\n * }\n * }\n * ```\n */\nexport class ScellAuthenticationError extends ScellError {\n constructor(message = 'Authentication failed', body?: unknown) {\n super(message, 401, 'AUTHENTICATION_ERROR', body);\n this.name = 'ScellAuthenticationError';\n }\n}\n\n/**\n * Error thrown when authorization fails (403)\n *\n * @example\n * ```typescript\n * try {\n * await client.admin.users();\n * } catch (error) {\n * if (error instanceof ScellAuthorizationError) {\n * console.log('Insufficient permissions');\n * }\n * }\n * ```\n */\nexport class ScellAuthorizationError extends ScellError {\n constructor(message = 'Access denied', body?: unknown) {\n super(message, 403, 'AUTHORIZATION_ERROR', body);\n this.name = 'ScellAuthorizationError';\n }\n}\n\n/**\n * Error thrown when validation fails (422)\n *\n * @example\n * ```typescript\n * try {\n * await client.invoices.create(invalidData);\n * } catch (error) {\n * if (error instanceof ScellValidationError) {\n * console.log('Validation errors:', error.errors);\n * }\n * }\n * ```\n */\nexport class ScellValidationError extends ScellError {\n /** Field-level validation errors */\n public readonly errors: Record<string, string[]>;\n\n constructor(\n message: string,\n errors: Record<string, string[]> = {},\n body?: unknown\n ) {\n super(message, 422, 'VALIDATION_ERROR', body);\n this.name = 'ScellValidationError';\n this.errors = errors;\n }\n\n /**\n * Get all error messages as a flat array\n */\n getAllMessages(): string[] {\n return Object.values(this.errors).flat();\n }\n\n /**\n * Get error messages for a specific field\n */\n getFieldErrors(field: string): string[] {\n return this.errors[field] ?? [];\n }\n\n /**\n * Check if a specific field has errors\n */\n hasFieldError(field: string): boolean {\n const fieldErrors = this.errors[field];\n return fieldErrors !== undefined && fieldErrors.length > 0;\n }\n}\n\n/**\n * Error thrown when rate limit is exceeded (429)\n *\n * @example\n * ```typescript\n * try {\n * await client.invoices.create(data);\n * } catch (error) {\n * if (error instanceof ScellRateLimitError) {\n * console.log(`Retry after ${error.retryAfter} seconds`);\n * }\n * }\n * ```\n */\nexport class ScellRateLimitError extends ScellError {\n /** Seconds to wait before retrying */\n public readonly retryAfter: number | undefined;\n\n constructor(\n message = 'Rate limit exceeded',\n retryAfter?: number,\n body?: unknown\n ) {\n super(message, 429, 'RATE_LIMIT_EXCEEDED', body);\n this.name = 'ScellRateLimitError';\n this.retryAfter = retryAfter;\n }\n}\n\n/**\n * Error thrown when a resource is not found (404)\n */\nexport class ScellNotFoundError extends ScellError {\n constructor(message = 'Resource not found', body?: unknown) {\n super(message, 404, 'NOT_FOUND', body);\n this.name = 'ScellNotFoundError';\n }\n}\n\n/**\n * Error thrown when the API returns a server error (5xx)\n */\nexport class ScellServerError extends ScellError {\n constructor(\n message = 'Internal server error',\n status = 500,\n body?: unknown\n ) {\n super(message, status, 'SERVER_ERROR', body);\n this.name = 'ScellServerError';\n }\n}\n\n/**\n * Error thrown when insufficient balance for an operation\n */\nexport class ScellInsufficientBalanceError extends ScellError {\n constructor(message = 'Insufficient balance', body?: unknown) {\n super(message, 402, 'INSUFFICIENT_BALANCE', body);\n this.name = 'ScellInsufficientBalanceError';\n }\n}\n\n/**\n * Error thrown for network-related issues\n */\nexport class ScellNetworkError extends ScellError {\n public readonly originalError: Error;\n\n constructor(message: string, originalError: Error) {\n super(message, 0, 'NETWORK_ERROR');\n this.name = 'ScellNetworkError';\n this.originalError = originalError;\n }\n}\n\n/**\n * Error thrown when request times out\n */\nexport class ScellTimeoutError extends ScellError {\n constructor(message = 'Request timed out') {\n super(message, 0, 'TIMEOUT');\n this.name = 'ScellTimeoutError';\n }\n}\n\n/**\n * Parse API error response and throw appropriate error\n */\nexport function parseApiError(\n status: number,\n body: unknown,\n headers?: Headers\n): never {\n const errorBody = body as ApiErrorResponse | undefined;\n const message = errorBody?.message ?? 'Unknown error';\n const errors = errorBody?.errors ?? {};\n const code = errorBody?.code;\n\n switch (status) {\n case 401:\n throw new ScellAuthenticationError(message, body);\n case 402:\n throw new ScellInsufficientBalanceError(message, body);\n case 403:\n throw new ScellAuthorizationError(message, body);\n case 404:\n throw new ScellNotFoundError(message, body);\n case 422:\n throw new ScellValidationError(message, errors, body);\n case 429: {\n const retryAfter = headers?.get('Retry-After');\n throw new ScellRateLimitError(\n message,\n retryAfter ? parseInt(retryAfter, 10) : undefined,\n body\n );\n }\n default:\n if (status >= 500) {\n throw new ScellServerError(message, status, body);\n }\n throw new ScellError(message, status, code, body);\n }\n}\n","/**\n * Scell HTTP Client\n *\n * @packageDocumentation\n */\n\nimport {\n parseApiError,\n ScellNetworkError,\n ScellTimeoutError,\n} from './errors.js';\nimport { withRetry, type RetryOptions } from './utils/retry.js';\n\n/**\n * Authentication mode\n */\nexport type AuthMode = 'bearer' | 'api-key' | 'tenant-key';\n\n/**\n * Client configuration options\n */\nexport interface ClientConfig {\n /** Base URL for the API (default: https://api.scell.io/api/v1) */\n baseUrl?: string | undefined;\n /** Request timeout in milliseconds (default: 30000) */\n timeout?: number | undefined;\n /** Retry configuration */\n retry?: RetryOptions | undefined;\n /** Enable automatic retries (default: true) */\n enableRetry?: boolean | undefined;\n /** Custom fetch implementation */\n fetch?: typeof fetch | undefined;\n}\n\n/**\n * Request options for individual requests\n */\nexport interface RequestOptions {\n /** Override timeout for this request */\n timeout?: number | undefined;\n /** Skip retry for this request */\n skipRetry?: boolean | undefined;\n /** Additional headers */\n headers?: Record<string, string> | undefined;\n /** Abort signal */\n signal?: AbortSignal | undefined;\n}\n\n/**\n * Internal request configuration\n */\ninterface InternalRequestConfig extends RequestOptions {\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n path: string;\n body?: unknown;\n query?: Record<string, string | number | boolean | undefined>;\n}\n\n/**\n * HTTP client for Scell API\n */\nexport class HttpClient {\n private readonly baseUrl: string;\n private readonly timeout: number;\n private readonly retryOptions: RetryOptions;\n private readonly enableRetry: boolean;\n private readonly fetchFn: typeof fetch;\n private readonly authMode: AuthMode;\n private readonly authToken: string;\n\n constructor(\n authMode: AuthMode,\n authToken: string,\n config: ClientConfig = {}\n ) {\n this.authMode = authMode;\n this.authToken = authToken;\n this.baseUrl = config.baseUrl ?? 'https://api.scell.io/api/v1';\n this.timeout = config.timeout ?? 30000;\n this.retryOptions = config.retry ?? {};\n this.enableRetry = config.enableRetry ?? true;\n this.fetchFn = config.fetch ?? fetch;\n }\n\n /**\n * Build URL with query parameters\n */\n private buildUrl(\n path: string,\n query?: Record<string, string | number | boolean | undefined>\n ): string {\n const url = new URL(path, this.baseUrl);\n\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n return url.toString();\n }\n\n /**\n * Build headers for request\n */\n private buildHeaders(\n additionalHeaders?: Record<string, string>\n ): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n ...additionalHeaders,\n };\n\n if (this.authMode === 'bearer') {\n headers['Authorization'] = `Bearer ${this.authToken}`;\n } else if (this.authMode === 'tenant-key') {\n headers['X-Tenant-Key'] = this.authToken;\n } else {\n headers['X-API-Key'] = this.authToken;\n }\n\n return headers;\n }\n\n /**\n * Execute HTTP request\n */\n private async executeRequest<T>(config: InternalRequestConfig): Promise<T> {\n const { method, path, body, query, headers, timeout, signal } = config;\n\n const url = this.buildUrl(path, query);\n const requestHeaders = this.buildHeaders(headers);\n const requestTimeout = timeout ?? this.timeout;\n\n // Create abort controller for timeout\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), requestTimeout);\n\n // Combine signals if provided\n const combinedSignal = signal\n ? new AbortController().signal\n : controller.signal;\n\n if (signal) {\n signal.addEventListener('abort', () => controller.abort());\n }\n\n try {\n const fetchOptions: RequestInit = {\n method,\n headers: requestHeaders,\n signal: combinedSignal,\n };\n\n if (body !== undefined) {\n fetchOptions.body = JSON.stringify(body);\n }\n\n const response = await this.fetchFn(url, fetchOptions);\n\n clearTimeout(timeoutId);\n\n // Parse response body\n const contentType = response.headers.get('Content-Type') ?? '';\n let responseBody: unknown;\n\n if (contentType.includes('application/json')) {\n responseBody = await response.json();\n } else {\n responseBody = await response.text();\n }\n\n // Handle errors\n if (!response.ok) {\n parseApiError(response.status, responseBody, response.headers);\n }\n\n return responseBody as T;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof Error) {\n // Handle abort/timeout\n if (error.name === 'AbortError') {\n throw new ScellTimeoutError(\n `Request timed out after ${requestTimeout}ms`\n );\n }\n\n // Handle network errors\n if (\n error.name === 'TypeError' &&\n error.message.includes('fetch')\n ) {\n throw new ScellNetworkError('Network request failed', error);\n }\n }\n\n throw error;\n }\n }\n\n /**\n * Execute request with optional retry\n */\n private async request<T>(config: InternalRequestConfig): Promise<T> {\n const shouldRetry = this.enableRetry && !config.skipRetry;\n\n if (shouldRetry) {\n return withRetry(\n () => this.executeRequest<T>(config),\n this.retryOptions\n );\n }\n\n return this.executeRequest<T>(config);\n }\n\n /**\n * GET request\n */\n async get<T>(\n path: string,\n query?: Record<string, string | number | boolean | undefined>,\n options?: RequestOptions\n ): Promise<T> {\n const config: InternalRequestConfig = {\n method: 'GET',\n path,\n ...options,\n };\n if (query !== undefined) {\n config.query = query;\n }\n return this.request<T>(config);\n }\n\n /**\n * POST request\n */\n async post<T>(\n path: string,\n body?: unknown,\n options?: RequestOptions\n ): Promise<T> {\n return this.request<T>({\n method: 'POST',\n path,\n body,\n ...options,\n });\n }\n\n /**\n * PUT request\n */\n async put<T>(\n path: string,\n body?: unknown,\n options?: RequestOptions\n ): Promise<T> {\n return this.request<T>({\n method: 'PUT',\n path,\n body,\n ...options,\n });\n }\n\n /**\n * PATCH request\n */\n async patch<T>(\n path: string,\n body?: unknown,\n options?: RequestOptions\n ): Promise<T> {\n return this.request<T>({\n method: 'PATCH',\n path,\n body,\n ...options,\n });\n }\n\n /**\n * DELETE request\n */\n async delete<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>({\n method: 'DELETE',\n path,\n ...options,\n });\n }\n\n /**\n * GET request that returns raw binary data as ArrayBuffer\n *\n * Use this for downloading files (PDF, XML, etc.)\n *\n * @param path - API endpoint path\n * @param query - Query parameters\n * @param options - Request options\n * @returns ArrayBuffer containing the file content\n */\n async getRaw(\n path: string,\n query?: Record<string, string | number | boolean | undefined>,\n options?: RequestOptions\n ): Promise<ArrayBuffer> {\n const url = this.buildUrl(path, query);\n const requestHeaders = this.buildHeaders(options?.headers);\n const requestTimeout = options?.timeout ?? this.timeout;\n\n // Remove JSON content-type for raw requests\n delete requestHeaders['Content-Type'];\n requestHeaders['Accept'] = '*/*';\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), requestTimeout);\n\n if (options?.signal) {\n options.signal.addEventListener('abort', () => controller.abort());\n }\n\n try {\n const response = await this.fetchFn(url, {\n method: 'GET',\n headers: requestHeaders,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n // Try to parse error as JSON\n const contentType = response.headers.get('Content-Type') ?? '';\n let responseBody: unknown;\n\n if (contentType.includes('application/json')) {\n responseBody = await response.json();\n } else {\n responseBody = await response.text();\n }\n\n parseApiError(response.status, responseBody, response.headers);\n }\n\n return response.arrayBuffer();\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new ScellTimeoutError(\n `Request timed out after ${requestTimeout}ms`\n );\n }\n\n if (\n error.name === 'TypeError' &&\n error.message.includes('fetch')\n ) {\n throw new ScellNetworkError('Network request failed', error);\n }\n }\n\n throw error;\n }\n }\n}\n","/**\n * Retry utility with exponential backoff and jitter\n *\n * @packageDocumentation\n */\n\nimport { ScellRateLimitError, ScellServerError } from '../errors.js';\n\n/**\n * Retry configuration options\n */\nexport interface RetryOptions {\n /** Maximum number of retry attempts (default: 3) */\n maxRetries?: number | undefined;\n /** Base delay in milliseconds (default: 1000) */\n baseDelay?: number | undefined;\n /** Maximum delay in milliseconds (default: 30000) */\n maxDelay?: number | undefined;\n /** Jitter factor (0-1, default: 0.1) */\n jitterFactor?: number | undefined;\n /** Custom function to determine if error is retryable */\n isRetryable?: ((error: unknown) => boolean) | undefined;\n}\n\n/**\n * Default retry options\n */\nconst DEFAULT_RETRY_OPTIONS: Required<Omit<RetryOptions, 'isRetryable'>> = {\n maxRetries: 3,\n baseDelay: 1000,\n maxDelay: 30000,\n jitterFactor: 0.1,\n};\n\n/**\n * Check if an error is retryable (429 or 5xx)\n */\nexport function isRetryableError(error: unknown): boolean {\n if (error instanceof ScellRateLimitError) {\n return true;\n }\n if (error instanceof ScellServerError) {\n return true;\n }\n // Network errors are also retryable\n if (error instanceof Error && error.name === 'ScellNetworkError') {\n return true;\n }\n return false;\n}\n\n/**\n * Calculate delay with exponential backoff and jitter\n *\n * @param attempt - Current attempt number (0-indexed)\n * @param baseDelay - Base delay in milliseconds\n * @param maxDelay - Maximum delay in milliseconds\n * @param jitterFactor - Jitter factor (0-1)\n * @param retryAfter - Optional retry-after header value in seconds\n * @returns Delay in milliseconds\n */\nexport function calculateDelay(\n attempt: number,\n baseDelay: number,\n maxDelay: number,\n jitterFactor: number,\n retryAfter?: number\n): number {\n // If we have a retry-after header, use it\n if (retryAfter !== undefined && retryAfter > 0) {\n return retryAfter * 1000;\n }\n\n // Exponential backoff: baseDelay * 2^attempt\n const exponentialDelay = baseDelay * Math.pow(2, attempt);\n\n // Cap at maxDelay\n const cappedDelay = Math.min(exponentialDelay, maxDelay);\n\n // Add jitter: delay * (1 +/- jitterFactor * random)\n const jitter = cappedDelay * jitterFactor * (Math.random() * 2 - 1);\n\n return Math.floor(cappedDelay + jitter);\n}\n\n/**\n * Sleep for a specified duration\n */\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Execute a function with retry logic\n *\n * @param fn - Async function to execute\n * @param options - Retry options\n * @returns Result of the function\n *\n * @example\n * ```typescript\n * const result = await withRetry(\n * () => client.invoices.create(data),\n * { maxRetries: 5 }\n * );\n * ```\n */\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n options: RetryOptions = {}\n): Promise<T> {\n const maxRetries = options.maxRetries ?? DEFAULT_RETRY_OPTIONS.maxRetries;\n const baseDelay = options.baseDelay ?? DEFAULT_RETRY_OPTIONS.baseDelay;\n const maxDelay = options.maxDelay ?? DEFAULT_RETRY_OPTIONS.maxDelay;\n const jitterFactor = options.jitterFactor ?? DEFAULT_RETRY_OPTIONS.jitterFactor;\n const isRetryable = options.isRetryable ?? isRetryableError;\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error;\n\n // Check if we should retry\n if (attempt >= maxRetries || !isRetryable(error)) {\n throw error;\n }\n\n // Get retry-after header if available\n const retryAfter: number | undefined =\n error instanceof ScellRateLimitError ? error.retryAfter : undefined;\n\n // Calculate delay\n const delay = calculateDelay(\n attempt,\n baseDelay,\n maxDelay,\n jitterFactor,\n retryAfter\n );\n\n // Wait before retrying\n await sleep(delay);\n }\n }\n\n // This should never be reached, but TypeScript needs it\n throw lastError;\n}\n\n/**\n * Create a retry wrapper with pre-configured options\n *\n * @example\n * ```typescript\n * const retry = createRetryWrapper({ maxRetries: 5 });\n * const result = await retry(() => client.invoices.create(data));\n * ```\n */\nexport function createRetryWrapper(\n defaultOptions: RetryOptions = {}\n): <T>(fn: () => Promise<T>, options?: RetryOptions) => Promise<T> {\n return <T>(fn: () => Promise<T>, options: RetryOptions = {}) =>\n withRetry(fn, { ...defaultOptions, ...options });\n}\n","/**\n * Tenant Direct Invoices Resource\n *\n * Manage direct invoices issued by a tenant to external buyers.\n * Direct invoices are outgoing invoices that are not part of\n * sub-tenant billing but billed directly to third-party clients.\n *\n * @packageDocumentation\n */\n\nimport type { HttpClient, RequestOptions } from '../client.js';\nimport type {\n MessageResponse,\n PaginatedResponse,\n SingleResponse,\n} from '../types/common.js';\nimport type {\n CreateTenantDirectInvoiceParams,\n TenantInvoice,\n TenantInvoiceFilters,\n UpdateTenantInvoiceParams,\n} from '../types/tenant-invoices.js';\n\n/**\n * Tenant Direct Invoices API resource\n *\n * Provides operations for managing direct invoices created by tenants\n * for external buyers (not sub-tenants).\n *\n * @example\n * ```typescript\n * import { ScellTenantClient } from '@scell/sdk';\n *\n * const client = new ScellTenantClient('your-tenant-key');\n *\n * // Create a direct invoice\n * const { data: invoice } = await client.directInvoices.create({\n * company_id: 'company-uuid',\n * buyer: {\n * company_name: 'Client Corp',\n * siret: '12345678901234',\n * address: {\n * line1: '123 Rue Client',\n * postal_code: '75001',\n * city: 'Paris',\n * country: 'FR'\n * },\n * email: 'billing@client.com'\n * },\n * lines: [{\n * description: 'Consulting services',\n * quantity: 10,\n * unit_price: 150,\n * tax_rate: 20,\n * total_ht: 1500,\n * total_tax: 300,\n * total_ttc: 1800\n * }]\n * });\n *\n * // List all direct invoices\n * const { data: invoices, meta } = await client.directInvoices.list({\n * status: 'validated',\n * per_page: 50\n * });\n * ```\n */\nexport class TenantDirectInvoicesResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Create a new direct invoice\n *\n * Creates an outgoing invoice from the tenant to an external buyer.\n * The invoice will be generated in the specified format (Factur-X by default).\n *\n * @param params - Invoice creation parameters\n * @param requestOptions - Optional request configuration\n * @returns Created invoice\n *\n * @example\n * ```typescript\n * const { data: invoice } = await client.directInvoices.create({\n * company_id: 'company-uuid',\n * buyer: {\n * company_name: 'Acme Corporation',\n * siret: '98765432109876',\n * address: {\n * line1: '456 Avenue Business',\n * postal_code: '69001',\n * city: 'Lyon',\n * country: 'FR'\n * },\n * email: 'accounts@acme.com'\n * },\n * lines: [{\n * description: 'Monthly subscription',\n * quantity: 1,\n * unit_price: 299,\n * tax_rate: 20,\n * total_ht: 299,\n * total_tax: 59.80,\n * total_ttc: 358.80\n * }],\n * issue_date: '2026-01-26',\n * due_date: '2026-02-26',\n * notes: 'Thank you for your business!'\n * });\n *\n * console.log('Invoice created:', invoice.invoice_number);\n * ```\n */\n async create(\n params: CreateTenantDirectInvoiceParams,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<TenantInvoice>> {\n return this.http.post<SingleResponse<TenantInvoice>>(\n '/tenant/invoices',\n params,\n requestOptions\n );\n }\n\n /**\n * List all direct invoices\n *\n * Returns a paginated list of direct invoices created by the tenant.\n * Supports filtering by status, date range, buyer, and amount.\n *\n * @param filters - Filter and pagination options\n * @param requestOptions - Optional request configuration\n * @returns Paginated list of invoices\n *\n * @example\n * ```typescript\n * // List all validated invoices\n * const { data: invoices, meta } = await client.directInvoices.list({\n * status: 'validated',\n * per_page: 50\n * });\n *\n * console.log(`Found ${meta.total} validated invoices`);\n *\n * // Filter by date range\n * const januaryInvoices = await client.directInvoices.list({\n * date_from: '2026-01-01',\n * date_to: '2026-01-31'\n * });\n *\n * // Search by buyer\n * const acmeInvoices = await client.directInvoices.list({\n * search: 'Acme'\n * });\n * ```\n */\n async list(\n filters: TenantInvoiceFilters = {},\n requestOptions?: RequestOptions\n ): Promise<PaginatedResponse<TenantInvoice>> {\n // Convert status array to comma-separated string if needed\n const query: Record<string, string | number | boolean | undefined> = {\n ...filters,\n status: Array.isArray(filters.status)\n ? filters.status.join(',')\n : filters.status,\n };\n\n return this.http.get<PaginatedResponse<TenantInvoice>>(\n '/tenant/invoices',\n query,\n requestOptions\n );\n }\n\n /**\n * Get a specific direct invoice by ID\n *\n * @param invoiceId - Invoice UUID\n * @param requestOptions - Optional request configuration\n * @returns Invoice details\n *\n * @example\n * ```typescript\n * const { data: invoice } = await client.directInvoices.get('invoice-uuid');\n *\n * console.log('Invoice:', invoice.invoice_number);\n * console.log('Status:', invoice.status);\n * console.log('Total:', invoice.total_ttc, invoice.currency);\n * ```\n */\n async get(\n invoiceId: string,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<TenantInvoice>> {\n return this.http.get<SingleResponse<TenantInvoice>>(\n `/tenant/invoices/${invoiceId}`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Update a direct invoice\n *\n * Only invoices in 'draft' status can be updated.\n * Once validated or sent, invoices become immutable.\n *\n * @param invoiceId - Invoice UUID\n * @param params - Update parameters\n * @param requestOptions - Optional request configuration\n * @returns Updated invoice\n *\n * @example\n * ```typescript\n * const { data: invoice } = await client.directInvoices.update(\n * 'invoice-uuid',\n * {\n * due_date: '2026-03-15',\n * notes: 'Updated payment terms'\n * }\n * );\n *\n * console.log('Invoice updated:', invoice.due_date);\n * ```\n */\n async update(\n invoiceId: string,\n params: UpdateTenantInvoiceParams,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<TenantInvoice>> {\n return this.http.patch<SingleResponse<TenantInvoice>>(\n `/tenant/invoices/${invoiceId}`,\n params,\n requestOptions\n );\n }\n\n /**\n * Delete a direct invoice\n *\n * Only invoices in 'draft' status can be deleted.\n * Validated or sent invoices cannot be deleted for audit trail compliance.\n *\n * @param invoiceId - Invoice UUID\n * @param requestOptions - Optional request configuration\n *\n * @example\n * ```typescript\n * await client.directInvoices.delete('draft-invoice-uuid');\n * console.log('Invoice deleted successfully');\n * ```\n */\n async delete(\n invoiceId: string,\n requestOptions?: RequestOptions\n ): Promise<MessageResponse> {\n return this.http.delete<MessageResponse>(\n `/tenant/invoices/${invoiceId}`,\n requestOptions\n );\n }\n\n /**\n * Validate a direct invoice\n *\n * Validates the invoice, generates the electronic invoice file,\n * and changes status from 'draft' to 'validated'.\n *\n * @param invoiceId - Invoice UUID\n * @param requestOptions - Optional request configuration\n * @returns Validated invoice\n *\n * @example\n * ```typescript\n * const { data: invoice } = await client.directInvoices.validate('invoice-uuid');\n * console.log('Invoice validated:', invoice.status); // 'validated'\n * console.log('Validated at:', invoice.validated_at);\n * ```\n */\n async validate(\n invoiceId: string,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<TenantInvoice>> {\n return this.http.post<SingleResponse<TenantInvoice>>(\n `/tenant/invoices/${invoiceId}/validate`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Send a direct invoice to the buyer\n *\n * Sends the validated invoice to the buyer via email.\n * The invoice must be in 'validated' status.\n *\n * @param invoiceId - Invoice UUID\n * @param requestOptions - Optional request configuration\n * @returns Updated invoice\n *\n * @example\n * ```typescript\n * const { data: invoice } = await client.directInvoices.send('invoice-uuid');\n * console.log('Invoice sent to:', invoice.buyer.email);\n * ```\n */\n async send(\n invoiceId: string,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<TenantInvoice>> {\n return this.http.post<SingleResponse<TenantInvoice>>(\n `/tenant/invoices/${invoiceId}/send`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Download invoice as PDF\n *\n * Downloads the electronic invoice file as a PDF (Factur-X).\n *\n * @param invoiceId - Invoice UUID\n * @param requestOptions - Optional request configuration\n * @returns ArrayBuffer containing the PDF file\n *\n * @example\n * ```typescript\n * // Download invoice PDF\n * const pdfBuffer = await client.directInvoices.download('invoice-uuid');\n *\n * // In Node.js, save to file:\n * import { writeFileSync } from 'fs';\n * writeFileSync('invoice.pdf', Buffer.from(pdfBuffer));\n *\n * // In browser, trigger download:\n * const blob = new Blob([pdfBuffer], { type: 'application/pdf' });\n * const url = URL.createObjectURL(blob);\n * const a = document.createElement('a');\n * a.href = url;\n * a.download = 'invoice.pdf';\n * a.click();\n * ```\n */\n async download(\n invoiceId: string,\n requestOptions?: RequestOptions\n ): Promise<ArrayBuffer> {\n return this.http.getRaw(\n `/tenant/invoices/${invoiceId}/download`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Download invoice XML\n *\n * Downloads the electronic invoice XML (UBL/CII format).\n *\n * @param invoiceId - Invoice UUID\n * @param requestOptions - Optional request configuration\n * @returns ArrayBuffer containing the XML file\n *\n * @example\n * ```typescript\n * const xmlBuffer = await client.directInvoices.downloadXml('invoice-uuid');\n * const xmlString = new TextDecoder().decode(xmlBuffer);\n * console.log('XML:', xmlString);\n * ```\n */\n async downloadXml(\n invoiceId: string,\n requestOptions?: RequestOptions\n ): Promise<ArrayBuffer> {\n return this.http.getRaw(\n `/tenant/invoices/${invoiceId}/download`,\n { format: 'xml' },\n requestOptions\n );\n }\n\n /**\n * Bulk create multiple invoices\n */\n async bulkCreate(\n invoices: CreateTenantDirectInvoiceParams[],\n requestOptions?: RequestOptions\n ): Promise<MessageResponse> {\n return this.http.post<MessageResponse>(\n '/tenant/invoices/bulk',\n { invoices },\n requestOptions\n );\n }\n\n /**\n * Bulk submit multiple invoices\n */\n async bulkSubmit(\n invoiceIds: string[],\n requestOptions?: RequestOptions\n ): Promise<MessageResponse> {\n return this.http.post<MessageResponse>(\n '/tenant/invoices/bulk-submit',\n { invoice_ids: invoiceIds },\n requestOptions\n );\n }\n\n /**\n * Get status of multiple invoices\n */\n async bulkStatus(\n invoiceIds: string[],\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<Record<string, unknown>[]>> {\n return this.http.post<SingleResponse<Record<string, unknown>[]>>(\n '/tenant/invoices/bulk-status',\n { invoice_ids: invoiceIds },\n requestOptions\n );\n }\n}\n","/**\n * Tenant Direct Credit Notes Resource\n *\n * Manage credit notes for direct invoices issued by a tenant.\n * Direct credit notes are linked to direct invoices (not sub-tenant invoices)\n * and allow partial or total refunds.\n *\n * @packageDocumentation\n */\n\nimport type { HttpClient, RequestOptions } from '../client.js';\nimport type {\n MessageResponse,\n PaginatedResponse,\n SingleResponse,\n} from '../types/common.js';\nimport type {\n CreateTenantDirectCreditNoteParams,\n TenantCreditNote,\n TenantCreditNoteFilters,\n UpdateTenantCreditNoteParams,\n} from '../types/tenant-invoices.js';\n\n/**\n * Remaining creditable information for a direct invoice\n */\nexport interface DirectInvoiceRemainingCreditable {\n /** Invoice UUID */\n invoice_id: string;\n /** Original invoice total (TTC) */\n invoice_total: number;\n /** Total already credited */\n credited_total: number;\n /** Remaining amount that can be credited */\n remaining_total: number;\n /** Line-by-line breakdown */\n lines: DirectInvoiceRemainingLine[];\n}\n\n/**\n * Remaining creditable information for an invoice line\n */\nexport interface DirectInvoiceRemainingLine {\n /** Invoice line UUID */\n invoice_line_id: string;\n /** Line description */\n description: string;\n /** Original quantity */\n original_quantity: number;\n /** Quantity already credited */\n credited_quantity: number;\n /** Remaining quantity that can be credited */\n remaining_quantity: number;\n /** Unit price */\n unit_price: number;\n}\n\n/**\n * Tenant Direct Credit Notes API resource\n *\n * Provides operations for managing credit notes linked to direct invoices.\n * Use this for refunds or corrections on invoices issued to external buyers.\n *\n * @example\n * ```typescript\n * import { ScellTenantClient } from '@scell/sdk';\n *\n * const client = new ScellTenantClient('your-tenant-key');\n *\n * // Create a partial credit note\n * const { data: creditNote } = await client.directCreditNotes.create({\n * invoice_id: 'invoice-uuid',\n * reason: 'Product returned - damaged in transit',\n * type: 'partial',\n * items: [\n * { invoice_line_id: 'line-uuid', quantity: 2 }\n * ]\n * });\n *\n * // Create a total credit note (full refund)\n * const { data: totalCreditNote } = await client.directCreditNotes.create({\n * invoice_id: 'invoice-uuid',\n * reason: 'Order cancelled by customer',\n * type: 'total'\n * });\n *\n * // List all credit notes\n * const { data: creditNotes } = await client.directCreditNotes.list({\n * status: 'sent'\n * });\n * ```\n */\nexport class TenantDirectCreditNotesResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Create a new credit note for a direct invoice\n *\n * Creates a credit note (avoir) linked to a direct invoice.\n * - For partial credit notes, specify the items and quantities to credit.\n * - For total credit notes, all items are automatically credited.\n *\n * @param params - Credit note creation parameters\n * @param requestOptions - Optional request configuration\n * @returns Created credit note\n *\n * @example\n * ```typescript\n * // Partial credit note\n * const { data: creditNote } = await client.directCreditNotes.create({\n * invoice_id: 'invoice-uuid',\n * reason: 'Returned items',\n * type: 'partial',\n * items: [\n * { invoice_line_id: 'line-1-uuid', quantity: 2 },\n * { invoice_line_id: 'line-2-uuid', quantity: 1 }\n * ]\n * });\n *\n * // Total credit note (cancels entire invoice)\n * const { data: totalCreditNote } = await client.directCreditNotes.create({\n * invoice_id: 'invoice-uuid',\n * reason: 'Invoice issued in error',\n * type: 'total'\n * });\n *\n * console.log('Credit note number:', creditNote.credit_note_number);\n * console.log('Amount:', creditNote.total, creditNote.currency);\n * ```\n */\n async create(\n params: CreateTenantDirectCreditNoteParams,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<TenantCreditNote>> {\n return this.http.post<SingleResponse<TenantCreditNote>>(\n '/tenant/credit-notes',\n params,\n requestOptions\n );\n }\n\n /**\n * List all direct credit notes\n *\n * Returns a paginated list of credit notes for direct invoices.\n *\n * @param filters - Filter and pagination options\n * @param requestOptions - Optional request configuration\n * @returns Paginated list of credit notes\n *\n * @example\n * ```typescript\n * // List all sent credit notes\n * const { data: creditNotes, meta } = await client.directCreditNotes.list({\n * status: 'sent',\n * per_page: 50\n * });\n *\n * console.log(`Found ${meta.total} sent credit notes`);\n *\n * // Filter by date range\n * const januaryCreditNotes = await client.directCreditNotes.list({\n * date_from: '2026-01-01',\n * date_to: '2026-01-31'\n * });\n * ```\n */\n async list(\n filters: TenantCreditNoteFilters = {},\n requestOptions?: RequestOptions\n ): Promise<PaginatedResponse<TenantCreditNote>> {\n return this.http.get<PaginatedResponse<TenantCreditNote>>(\n '/tenant/credit-notes',\n filters as Record<string, string | number | boolean | undefined>,\n requestOptions\n );\n }\n\n /**\n * Get a specific credit note by ID\n *\n * @param creditNoteId - Credit note UUID\n * @param requestOptions - Optional request configuration\n * @returns Credit note details\n *\n * @example\n * ```typescript\n * const { data: creditNote } = await client.directCreditNotes.get('credit-note-uuid');\n *\n * console.log('Credit note:', creditNote.credit_note_number);\n * console.log('Status:', creditNote.status);\n * console.log('Reason:', creditNote.reason);\n * console.log('Total:', creditNote.total, creditNote.currency);\n * ```\n */\n async get(\n creditNoteId: string,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<TenantCreditNote>> {\n return this.http.get<SingleResponse<TenantCreditNote>>(\n `/tenant/credit-notes/${creditNoteId}`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Update a credit note\n *\n * Only credit notes in 'draft' status can be updated.\n *\n * @param creditNoteId - Credit note UUID\n * @param params - Update parameters\n * @param requestOptions - Optional request configuration\n * @returns Updated credit note\n *\n * @example\n * ```typescript\n * const { data: creditNote } = await client.directCreditNotes.update(\n * 'credit-note-uuid',\n * {\n * reason: 'Updated reason: Customer complaint resolved',\n * items: [\n * { invoice_line_id: 'line-uuid', quantity: 3 }\n * ]\n * }\n * );\n * ```\n */\n async update(\n creditNoteId: string,\n params: UpdateTenantCreditNoteParams,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<TenantCreditNote>> {\n return this.http.patch<SingleResponse<TenantCreditNote>>(\n `/tenant/credit-notes/${creditNoteId}`,\n params,\n requestOptions\n );\n }\n\n /**\n * Delete a credit note\n *\n * Only credit notes in 'draft' status can be deleted.\n *\n * @param creditNoteId - Credit note UUID\n * @param requestOptions - Optional request configuration\n *\n * @example\n * ```typescript\n * await client.directCreditNotes.delete('draft-credit-note-uuid');\n * console.log('Credit note deleted');\n * ```\n */\n async delete(\n creditNoteId: string,\n requestOptions?: RequestOptions\n ): Promise<MessageResponse> {\n return this.http.delete<MessageResponse>(\n `/tenant/credit-notes/${creditNoteId}`,\n requestOptions\n );\n }\n\n /**\n * Send a credit note\n *\n * Validates and sends the credit note, changing status from 'draft' to 'sent'.\n *\n * @param creditNoteId - Credit note UUID\n * @param requestOptions - Optional request configuration\n * @returns Sent credit note\n *\n * @example\n * ```typescript\n * const { data: creditNote } = await client.directCreditNotes.send('credit-note-uuid');\n * console.log('Credit note sent:', creditNote.status); // 'sent'\n * ```\n */\n async send(\n creditNoteId: string,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<TenantCreditNote>> {\n return this.http.post<SingleResponse<TenantCreditNote>>(\n `/tenant/credit-notes/${creditNoteId}/send`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Download credit note as PDF\n *\n * @param creditNoteId - Credit note UUID\n * @param requestOptions - Optional request configuration\n * @returns ArrayBuffer containing the PDF file\n *\n * @example\n * ```typescript\n * const pdfBuffer = await client.directCreditNotes.download('credit-note-uuid');\n *\n * // In Node.js:\n * import { writeFileSync } from 'fs';\n * writeFileSync('credit-note.pdf', Buffer.from(pdfBuffer));\n *\n * // In browser:\n * const blob = new Blob([pdfBuffer], { type: 'application/pdf' });\n * const url = URL.createObjectURL(blob);\n * window.open(url);\n * ```\n */\n async download(\n creditNoteId: string,\n requestOptions?: RequestOptions\n ): Promise<ArrayBuffer> {\n return this.http.getRaw(\n `/tenant/credit-notes/${creditNoteId}/download`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Get remaining creditable amount for a direct invoice\n *\n * Returns information about how much can still be credited,\n * including line-by-line breakdown.\n *\n * @param invoiceId - Invoice UUID\n * @param requestOptions - Optional request configuration\n * @returns Remaining creditable information\n *\n * @example\n * ```typescript\n * const remaining = await client.directCreditNotes.remainingCreditable('invoice-uuid');\n *\n * console.log('Invoice total:', remaining.invoice_total);\n * console.log('Already credited:', remaining.credited_total);\n * console.log('Can still credit:', remaining.remaining_total);\n *\n * // Check per-line\n * remaining.lines.forEach(line => {\n * if (line.remaining_quantity > 0) {\n * console.log(`${line.description}: ${line.remaining_quantity} units remaining`);\n * }\n * });\n * ```\n */\n async remainingCreditable(\n invoiceId: string,\n requestOptions?: RequestOptions\n ): Promise<DirectInvoiceRemainingCreditable> {\n return this.http.get<DirectInvoiceRemainingCreditable>(\n `/tenant/invoices/${invoiceId}/remaining-creditable`,\n undefined,\n requestOptions\n );\n }\n}\n","/**\n * Tenant Incoming Invoices Resource\n *\n * Manage incoming invoices (purchase invoices) for sub-tenants.\n * Incoming invoices are invoices received by a sub-tenant from external suppliers.\n *\n * @packageDocumentation\n */\n\nimport type { HttpClient, RequestOptions } from '../client.js';\nimport type {\n MessageResponse,\n PaginatedResponse,\n SingleResponse,\n} from '../types/common.js';\nimport type {\n CreateIncomingInvoiceParams,\n TenantInvoice,\n TenantInvoiceFilters,\n} from '../types/tenant-invoices.js';\nimport type { RejectionCode } from '../types/invoices.js';\n\n/**\n * Input for accepting an incoming invoice\n */\nexport interface AcceptIncomingInvoiceInput {\n /** Expected payment date (YYYY-MM-DD) */\n payment_date?: string | undefined;\n /** Optional note about acceptance */\n note?: string | undefined;\n}\n\n/**\n * Input for rejecting an incoming invoice\n */\nexport interface RejectIncomingInvoiceInput {\n /** Reason for rejection */\n reason: string;\n /** Standardized rejection code */\n reason_code?: RejectionCode | undefined;\n}\n\n/**\n * Input for marking an invoice as paid\n */\nexport interface MarkPaidIncomingInvoiceInput {\n /** Payment reference (bank transfer ID, check number, etc.) */\n payment_reference?: string | undefined;\n /** Payment date (ISO 8601) - defaults to current date/time */\n paid_at?: string | undefined;\n /** Optional note about the payment */\n note?: string | undefined;\n}\n\n/**\n * Tenant Incoming Invoices API resource\n *\n * Provides operations for managing incoming invoices (purchase invoices)\n * received by sub-tenants from external suppliers.\n *\n * In the French e-invoicing lifecycle, incoming invoices go through these states:\n * - pending: Awaiting review\n * - accepted: Approved for payment\n * - rejected: Disputed/refused\n * - paid: Payment completed\n *\n * @example\n * ```typescript\n * import { ScellTenantClient } from '@scell/sdk';\n *\n * const client = new ScellTenantClient('your-tenant-key');\n *\n * // Create an incoming invoice for a sub-tenant\n * const { data: invoice } = await client.incomingInvoices.create(\n * 'sub-tenant-uuid',\n * {\n * invoice_number: 'SUPP-2026-001',\n * company_id: 'company-uuid',\n * seller: {\n * company_name: 'Supplier Corp',\n * siren: '123456789',\n * address: {\n * line1: '789 Rue Fournisseur',\n * postal_code: '33000',\n * city: 'Bordeaux',\n * country: 'FR'\n * },\n * email: 'invoices@supplier.com'\n * },\n * lines: [{\n * description: 'Raw materials',\n * quantity: 100,\n * unit_price: 10,\n * tax_rate: 20,\n * total_ht: 1000,\n * total_tax: 200,\n * total_ttc: 1200\n * }],\n * issue_date: '2026-01-20',\n * total_ht: 1000,\n * total_ttc: 1200\n * }\n * );\n *\n * // Accept the invoice\n * await client.incomingInvoices.accept(invoice.id, {\n * payment_date: '2026-02-20',\n * note: 'Approved by finance department'\n * });\n *\n * // Later, mark as paid\n * await client.incomingInvoices.markPaid(invoice.id, {\n * payment_reference: 'VIR-2026-0150'\n * });\n * ```\n */\nexport class TenantIncomingInvoicesResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Create a new incoming invoice for a sub-tenant\n *\n * Creates a purchase invoice received by a sub-tenant from an external supplier.\n * The seller's SIREN is validated using the Luhn algorithm.\n *\n * @param subTenantId - Sub-tenant UUID\n * @param params - Invoice creation parameters\n * @param requestOptions - Optional request configuration\n * @returns Created invoice\n *\n * @example\n * ```typescript\n * const { data: invoice } = await client.incomingInvoices.create(\n * 'sub-tenant-uuid',\n * {\n * invoice_number: 'SUPP-2026-001',\n * company_id: 'company-uuid',\n * seller: {\n * company_name: 'Acme Supplies',\n * siren: '123456789',\n * siret: '12345678901234',\n * vat_number: 'FR12123456789',\n * address: {\n * line1: '123 Industrial Park',\n * postal_code: '31000',\n * city: 'Toulouse',\n * country: 'FR'\n * },\n * email: 'billing@acme-supplies.com'\n * },\n * lines: [\n * {\n * description: 'Widget A - Bulk order',\n * quantity: 500,\n * unit_price: 2.50,\n * tax_rate: 20,\n * total_ht: 1250,\n * total_tax: 250,\n * total_ttc: 1500\n * }\n * ],\n * issue_date: '2026-01-15',\n * due_date: '2026-02-15',\n * total_ht: 1250,\n * total_ttc: 1500\n * }\n * );\n *\n * console.log('Incoming invoice created:', invoice.invoice_number);\n * ```\n */\n async create(\n subTenantId: string,\n params: CreateIncomingInvoiceParams,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<TenantInvoice>> {\n return this.http.post<SingleResponse<TenantInvoice>>(\n `/tenant/sub-tenants/${subTenantId}/incoming-invoices`,\n params,\n requestOptions\n );\n }\n\n /**\n * List incoming invoices for a sub-tenant\n *\n * Returns a paginated list of purchase invoices received by the sub-tenant.\n *\n * @param subTenantId - Sub-tenant UUID\n * @param filters - Filter and pagination options\n * @param requestOptions - Optional request configuration\n * @returns Paginated list of invoices\n *\n * @example\n * ```typescript\n * // List all pending invoices\n * const { data: invoices, meta } = await client.incomingInvoices.listForSubTenant(\n * 'sub-tenant-uuid',\n * { status: 'pending', per_page: 50 }\n * );\n *\n * console.log(`Found ${meta.total} pending invoices to review`);\n *\n * // Filter by supplier\n * const acmeInvoices = await client.incomingInvoices.listForSubTenant(\n * 'sub-tenant-uuid',\n * { seller_siret: '12345678901234' }\n * );\n * ```\n */\n async listForSubTenant(\n subTenantId: string,\n filters: TenantInvoiceFilters = {},\n requestOptions?: RequestOptions\n ): Promise<PaginatedResponse<TenantInvoice>> {\n const query: Record<string, string | number | boolean | undefined> = {\n ...filters,\n status: Array.isArray(filters.status)\n ? filters.status.join(',')\n : filters.status,\n };\n\n return this.http.get<PaginatedResponse<TenantInvoice>>(\n `/tenant/sub-tenants/${subTenantId}/incoming-invoices`,\n query,\n requestOptions\n );\n }\n\n /**\n * Get a specific incoming invoice by ID\n *\n * @param invoiceId - Invoice UUID\n * @param requestOptions - Optional request configuration\n * @returns Invoice details\n *\n * @example\n * ```typescript\n * const { data: invoice } = await client.incomingInvoices.get('invoice-uuid');\n *\n * console.log('Invoice from:', invoice.seller.name);\n * console.log('Status:', invoice.status);\n * console.log('Amount:', invoice.total_ttc, invoice.currency);\n * ```\n */\n async get(\n invoiceId: string,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<TenantInvoice>> {\n return this.http.get<SingleResponse<TenantInvoice>>(\n `/tenant/incoming-invoices/${invoiceId}`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Accept an incoming invoice\n *\n * Marks the invoice as accepted, indicating approval for payment.\n * Optionally specify an expected payment date.\n *\n * @param invoiceId - Invoice UUID\n * @param input - Optional acceptance details\n * @param requestOptions - Optional request configuration\n * @returns Updated invoice\n *\n * @example\n * ```typescript\n * // Accept with payment date\n * const { data: invoice } = await client.incomingInvoices.accept(\n * 'invoice-uuid',\n * {\n * payment_date: '2026-02-15',\n * note: 'Approved by CFO'\n * }\n * );\n *\n * console.log('Invoice accepted:', invoice.status); // 'accepted'\n *\n * // Simple acceptance\n * await client.incomingInvoices.accept('invoice-uuid');\n * ```\n */\n async accept(\n invoiceId: string,\n input?: AcceptIncomingInvoiceInput,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<TenantInvoice>> {\n return this.http.post<SingleResponse<TenantInvoice>>(\n `/tenant/incoming-invoices/${invoiceId}/accept`,\n input,\n requestOptions\n );\n }\n\n /**\n * Reject an incoming invoice\n *\n * Marks the invoice as rejected with a reason and optional code.\n *\n * @param invoiceId - Invoice UUID\n * @param reason - Reason for rejection\n * @param code - Optional standardized rejection code\n * @param requestOptions - Optional request configuration\n * @returns Updated invoice\n *\n * @example\n * ```typescript\n * const { data: invoice } = await client.incomingInvoices.reject(\n * 'invoice-uuid',\n * 'Amount does not match purchase order PO-2026-042',\n * 'incorrect_amount'\n * );\n *\n * console.log('Invoice rejected:', invoice.status); // 'rejected'\n * ```\n */\n async reject(\n invoiceId: string,\n reason: string,\n code?: RejectionCode,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<TenantInvoice>> {\n const input: RejectIncomingInvoiceInput = { reason };\n if (code) {\n input.reason_code = code;\n }\n\n return this.http.post<SingleResponse<TenantInvoice>>(\n `/tenant/incoming-invoices/${invoiceId}/reject`,\n input,\n requestOptions\n );\n }\n\n /**\n * Mark an incoming invoice as paid\n *\n * Records payment information for an accepted invoice.\n * This is a mandatory step in the French e-invoicing lifecycle.\n *\n * @param invoiceId - Invoice UUID\n * @param input - Optional payment details\n * @param requestOptions - Optional request configuration\n * @returns Updated invoice with payment information\n *\n * @example\n * ```typescript\n * // Mark as paid with details\n * const { data: invoice } = await client.incomingInvoices.markPaid(\n * 'invoice-uuid',\n * {\n * payment_reference: 'VIR-2026-0150',\n * paid_at: '2026-02-14T14:30:00Z',\n * note: 'Payment via bank transfer'\n * }\n * );\n *\n * console.log('Invoice paid:', invoice.status); // 'paid'\n * console.log('Payment ref:', invoice.payment_reference);\n *\n * // Simple mark as paid (current date)\n * await client.incomingInvoices.markPaid('invoice-uuid');\n * ```\n */\n async markPaid(\n invoiceId: string,\n input?: MarkPaidIncomingInvoiceInput,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<TenantInvoice>> {\n return this.http.post<SingleResponse<TenantInvoice>>(\n `/tenant/incoming-invoices/${invoiceId}/mark-paid`,\n input,\n requestOptions\n );\n }\n\n /**\n * Delete an incoming invoice\n *\n * Only invoices in 'pending' status can be deleted.\n *\n * @param invoiceId - Invoice UUID\n * @param requestOptions - Optional request configuration\n *\n * @example\n * ```typescript\n * await client.incomingInvoices.delete('pending-invoice-uuid');\n * console.log('Incoming invoice deleted');\n * ```\n */\n async delete(\n invoiceId: string,\n requestOptions?: RequestOptions\n ): Promise<MessageResponse> {\n return this.http.delete<MessageResponse>(\n `/tenant/incoming-invoices/${invoiceId}`,\n requestOptions\n );\n }\n\n /**\n * Download incoming invoice as PDF\n *\n * @param invoiceId - Invoice UUID\n * @param requestOptions - Optional request configuration\n * @returns ArrayBuffer containing the PDF file\n *\n * @example\n * ```typescript\n * const pdfBuffer = await client.incomingInvoices.download('invoice-uuid');\n *\n * // Save to file (Node.js)\n * import { writeFileSync } from 'fs';\n * writeFileSync('supplier-invoice.pdf', Buffer.from(pdfBuffer));\n * ```\n */\n async download(\n invoiceId: string,\n requestOptions?: RequestOptions\n ): Promise<ArrayBuffer> {\n return this.http.getRaw(\n `/tenant/incoming-invoices/${invoiceId}/download`,\n undefined,\n requestOptions\n );\n }\n}\n","/**\n * Tenant Credit Notes Resource\n *\n * @packageDocumentation\n */\n\nimport type { HttpClient, RequestOptions } from '../client.js';\nimport type {\n MessageResponse,\n PaginatedResponse,\n SingleResponse,\n} from '../types/common.js';\nimport type {\n CreateTenantCreditNoteInput,\n RemainingCreditable,\n TenantCreditNote,\n TenantCreditNoteListOptions,\n UpdateTenantCreditNoteInput,\n} from '../types/tenant-credit-notes.js';\n\n/**\n * Tenant Credit Notes API resource\n *\n * Manage credit notes for sub-tenant invoices.\n *\n * @example\n * ```typescript\n * // List credit notes for a sub-tenant\n * const { data, meta } = await client.tenantCreditNotes.list('sub-tenant-uuid', {\n * status: 'sent'\n * });\n *\n * // Create a credit note\n * const creditNote = await client.tenantCreditNotes.create('sub-tenant-uuid', {\n * invoice_id: 'invoice-uuid',\n * reason: 'Product returned',\n * type: 'partial',\n * items: [{ invoice_line_id: 'line-uuid', quantity: 1 }]\n * });\n * ```\n */\nexport class TenantCreditNotesResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List credit notes for a sub-tenant\n *\n * @param subTenantId - Sub-tenant UUID\n * @param options - Filter and pagination options\n * @param requestOptions - Request options\n * @returns Paginated list of credit notes\n *\n * @example\n * ```typescript\n * const { data, meta } = await client.tenantCreditNotes.list('sub-tenant-uuid', {\n * status: 'sent',\n * date_from: '2024-01-01',\n * per_page: 50\n * });\n * console.log(`Found ${meta.total} credit notes`);\n * ```\n */\n async list(\n subTenantId: string,\n options: TenantCreditNoteListOptions = {},\n requestOptions?: RequestOptions\n ): Promise<PaginatedResponse<TenantCreditNote>> {\n return this.http.get<PaginatedResponse<TenantCreditNote>>(\n `/tenant/sub-tenants/${subTenantId}/credit-notes`,\n options as Record<string, string | number | boolean | undefined>,\n requestOptions\n );\n }\n\n /**\n * Create a new credit note for a sub-tenant invoice\n *\n * @param subTenantId - Sub-tenant UUID\n * @param input - Credit note creation data\n * @param requestOptions - Request options\n * @returns Created credit note\n *\n * @example\n * ```typescript\n * // Create a partial credit note\n * const { data: creditNote } = await client.tenantCreditNotes.create(\n * 'sub-tenant-uuid',\n * {\n * invoice_id: 'invoice-uuid',\n * reason: 'Product returned - damaged item',\n * type: 'partial',\n * items: [\n * { invoice_line_id: 'line-uuid-1', quantity: 2 }\n * ]\n * }\n * );\n *\n * // Create a total credit note\n * const { data: totalCreditNote } = await client.tenantCreditNotes.create(\n * 'sub-tenant-uuid',\n * {\n * invoice_id: 'invoice-uuid',\n * reason: 'Order cancelled',\n * type: 'total'\n * }\n * );\n * ```\n */\n async create(\n subTenantId: string,\n input: CreateTenantCreditNoteInput,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<TenantCreditNote>> {\n return this.http.post<SingleResponse<TenantCreditNote>>(\n `/tenant/sub-tenants/${subTenantId}/credit-notes`,\n input,\n requestOptions\n );\n }\n\n /**\n * Get a specific credit note by ID\n *\n * @param creditNoteId - Credit note UUID\n * @param requestOptions - Request options\n * @returns Credit note details\n *\n * @example\n * ```typescript\n * const { data: creditNote } = await client.tenantCreditNotes.get('credit-note-uuid');\n * console.log('Credit note number:', creditNote.credit_note_number);\n * console.log('Total:', creditNote.total, creditNote.currency);\n * ```\n */\n async get(\n creditNoteId: string,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<TenantCreditNote>> {\n return this.http.get<SingleResponse<TenantCreditNote>>(\n `/tenant/credit-notes/${creditNoteId}`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Update a credit note\n *\n * Only credit notes in 'draft' status can be updated.\n *\n * @param creditNoteId - Credit note UUID\n * @param input - Update data\n * @param requestOptions - Request options\n * @returns Updated credit note\n *\n * @example\n * ```typescript\n * const { data: creditNote } = await client.tenantCreditNotes.update(\n * 'credit-note-uuid',\n * {\n * reason: 'Updated reason: Customer complaint resolved',\n * items: [\n * { invoice_line_id: 'line-uuid', quantity: 3 }\n * ]\n * }\n * );\n * console.log('Credit note updated:', creditNote.reason);\n * ```\n */\n async update(\n creditNoteId: string,\n input: UpdateTenantCreditNoteInput,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<TenantCreditNote>> {\n return this.http.patch<SingleResponse<TenantCreditNote>>(\n `/tenant/credit-notes/${creditNoteId}`,\n input,\n requestOptions\n );\n }\n\n /**\n * Send a credit note\n *\n * Changes the status from 'draft' to 'sent'.\n *\n * @param creditNoteId - Credit note UUID\n * @param requestOptions - Request options\n * @returns Updated credit note\n *\n * @example\n * ```typescript\n * const { data: sentCreditNote } = await client.tenantCreditNotes.send('credit-note-uuid');\n * console.log('Status:', sentCreditNote.status); // 'sent'\n * ```\n */\n async send(\n creditNoteId: string,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<TenantCreditNote>> {\n return this.http.post<SingleResponse<TenantCreditNote>>(\n `/tenant/credit-notes/${creditNoteId}/send`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Delete a credit note (draft only)\n *\n * Only credit notes with status 'draft' can be deleted.\n *\n * @param creditNoteId - Credit note UUID\n * @param requestOptions - Request options\n *\n * @example\n * ```typescript\n * await client.tenantCreditNotes.delete('credit-note-uuid');\n * ```\n */\n async delete(\n creditNoteId: string,\n requestOptions?: RequestOptions\n ): Promise<MessageResponse> {\n return this.http.delete<MessageResponse>(\n `/tenant/credit-notes/${creditNoteId}`,\n requestOptions\n );\n }\n\n /**\n * Download credit note as PDF\n *\n * @param creditNoteId - Credit note UUID\n * @param requestOptions - Request options\n * @returns ArrayBuffer containing the PDF file\n *\n * @example\n * ```typescript\n * // Download credit note PDF\n * const pdfBuffer = await client.tenantCreditNotes.download('credit-note-uuid');\n *\n * // In Node.js, save to file:\n * import { writeFileSync } from 'fs';\n * writeFileSync('credit-note.pdf', Buffer.from(pdfBuffer));\n *\n * // In browser, trigger download:\n * const blob = new Blob([pdfBuffer], { type: 'application/pdf' });\n * const url = URL.createObjectURL(blob);\n * const a = document.createElement('a');\n * a.href = url;\n * a.download = 'credit-note.pdf';\n * a.click();\n * ```\n */\n async download(\n creditNoteId: string,\n requestOptions?: RequestOptions\n ): Promise<ArrayBuffer> {\n return this.http.getRaw(\n `/tenant/credit-notes/${creditNoteId}/download`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Get remaining creditable amount for an invoice\n *\n * Returns information about how much can still be credited for an invoice,\n * including per-line breakdown.\n *\n * @param invoiceId - Invoice UUID\n * @param requestOptions - Request options\n * @returns Remaining creditable information\n *\n * @example\n * ```typescript\n * const remaining = await client.tenantCreditNotes.remainingCreditable('invoice-uuid');\n *\n * console.log('Invoice total:', remaining.invoice_total);\n * console.log('Already credited:', remaining.credited_total);\n * console.log('Remaining to credit:', remaining.remaining_total);\n *\n * // Check remaining quantity per line\n * remaining.lines.forEach(line => {\n * console.log(`${line.description}: ${line.remaining_quantity} remaining`);\n * });\n * ```\n */\n async remainingCreditable(\n invoiceId: string,\n requestOptions?: RequestOptions\n ): Promise<RemainingCreditable> {\n return this.http.get<RemainingCreditable>(\n `/tenant/invoices/${invoiceId}/remaining-creditable`,\n undefined,\n requestOptions\n );\n }\n}\n","/**\n * Fiscal Compliance Resource\n * @packageDocumentation\n */\n\nimport type { HttpClient, RequestOptions } from '../client.js';\nimport type { MessageResponse, PaginatedResponse, SingleResponse } from '../types/common.js';\nimport type {\n FiscalAnchor,\n FiscalAnchorsOptions,\n FiscalAttestation,\n FiscalClosing,\n FiscalClosingsOptions,\n FiscalComplianceData,\n FiscalCreateRuleInput,\n FiscalDailyClosingInput,\n FiscalEntriesOptions,\n FiscalEntry,\n FiscalExportRulesOptions,\n FiscalFecExportOptions,\n FiscalFecExportResult,\n FiscalForensicExportOptions,\n FiscalIntegrityHistoryOptions,\n FiscalIntegrityOptions,\n FiscalIntegrityReport,\n FiscalKillSwitchActivateInput,\n FiscalKillSwitchStatus,\n FiscalReplayRulesInput,\n FiscalRule,\n FiscalRulesOptions,\n FiscalUpdateRuleInput,\n} from '../types/fiscal.js';\n\nexport class FiscalResource {\n constructor(private readonly http: HttpClient) {}\n\n async compliance(requestOptions?: RequestOptions): Promise<SingleResponse<FiscalComplianceData>> {\n return this.http.get<SingleResponse<FiscalComplianceData>>('/tenant/fiscal/compliance', undefined, requestOptions);\n }\n\n async integrity(options: FiscalIntegrityOptions = {}, requestOptions?: RequestOptions): Promise<SingleResponse<FiscalIntegrityReport>> {\n return this.http.get<SingleResponse<FiscalIntegrityReport>>('/tenant/fiscal/integrity', options as unknown as Record<string, string | number | boolean | undefined>, requestOptions);\n }\n\n async integrityHistory(options: FiscalIntegrityHistoryOptions = {}, requestOptions?: RequestOptions): Promise<PaginatedResponse<FiscalIntegrityReport>> {\n return this.http.get<PaginatedResponse<FiscalIntegrityReport>>('/tenant/fiscal/integrity/history', options as unknown as Record<string, string | number | boolean | undefined>, requestOptions);\n }\n\n async integrityForDate(date: string, requestOptions?: RequestOptions): Promise<SingleResponse<FiscalIntegrityReport>> {\n return this.http.get<SingleResponse<FiscalIntegrityReport>>(`/tenant/fiscal/integrity/${date}`, undefined, requestOptions);\n }\n\n async closings(options: FiscalClosingsOptions = {}, requestOptions?: RequestOptions): Promise<PaginatedResponse<FiscalClosing>> {\n return this.http.get<PaginatedResponse<FiscalClosing>>('/tenant/fiscal/closings', options as unknown as Record<string, string | number | boolean | undefined>, requestOptions);\n }\n\n async performDailyClosing(input: FiscalDailyClosingInput = {}, requestOptions?: RequestOptions): Promise<MessageResponse> {\n return this.http.post<MessageResponse>('/tenant/fiscal/closings/daily', input, requestOptions);\n }\n\n async fecExport(options: FiscalFecExportOptions, requestOptions?: RequestOptions): Promise<SingleResponse<FiscalFecExportResult>> {\n return this.http.get<SingleResponse<FiscalFecExportResult>>('/tenant/fiscal/fec', options as unknown as Record<string, string | number | boolean | undefined>, requestOptions);\n }\n\n async fecDownload(options: FiscalFecExportOptions, requestOptions?: RequestOptions): Promise<ArrayBuffer> {\n return this.http.getRaw('/tenant/fiscal/fec', { ...options, download: true } as unknown as Record<string, string | number | boolean | undefined>, requestOptions);\n }\n\n async attestation(year: number, requestOptions?: RequestOptions): Promise<SingleResponse<FiscalAttestation>> {\n return this.http.get<SingleResponse<FiscalAttestation>>(`/tenant/fiscal/attestation/${year}`, undefined, requestOptions);\n }\n\n async attestationDownload(year: number, requestOptions?: RequestOptions): Promise<ArrayBuffer> {\n return this.http.getRaw(`/tenant/fiscal/attestation/${year}/download`, undefined, requestOptions);\n }\n\n async entries(options: FiscalEntriesOptions = {}, requestOptions?: RequestOptions): Promise<PaginatedResponse<FiscalEntry>> {\n return this.http.get<PaginatedResponse<FiscalEntry>>('/tenant/fiscal/entries', options as unknown as Record<string, string | number | boolean | undefined>, requestOptions);\n }\n\n async killSwitchStatus(requestOptions?: RequestOptions): Promise<SingleResponse<FiscalKillSwitchStatus>> {\n return this.http.get<SingleResponse<FiscalKillSwitchStatus>>('/tenant/fiscal/kill-switch/status', undefined, requestOptions);\n }\n\n async killSwitchActivate(input: FiscalKillSwitchActivateInput, requestOptions?: RequestOptions): Promise<MessageResponse> {\n return this.http.post<MessageResponse>('/tenant/fiscal/kill-switch/activate', input, requestOptions);\n }\n\n async killSwitchDeactivate(requestOptions?: RequestOptions): Promise<MessageResponse> {\n return this.http.post<MessageResponse>('/tenant/fiscal/kill-switch/deactivate', undefined, requestOptions);\n }\n\n async anchors(options: FiscalAnchorsOptions = {}, requestOptions?: RequestOptions): Promise<PaginatedResponse<FiscalAnchor>> {\n return this.http.get<PaginatedResponse<FiscalAnchor>>('/tenant/fiscal/anchors', options as unknown as Record<string, string | number | boolean | undefined>, requestOptions);\n }\n\n async rules(options: FiscalRulesOptions = {}, requestOptions?: RequestOptions): Promise<PaginatedResponse<FiscalRule>> {\n return this.http.get<PaginatedResponse<FiscalRule>>('/tenant/fiscal/rules', options as unknown as Record<string, string | number | boolean | undefined>, requestOptions);\n }\n\n async ruleDetail(key: string, requestOptions?: RequestOptions): Promise<SingleResponse<FiscalRule>> {\n return this.http.get<SingleResponse<FiscalRule>>(`/tenant/fiscal/rules/${key}`, undefined, requestOptions);\n }\n\n async ruleHistory(key: string, requestOptions?: RequestOptions): Promise<PaginatedResponse<FiscalRule>> {\n return this.http.get<PaginatedResponse<FiscalRule>>(`/tenant/fiscal/rules/${key}/history`, undefined, requestOptions);\n }\n\n async createRule(input: FiscalCreateRuleInput, requestOptions?: RequestOptions): Promise<SingleResponse<FiscalRule>> {\n return this.http.post<SingleResponse<FiscalRule>>('/tenant/fiscal/rules', input, requestOptions);\n }\n\n async updateRule(id: string, input: FiscalUpdateRuleInput, requestOptions?: RequestOptions): Promise<SingleResponse<FiscalRule>> {\n return this.http.post<SingleResponse<FiscalRule>>(`/tenant/fiscal/rules/${id}`, input, requestOptions);\n }\n\n async exportRules(options: FiscalExportRulesOptions, requestOptions?: RequestOptions): Promise<SingleResponse<Record<string, unknown>>> {\n return this.http.get<SingleResponse<Record<string, unknown>>>('/tenant/fiscal/rules/export', options as unknown as Record<string, string | number | boolean | undefined>, requestOptions);\n }\n\n async replayRules(input: FiscalReplayRulesInput, requestOptions?: RequestOptions): Promise<MessageResponse> {\n return this.http.post<MessageResponse>('/tenant/fiscal/rules/replay', input, requestOptions);\n }\n\n async forensicExport(options: FiscalForensicExportOptions, requestOptions?: RequestOptions): Promise<SingleResponse<Record<string, unknown>>> {\n return this.http.get<SingleResponse<Record<string, unknown>>>('/tenant/fiscal/forensic-export', options as unknown as Record<string, string | number | boolean | undefined>, requestOptions);\n }\n}\n","/**\n * Billing Resource\n * @packageDocumentation\n */\n\nimport type { HttpClient, RequestOptions } from '../client.js';\nimport type { MessageResponse, PaginatedResponse, SingleResponse } from '../types/common.js';\nimport type {\n BillingInvoice,\n BillingInvoiceListOptions,\n BillingTopUpConfirmInput,\n BillingTopUpInput,\n BillingTransaction,\n BillingTransactionListOptions,\n BillingUsage,\n BillingUsageOptions,\n} from '../types/billing.js';\n\nexport class BillingResource {\n constructor(private readonly http: HttpClient) {}\n\n async invoices(options: BillingInvoiceListOptions = {}, requestOptions?: RequestOptions): Promise<PaginatedResponse<BillingInvoice>> {\n return this.http.get<PaginatedResponse<BillingInvoice>>('/tenant/billing/invoices', options as Record<string, string | number | boolean | undefined>, requestOptions);\n }\n\n async showInvoice(invoiceId: string, requestOptions?: RequestOptions): Promise<SingleResponse<BillingInvoice>> {\n return this.http.get<SingleResponse<BillingInvoice>>(`/tenant/billing/invoices/${invoiceId}`, undefined, requestOptions);\n }\n\n async downloadInvoice(invoiceId: string, requestOptions?: RequestOptions): Promise<ArrayBuffer> {\n return this.http.getRaw(`/tenant/billing/invoices/${invoiceId}/download`, undefined, requestOptions);\n }\n\n async usage(options: BillingUsageOptions = {}, requestOptions?: RequestOptions): Promise<SingleResponse<BillingUsage>> {\n return this.http.get<SingleResponse<BillingUsage>>('/tenant/billing/usage', options as Record<string, string | number | boolean | undefined>, requestOptions);\n }\n\n async topUp(input: BillingTopUpInput, requestOptions?: RequestOptions): Promise<MessageResponse> {\n return this.http.post<MessageResponse>('/tenant/billing/top-up', input, requestOptions);\n }\n\n async confirmTopUp(input: BillingTopUpConfirmInput, requestOptions?: RequestOptions): Promise<MessageResponse> {\n return this.http.post<MessageResponse>('/tenant/billing/top-up/confirm', input, requestOptions);\n }\n\n async transactions(options: BillingTransactionListOptions = {}, requestOptions?: RequestOptions): Promise<PaginatedResponse<BillingTransaction>> {\n return this.http.get<PaginatedResponse<BillingTransaction>>('/tenant/billing/transactions', options as Record<string, string | number | boolean | undefined>, requestOptions);\n }\n}\n","/**\n * Stats Resource\n * @packageDocumentation\n */\n\nimport type { HttpClient, RequestOptions } from '../client.js';\nimport type { SingleResponse } from '../types/common.js';\nimport type {\n StatsMonthly,\n StatsMonthlyOptions,\n StatsOverview,\n StatsOverviewOptions,\n} from '../types/stats.js';\n\nexport class StatsResource {\n constructor(private readonly http: HttpClient) {}\n\n async overview(options: StatsOverviewOptions = {}, requestOptions?: RequestOptions): Promise<SingleResponse<StatsOverview>> {\n return this.http.get<SingleResponse<StatsOverview>>('/tenant/stats/overview', options as Record<string, string | number | boolean | undefined>, requestOptions);\n }\n\n async monthly(options: StatsMonthlyOptions = {}, requestOptions?: RequestOptions): Promise<SingleResponse<StatsMonthly[]>> {\n return this.http.get<SingleResponse<StatsMonthly[]>>('/tenant/stats/monthly', options as Record<string, string | number | boolean | undefined>, requestOptions);\n }\n\n async subTenantOverview(subTenantId: string, options: StatsOverviewOptions = {}, requestOptions?: RequestOptions): Promise<SingleResponse<StatsOverview>> {\n return this.http.get<SingleResponse<StatsOverview>>(`/tenant/sub-tenants/${subTenantId}/stats/overview`, options as Record<string, string | number | boolean | undefined>, requestOptions);\n }\n}\n","/**\n * Sub-Tenants Resource\n * @packageDocumentation\n */\n\nimport type { HttpClient, RequestOptions } from '../client.js';\nimport type { MessageResponse, PaginatedResponse, SingleResponse } from '../types/common.js';\nimport type {\n CreateSubTenantInput,\n SubTenant,\n SubTenantListOptions,\n UpdateSubTenantInput,\n} from '../types/sub-tenants.js';\n\nexport class SubTenantsResource {\n constructor(private readonly http: HttpClient) {}\n\n async list(options: SubTenantListOptions = {}, requestOptions?: RequestOptions): Promise<PaginatedResponse<SubTenant>> {\n return this.http.get<PaginatedResponse<SubTenant>>('/tenant/sub-tenants', options as Record<string, string | number | boolean | undefined>, requestOptions);\n }\n\n async create(input: CreateSubTenantInput, requestOptions?: RequestOptions): Promise<SingleResponse<SubTenant>> {\n return this.http.post<SingleResponse<SubTenant>>('/tenant/sub-tenants', input, requestOptions);\n }\n\n async get(id: string, requestOptions?: RequestOptions): Promise<SingleResponse<SubTenant>> {\n return this.http.get<SingleResponse<SubTenant>>(`/tenant/sub-tenants/${id}`, undefined, requestOptions);\n }\n\n async update(id: string, input: UpdateSubTenantInput, requestOptions?: RequestOptions): Promise<SingleResponse<SubTenant>> {\n return this.http.patch<SingleResponse<SubTenant>>(`/tenant/sub-tenants/${id}`, input, requestOptions);\n }\n\n async delete(id: string, requestOptions?: RequestOptions): Promise<MessageResponse> {\n return this.http.delete<MessageResponse>(`/tenant/sub-tenants/${id}`, requestOptions);\n }\n\n async findByExternalId(externalId: string, requestOptions?: RequestOptions): Promise<SingleResponse<SubTenant>> {\n return this.http.get<SingleResponse<SubTenant>>(`/tenant/sub-tenants/by-external-id/${externalId}`, undefined, requestOptions);\n }\n}\n","/**\n * Scell Tenant Client\n *\n * Client for multi-tenant operations using X-Tenant-Key authentication.\n * Use this client for tenant-specific invoice and credit note operations.\n *\n * @packageDocumentation\n */\n\nimport { HttpClient, type ClientConfig, type RequestOptions } from './client.js';\nimport { TenantDirectInvoicesResource } from './resources/tenant-direct-invoices.js';\nimport { TenantDirectCreditNotesResource } from './resources/tenant-direct-credit-notes.js';\nimport { TenantIncomingInvoicesResource } from './resources/tenant-incoming-invoices.js';\nimport { TenantCreditNotesResource } from './resources/tenant-credit-notes.js';\nimport { FiscalResource } from './resources/fiscal.js';\nimport { BillingResource } from './resources/billing.js';\nimport { StatsResource } from './resources/stats.js';\nimport { SubTenantsResource } from './resources/sub-tenants.js';\nimport type { SingleResponse } from './types/common.js';\nimport type {\n TenantProfile,\n UpdateTenantProfileInput,\n TenantBalance,\n TenantQuickStats,\n RegenerateKeyResult,\n} from './types/tenant-profile.js';\n\n/**\n * Scell Tenant Client\n *\n * Use this client for multi-tenant operations with X-Tenant-Key authentication.\n */\nexport class ScellTenantClient {\n private readonly http: HttpClient;\n\n /** Direct invoices resource */\n public readonly directInvoices: TenantDirectInvoicesResource;\n\n /** Direct credit notes resource */\n public readonly directCreditNotes: TenantDirectCreditNotesResource;\n\n /** Incoming invoices resource */\n public readonly incomingInvoices: TenantIncomingInvoicesResource;\n\n /** Sub-tenant credit notes resource */\n public readonly subTenantCreditNotes: TenantCreditNotesResource;\n\n /** Fiscal compliance resource (LF 2026) */\n public readonly fiscal: FiscalResource;\n\n /** Billing resource */\n public readonly billing: BillingResource;\n\n /** Stats resource */\n public readonly stats: StatsResource;\n\n /** Sub-tenants resource */\n public readonly subTenants: SubTenantsResource;\n\n /**\n * Create a new Scell Tenant Client\n *\n * @param tenantKey - Your tenant API key (from dashboard)\n * @param config - Optional client configuration\n */\n constructor(tenantKey: string, config: ClientConfig = {}) {\n this.http = new HttpClient('tenant-key', tenantKey, config);\n\n this.directInvoices = new TenantDirectInvoicesResource(this.http);\n this.directCreditNotes = new TenantDirectCreditNotesResource(this.http);\n this.incomingInvoices = new TenantIncomingInvoicesResource(this.http);\n this.subTenantCreditNotes = new TenantCreditNotesResource(this.http);\n this.fiscal = new FiscalResource(this.http);\n this.billing = new BillingResource(this.http);\n this.stats = new StatsResource(this.http);\n this.subTenants = new SubTenantsResource(this.http);\n }\n\n // ── Tenant Profile Methods ──────────────────────────────\n\n /** Get tenant profile */\n async me(requestOptions?: RequestOptions): Promise<SingleResponse<TenantProfile>> {\n return this.http.get<SingleResponse<TenantProfile>>('/tenant/me', undefined, requestOptions);\n }\n\n /** Update tenant profile */\n async updateProfile(input: UpdateTenantProfileInput, requestOptions?: RequestOptions): Promise<SingleResponse<TenantProfile>> {\n return this.http.post<SingleResponse<TenantProfile>>('/tenant/me', input, requestOptions);\n }\n\n /** Get tenant balance */\n async balance(requestOptions?: RequestOptions): Promise<SingleResponse<TenantBalance>> {\n return this.http.get<SingleResponse<TenantBalance>>('/tenant/balance', undefined, requestOptions);\n }\n\n /** Get quick stats */\n async quickStats(requestOptions?: RequestOptions): Promise<SingleResponse<TenantQuickStats>> {\n return this.http.get<SingleResponse<TenantQuickStats>>('/tenant/stats', undefined, requestOptions);\n }\n\n /** Regenerate tenant key */\n async regenerateKey(requestOptions?: RequestOptions): Promise<SingleResponse<RegenerateKeyResult>> {\n return this.http.post<SingleResponse<RegenerateKeyResult>>('/tenant/regenerate-key', undefined, requestOptions);\n }\n}\n","/**\n * API Keys Resource\n *\n * @packageDocumentation\n */\n\nimport type { HttpClient, RequestOptions } from '../client.js';\nimport type {\n MessageResponse,\n MessageWithDataResponse,\n SingleResponse,\n} from '../types/common.js';\nimport type {\n ApiKey,\n ApiKeyWithSecret,\n CreateApiKeyInput,\n} from '../types/api-keys.js';\n\n/**\n * API Keys resource\n *\n * @example\n * ```typescript\n * // Create an API key for a company\n * const apiKey = await client.apiKeys.create({\n * name: 'Production Key',\n * company_id: 'company-uuid',\n * environment: 'production'\n * });\n *\n * // Store the key securely!\n * console.log('API Key:', apiKey.key);\n * ```\n */\nexport class ApiKeysResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List all API keys\n *\n * @param requestOptions - Request options\n * @returns List of API keys (without secrets)\n *\n * @example\n * ```typescript\n * const { data: keys } = await client.apiKeys.list();\n * keys.forEach(key => {\n * console.log(`${key.name}: ${key.key_prefix}...`);\n * });\n * ```\n */\n async list(requestOptions?: RequestOptions): Promise<{ data: ApiKey[] }> {\n return this.http.get<{ data: ApiKey[] }>(\n '/api-keys',\n undefined,\n requestOptions\n );\n }\n\n /**\n * Get a specific API key\n *\n * @param id - API Key UUID\n * @param requestOptions - Request options\n * @returns API key details (without secret)\n *\n * @example\n * ```typescript\n * const { data: key } = await client.apiKeys.get('key-uuid');\n * console.log(`Last used: ${key.last_used_at}`);\n * ```\n */\n async get(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<ApiKey>> {\n return this.http.get<SingleResponse<ApiKey>>(\n `/api-keys/${id}`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Create a new API key\n *\n * Important: The full key is only returned once during creation.\n * Store it securely - you won't be able to retrieve it again.\n *\n * @param input - API key configuration\n * @param requestOptions - Request options\n * @returns Created API key with full key value\n *\n * @example\n * ```typescript\n * const { data: apiKey } = await client.apiKeys.create({\n * name: 'Production Integration',\n * company_id: 'company-uuid',\n * environment: 'production',\n * permissions: ['invoices:write', 'signatures:write']\n * });\n *\n * // IMPORTANT: Store this key securely!\n * // You won't be able to see it again.\n * console.log('Save this key:', apiKey.key);\n * ```\n */\n async create(\n input: CreateApiKeyInput,\n requestOptions?: RequestOptions\n ): Promise<MessageWithDataResponse<ApiKeyWithSecret>> {\n return this.http.post<MessageWithDataResponse<ApiKeyWithSecret>>(\n '/api-keys',\n input,\n requestOptions\n );\n }\n\n /**\n * Delete an API key\n *\n * Warning: This will immediately revoke the key and all\n * requests using it will fail.\n *\n * @param id - API Key UUID\n * @param requestOptions - Request options\n * @returns Deletion confirmation\n *\n * @example\n * ```typescript\n * await client.apiKeys.delete('key-uuid');\n * console.log('API key revoked');\n * ```\n */\n async delete(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<MessageResponse> {\n return this.http.delete<MessageResponse>(`/api-keys/${id}`, requestOptions);\n }\n}\n","/**\n * Auth Resource\n *\n * @packageDocumentation\n */\n\nimport type { HttpClient, RequestOptions } from '../client.js';\nimport type { MessageResponse, SingleResponse } from '../types/common.js';\nimport type {\n AuthResponse,\n ForgotPasswordInput,\n LoginCredentials,\n RegisterInput,\n ResetPasswordInput,\n User,\n} from '../types/auth.js';\n\n/**\n * Auth API resource\n *\n * Note: Most auth endpoints are only used during initial setup.\n * After login, use the returned token to create a ScellClient.\n *\n * @example\n * ```typescript\n * // Login and get token\n * const auth = await ScellAuth.login({\n * email: 'user@example.com',\n * password: 'password'\n * });\n *\n * // Create client with token\n * const client = new ScellClient(auth.token);\n *\n * // Get current user\n * const user = await client.auth.me();\n * ```\n */\nexport class AuthResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Get current authenticated user\n *\n * @param requestOptions - Request options\n * @returns Current user details\n *\n * @example\n * ```typescript\n * const { data: user } = await client.auth.me();\n * console.log(`Logged in as: ${user.name} (${user.email})`);\n * ```\n */\n async me(requestOptions?: RequestOptions): Promise<SingleResponse<User>> {\n return this.http.get<SingleResponse<User>>(\n '/auth/me',\n undefined,\n requestOptions\n );\n }\n\n /**\n * Logout (revoke current token)\n *\n * @param requestOptions - Request options\n * @returns Logout confirmation\n *\n * @example\n * ```typescript\n * await client.auth.logout();\n * // Token is now invalid\n * ```\n */\n async logout(requestOptions?: RequestOptions): Promise<MessageResponse> {\n return this.http.post<MessageResponse>(\n '/auth/logout',\n undefined,\n requestOptions\n );\n }\n}\n\n/**\n * Static auth methods (don't require authentication)\n *\n * @example\n * ```typescript\n * import { ScellAuth } from '@scell/sdk';\n *\n * // Register new user\n * const auth = await ScellAuth.register({\n * name: 'John Doe',\n * email: 'john@example.com',\n * password: 'securepassword123',\n * password_confirmation: 'securepassword123'\n * });\n *\n * // Login existing user\n * const auth = await ScellAuth.login({\n * email: 'john@example.com',\n * password: 'securepassword123'\n * });\n *\n * // Use the token\n * const client = new ScellClient(auth.token);\n * ```\n */\nexport const ScellAuth = {\n /**\n * Default base URL for auth requests\n */\n baseUrl: 'https://api.scell.io/api/v1',\n\n /**\n * Register a new user\n *\n * @param input - Registration data\n * @param baseUrl - Optional base URL override\n * @returns Auth response with token\n *\n * @example\n * ```typescript\n * const auth = await ScellAuth.register({\n * name: 'Jane Doe',\n * email: 'jane@example.com',\n * password: 'MySecurePassword123!',\n * password_confirmation: 'MySecurePassword123!'\n * });\n *\n * console.log('Welcome,', auth.user.name);\n * const client = new ScellClient(auth.token);\n * ```\n */\n async register(\n input: RegisterInput,\n baseUrl?: string\n ): Promise<AuthResponse> {\n const url = `${baseUrl ?? this.baseUrl}/auth/register`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify(input),\n });\n\n const body = await response.json();\n\n if (!response.ok) {\n const { parseApiError } = await import('../errors.js');\n parseApiError(response.status, body, response.headers);\n }\n\n return body as AuthResponse;\n },\n\n /**\n * Login an existing user\n *\n * @param credentials - Login credentials\n * @param baseUrl - Optional base URL override\n * @returns Auth response with token\n *\n * @example\n * ```typescript\n * const auth = await ScellAuth.login({\n * email: 'user@example.com',\n * password: 'password'\n * });\n *\n * // Store the token securely\n * localStorage.setItem('scell_token', auth.token);\n *\n * // Create client\n * const client = new ScellClient(auth.token);\n * ```\n */\n async login(\n credentials: LoginCredentials,\n baseUrl?: string\n ): Promise<AuthResponse> {\n const url = `${baseUrl ?? this.baseUrl}/auth/login`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify(credentials),\n });\n\n const body = await response.json();\n\n if (!response.ok) {\n const { parseApiError } = await import('../errors.js');\n parseApiError(response.status, body, response.headers);\n }\n\n return body as AuthResponse;\n },\n\n /**\n * Request password reset email\n *\n * @param input - Email address\n * @param baseUrl - Optional base URL override\n * @returns Confirmation message\n *\n * @example\n * ```typescript\n * await ScellAuth.forgotPassword({\n * email: 'user@example.com'\n * });\n * console.log('Check your email for reset link');\n * ```\n */\n async forgotPassword(\n input: ForgotPasswordInput,\n baseUrl?: string\n ): Promise<MessageResponse> {\n const url = `${baseUrl ?? this.baseUrl}/auth/forgot-password`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify(input),\n });\n\n const body = await response.json();\n\n if (!response.ok) {\n const { parseApiError } = await import('../errors.js');\n parseApiError(response.status, body, response.headers);\n }\n\n return body as MessageResponse;\n },\n\n /**\n * Reset password with token from email\n *\n * @param input - Reset password data\n * @param baseUrl - Optional base URL override\n * @returns Confirmation message\n *\n * @example\n * ```typescript\n * await ScellAuth.resetPassword({\n * email: 'user@example.com',\n * token: 'reset-token-from-email',\n * password: 'NewSecurePassword123!',\n * password_confirmation: 'NewSecurePassword123!'\n * });\n * ```\n */\n async resetPassword(\n input: ResetPasswordInput,\n baseUrl?: string\n ): Promise<MessageResponse> {\n const url = `${baseUrl ?? this.baseUrl}/auth/reset-password`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify(input),\n });\n\n const body = await response.json();\n\n if (!response.ok) {\n const { parseApiError } = await import('../errors.js');\n parseApiError(response.status, body, response.headers);\n }\n\n return body as MessageResponse;\n },\n};\n","/**\n * Balance Resource\n *\n * @packageDocumentation\n */\n\nimport type { HttpClient, RequestOptions } from '../client.js';\nimport type {\n MessageWithDataResponse,\n PaginatedResponse,\n SingleResponse,\n} from '../types/common.js';\nimport type {\n Balance,\n ReloadBalanceInput,\n ReloadBalanceResponse,\n Transaction,\n TransactionListOptions,\n UpdateBalanceSettingsInput,\n} from '../types/balance.js';\n\n/**\n * Balance API resource\n *\n * @example\n * ```typescript\n * // Check balance\n * const balance = await client.balance.get();\n * console.log(`Current balance: ${balance.amount} ${balance.currency}`);\n *\n * // Reload balance\n * await client.balance.reload({ amount: 100 });\n *\n * // View transactions\n * const transactions = await client.balance.transactions({\n * type: 'debit',\n * service: 'invoice'\n * });\n * ```\n */\nexport class BalanceResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Get current balance and settings\n *\n * @param requestOptions - Request options\n * @returns Current balance details\n *\n * @example\n * ```typescript\n * const { data: balance } = await client.balance.get();\n * console.log(`Balance: ${balance.amount} ${balance.currency}`);\n *\n * if (balance.amount < balance.low_balance_alert_threshold) {\n * console.log('Warning: Low balance!');\n * }\n * ```\n */\n async get(requestOptions?: RequestOptions): Promise<SingleResponse<Balance>> {\n return this.http.get<SingleResponse<Balance>>(\n '/balance',\n undefined,\n requestOptions\n );\n }\n\n /**\n * Reload balance\n *\n * Note: This is a simulation endpoint. In production, use Stripe integration.\n *\n * @param input - Reload amount (10-10000 EUR)\n * @param requestOptions - Request options\n * @returns Reload transaction details\n *\n * @example\n * ```typescript\n * const { transaction } = await client.balance.reload({ amount: 100 });\n * console.log(`New balance: ${transaction.balance_after}`);\n * ```\n */\n async reload(\n input: ReloadBalanceInput,\n requestOptions?: RequestOptions\n ): Promise<ReloadBalanceResponse> {\n return this.http.post<ReloadBalanceResponse>(\n '/balance/reload',\n input,\n requestOptions\n );\n }\n\n /**\n * Update balance settings\n *\n * Configure auto-reload and alert thresholds.\n *\n * @param input - Settings to update\n * @param requestOptions - Request options\n * @returns Updated settings\n *\n * @example\n * ```typescript\n * await client.balance.updateSettings({\n * auto_reload_enabled: true,\n * auto_reload_threshold: 50,\n * auto_reload_amount: 200,\n * low_balance_alert_threshold: 100,\n * critical_balance_alert_threshold: 25\n * });\n * ```\n */\n async updateSettings(\n input: UpdateBalanceSettingsInput,\n requestOptions?: RequestOptions\n ): Promise<MessageWithDataResponse<Partial<Balance>>> {\n return this.http.put<MessageWithDataResponse<Partial<Balance>>>(\n '/balance/settings',\n input,\n requestOptions\n );\n }\n\n /**\n * List balance transactions\n *\n * @param options - Filter and pagination options\n * @param requestOptions - Request options\n * @returns Paginated list of transactions\n *\n * @example\n * ```typescript\n * // List all invoice debits\n * const { data, meta } = await client.balance.transactions({\n * type: 'debit',\n * service: 'invoice',\n * from: '2024-01-01',\n * to: '2024-01-31'\n * });\n *\n * data.forEach(tx => {\n * console.log(`${tx.description}: -${tx.amount} EUR`);\n * });\n * ```\n */\n async transactions(\n options: TransactionListOptions = {},\n requestOptions?: RequestOptions\n ): Promise<PaginatedResponse<Transaction>> {\n return this.http.get<PaginatedResponse<Transaction>>(\n '/balance/transactions',\n options as Record<string, string | number | boolean | undefined>,\n requestOptions\n );\n }\n}\n","/**\n * Companies Resource\n *\n * @packageDocumentation\n */\n\nimport type { HttpClient, RequestOptions } from '../client.js';\nimport type {\n MessageResponse,\n MessageWithDataResponse,\n SingleResponse,\n} from '../types/common.js';\nimport type {\n Company,\n CreateCompanyInput,\n KycInitiateResponse,\n KycStatusResponse,\n UpdateCompanyInput,\n} from '../types/companies.js';\n\n/**\n * Companies API resource\n *\n * @example\n * ```typescript\n * // Create a company\n * const company = await client.companies.create({\n * name: 'My Company',\n * siret: '12345678901234',\n * address_line1: '1 Rue de la Paix',\n * postal_code: '75001',\n * city: 'Paris'\n * });\n *\n * // Initiate KYC\n * const kyc = await client.companies.initiateKyc(company.id);\n * console.log('KYC URL:', kyc.redirect_url);\n * ```\n */\nexport class CompaniesResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List all companies for the authenticated user\n *\n * @param requestOptions - Request options\n * @returns List of companies\n *\n * @example\n * ```typescript\n * const { data: companies } = await client.companies.list();\n * companies.forEach(c => console.log(c.name, c.status));\n * ```\n */\n async list(\n requestOptions?: RequestOptions\n ): Promise<{ data: Company[] }> {\n return this.http.get<{ data: Company[] }>(\n '/companies',\n undefined,\n requestOptions\n );\n }\n\n /**\n * Get a specific company by ID\n *\n * @param id - Company UUID\n * @param requestOptions - Request options\n * @returns Company details\n *\n * @example\n * ```typescript\n * const { data: company } = await client.companies.get('uuid');\n * console.log(company.name, company.siret);\n * ```\n */\n async get(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<Company>> {\n return this.http.get<SingleResponse<Company>>(\n `/companies/${id}`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Create a new company\n *\n * @param input - Company creation data\n * @param requestOptions - Request options\n * @returns Created company\n *\n * @example\n * ```typescript\n * const { data: company } = await client.companies.create({\n * name: 'Acme Corp',\n * siret: '12345678901234',\n * vat_number: 'FR12345678901',\n * legal_form: 'SAS',\n * address_line1: '123 Business Street',\n * postal_code: '75001',\n * city: 'Paris',\n * country: 'FR',\n * email: 'contact@acme.com',\n * phone: '+33 1 23 45 67 89'\n * });\n * ```\n */\n async create(\n input: CreateCompanyInput,\n requestOptions?: RequestOptions\n ): Promise<MessageWithDataResponse<Company>> {\n return this.http.post<MessageWithDataResponse<Company>>(\n '/companies',\n input,\n requestOptions\n );\n }\n\n /**\n * Update a company\n *\n * @param id - Company UUID\n * @param input - Fields to update\n * @param requestOptions - Request options\n * @returns Updated company\n *\n * @example\n * ```typescript\n * const { data: company } = await client.companies.update('uuid', {\n * email: 'new-email@acme.com',\n * phone: '+33 1 98 76 54 32'\n * });\n * ```\n */\n async update(\n id: string,\n input: UpdateCompanyInput,\n requestOptions?: RequestOptions\n ): Promise<MessageWithDataResponse<Company>> {\n return this.http.put<MessageWithDataResponse<Company>>(\n `/companies/${id}`,\n input,\n requestOptions\n );\n }\n\n /**\n * Delete a company\n *\n * @param id - Company UUID\n * @param requestOptions - Request options\n * @returns Deletion confirmation\n *\n * @example\n * ```typescript\n * await client.companies.delete('company-uuid');\n * ```\n */\n async delete(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<MessageResponse> {\n return this.http.delete<MessageResponse>(\n `/companies/${id}`,\n requestOptions\n );\n }\n\n /**\n * Initiate KYC verification for a company\n *\n * @param id - Company UUID\n * @param requestOptions - Request options\n * @returns KYC reference and redirect URL\n *\n * @example\n * ```typescript\n * const { kyc_reference, redirect_url } = await client.companies.initiateKyc(\n * 'company-uuid'\n * );\n * // Redirect user to redirect_url for KYC verification\n * ```\n */\n async initiateKyc(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<KycInitiateResponse> {\n return this.http.post<KycInitiateResponse>(\n `/companies/${id}/kyc`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Get KYC verification status\n *\n * @param id - Company UUID\n * @param requestOptions - Request options\n * @returns Current KYC status\n *\n * @example\n * ```typescript\n * const status = await client.companies.kycStatus('company-uuid');\n * if (status.status === 'active') {\n * console.log('KYC completed at:', status.kyc_completed_at);\n * }\n * ```\n */\n async kycStatus(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<KycStatusResponse> {\n return this.http.get<KycStatusResponse>(\n `/companies/${id}/kyc/status`,\n undefined,\n requestOptions\n );\n }\n}\n","/**\n * Invoices Resource\n *\n * @packageDocumentation\n */\n\nimport type { HttpClient, RequestOptions } from '../client.js';\nimport type {\n MessageWithDataResponse,\n PaginatedResponse,\n SingleResponse,\n} from '../types/common.js';\nimport type {\n AcceptInvoiceInput,\n AuditTrailResponse,\n ConvertInvoiceInput,\n CreateInvoiceInput,\n DisputeInvoiceInput,\n IncomingInvoiceParams,\n Invoice,\n InvoiceDownloadResponse,\n InvoiceDownloadType,\n InvoiceFileFormat,\n InvoiceListOptions,\n MarkPaidInput,\n RejectInvoiceInput,\n} from '../types/invoices.js';\n\n/**\n * Invoices API resource\n *\n * @example\n * ```typescript\n * // List invoices\n * const invoices = await client.invoices.list({\n * direction: 'outgoing',\n * status: 'validated'\n * });\n *\n * // Create an invoice\n * const invoice = await client.invoices.create({\n * invoice_number: 'FACT-2024-001',\n * direction: 'outgoing',\n * output_format: 'facturx',\n * // ...\n * });\n *\n * // Download invoice\n * const download = await client.invoices.download(invoice.id, 'pdf');\n * console.log('Download URL:', download.url);\n * ```\n */\nexport class InvoicesResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List invoices with optional filtering\n *\n * @param options - Filter and pagination options\n * @param requestOptions - Request options\n * @returns Paginated list of invoices\n *\n * @example\n * ```typescript\n * // List all outgoing invoices\n * const { data, meta } = await client.invoices.list({\n * direction: 'outgoing',\n * per_page: 50\n * });\n * console.log(`Found ${meta.total} invoices`);\n * ```\n */\n async list(\n options: InvoiceListOptions = {},\n requestOptions?: RequestOptions\n ): Promise<PaginatedResponse<Invoice>> {\n return this.http.get<PaginatedResponse<Invoice>>(\n '/invoices',\n options as Record<string, string | number | boolean | undefined>,\n requestOptions\n );\n }\n\n /**\n * Get a specific invoice by ID\n *\n * @param id - Invoice UUID\n * @param requestOptions - Request options\n * @returns Invoice details\n *\n * @example\n * ```typescript\n * const { data: invoice } = await client.invoices.get('uuid-here');\n * console.log('Invoice number:', invoice.invoice_number);\n * ```\n */\n async get(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<Invoice>> {\n return this.http.get<SingleResponse<Invoice>>(\n `/invoices/${id}`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Create a new invoice\n *\n * Note: This endpoint requires API key authentication.\n * Creating an invoice in production mode will debit your balance.\n *\n * @param input - Invoice creation data\n * @param requestOptions - Request options\n * @returns Created invoice\n *\n * @example\n * ```typescript\n * const { data: invoice } = await client.invoices.create({\n * invoice_number: 'FACT-2024-001',\n * direction: 'outgoing',\n * output_format: 'facturx',\n * issue_date: '2024-01-15',\n * total_ht: 100.00,\n * total_tax: 20.00,\n * total_ttc: 120.00,\n * seller_siret: '12345678901234',\n * seller_name: 'My Company',\n * seller_address: {\n * line1: '1 Rue Example',\n * postal_code: '75001',\n * city: 'Paris',\n * country: 'FR'\n * },\n * buyer_siret: '98765432109876',\n * buyer_name: 'Client Company',\n * buyer_address: {\n * line1: '2 Avenue Test',\n * postal_code: '75002',\n * city: 'Paris',\n * country: 'FR'\n * },\n * lines: [{\n * description: 'Service prestation',\n * quantity: 1,\n * unit_price: 100.00,\n * tax_rate: 20.00,\n * total_ht: 100.00,\n * total_tax: 20.00,\n * total_ttc: 120.00\n * }]\n * });\n * ```\n */\n async create(\n input: CreateInvoiceInput,\n requestOptions?: RequestOptions\n ): Promise<MessageWithDataResponse<Invoice>> {\n return this.http.post<MessageWithDataResponse<Invoice>>(\n '/invoices',\n input,\n requestOptions\n );\n }\n\n /**\n * Download invoice file\n *\n * @param id - Invoice UUID\n * @param type - File type to download\n * @param requestOptions - Request options\n * @returns Temporary download URL\n *\n * @example\n * ```typescript\n * // Download PDF version\n * const { url, expires_at } = await client.invoices.download(\n * 'invoice-uuid',\n * 'pdf'\n * );\n * console.log('Download before:', expires_at);\n * ```\n */\n async download(\n id: string,\n type: InvoiceDownloadType,\n requestOptions?: RequestOptions\n ): Promise<InvoiceDownloadResponse> {\n return this.http.get<InvoiceDownloadResponse>(\n `/invoices/${id}/download/${type}`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Get invoice audit trail (Piste d'Audit Fiable)\n *\n * @param id - Invoice UUID\n * @param requestOptions - Request options\n * @returns Audit trail entries with integrity validation\n *\n * @example\n * ```typescript\n * const { data: entries, integrity_valid } = await client.invoices.auditTrail(\n * 'invoice-uuid'\n * );\n *\n * if (integrity_valid) {\n * console.log('Audit trail is valid');\n * entries.forEach(e => console.log(e.action, e.created_at));\n * }\n * ```\n */\n async auditTrail(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<AuditTrailResponse> {\n return this.http.get<AuditTrailResponse>(\n `/invoices/${id}/audit-trail`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Convert invoice to another format\n *\n * @param input - Conversion parameters\n * @param requestOptions - Request options\n * @returns Conversion status\n *\n * @example\n * ```typescript\n * await client.invoices.convert({\n * invoice_id: 'invoice-uuid',\n * target_format: 'ubl'\n * });\n * ```\n */\n async convert(\n input: ConvertInvoiceInput,\n requestOptions?: RequestOptions\n ): Promise<{ message: string; invoice_id: string; target_format: string }> {\n return this.http.post<{\n message: string;\n invoice_id: string;\n target_format: string;\n }>('/invoices/convert', input, requestOptions);\n }\n\n /**\n * List incoming invoices (from suppliers)\n *\n * Returns invoices where your company is the buyer.\n *\n * @param params - Filter and pagination options\n * @param requestOptions - Request options\n * @returns Paginated list of incoming invoices\n *\n * @example\n * ```typescript\n * // List all incoming invoices\n * const { data, meta } = await client.invoices.incoming({\n * status: 'pending',\n * per_page: 50\n * });\n * console.log(`Found ${meta.total} incoming invoices`);\n *\n * // Filter by seller\n * const fromSupplier = await client.invoices.incoming({\n * seller_siret: '12345678901234'\n * });\n * ```\n */\n async incoming(\n params: IncomingInvoiceParams = {},\n requestOptions?: RequestOptions\n ): Promise<PaginatedResponse<Invoice>> {\n return this.http.get<PaginatedResponse<Invoice>>(\n '/invoices/incoming',\n params as Record<string, string | number | boolean | undefined>,\n requestOptions\n );\n }\n\n /**\n * Accept an incoming invoice\n *\n * Mark an incoming invoice as accepted, optionally specifying a payment date.\n *\n * @param id - Invoice UUID\n * @param data - Optional acceptance data\n * @param requestOptions - Request options\n * @returns Updated invoice\n *\n * @example\n * ```typescript\n * // Accept with payment date\n * const { data: invoice } = await client.invoices.accept('invoice-uuid', {\n * payment_date: '2024-02-15',\n * note: 'Approved by accounting'\n * });\n *\n * // Simple acceptance\n * await client.invoices.accept('invoice-uuid');\n * ```\n */\n async accept(\n id: string,\n data?: AcceptInvoiceInput,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<Invoice>> {\n return this.http.post<SingleResponse<Invoice>>(\n `/invoices/${id}/accept`,\n data,\n requestOptions\n );\n }\n\n /**\n * Reject an incoming invoice\n *\n * Mark an incoming invoice as rejected with a reason.\n *\n * @param id - Invoice UUID\n * @param data - Rejection details\n * @param requestOptions - Request options\n * @returns Updated invoice\n *\n * @example\n * ```typescript\n * const { data: invoice } = await client.invoices.reject('invoice-uuid', {\n * reason: 'Invoice amount does not match purchase order',\n * reason_code: 'incorrect_amount'\n * });\n * ```\n */\n async reject(\n id: string,\n data: RejectInvoiceInput,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<Invoice>> {\n return this.http.post<SingleResponse<Invoice>>(\n `/invoices/${id}/reject`,\n data,\n requestOptions\n );\n }\n\n /**\n * Dispute an incoming invoice\n *\n * Open a dispute on an incoming invoice for resolution.\n *\n * @param id - Invoice UUID\n * @param data - Dispute details\n * @param requestOptions - Request options\n * @returns Updated invoice\n *\n * @example\n * ```typescript\n * const { data: invoice } = await client.invoices.dispute('invoice-uuid', {\n * reason: 'Billed amount exceeds agreed price',\n * dispute_type: 'amount_dispute',\n * expected_amount: 950.00\n * });\n * ```\n */\n async dispute(\n id: string,\n data: DisputeInvoiceInput,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<Invoice>> {\n return this.http.post<SingleResponse<Invoice>>(\n `/invoices/${id}/dispute`,\n data,\n requestOptions\n );\n }\n\n /**\n * Mark an incoming invoice as paid\n *\n * This is a mandatory step in the French e-invoicing lifecycle for incoming invoices.\n * Once marked as paid, the invoice status changes to 'paid' and payment details are recorded.\n *\n * @param id - Invoice UUID\n * @param data - Optional payment details (reference, date, note)\n * @param requestOptions - Request options\n * @returns Updated invoice with payment information\n *\n * @example\n * ```typescript\n * // Mark as paid with payment details\n * const { data: invoice } = await client.invoices.markPaid('invoice-uuid', {\n * payment_reference: 'VIR-2026-0124',\n * paid_at: '2026-01-24T10:30:00Z',\n * note: 'Payment received via bank transfer'\n * });\n *\n * // Simple mark as paid (uses current date/time)\n * await client.invoices.markPaid('invoice-uuid');\n * ```\n */\n async markPaid(\n id: string,\n data?: MarkPaidInput,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<Invoice>> {\n return this.http.post<SingleResponse<Invoice>>(\n `/invoices/${id}/mark-paid`,\n data,\n requestOptions\n );\n }\n\n /**\n * Download invoice source file as binary content\n *\n * Downloads the original invoice file (PDF with embedded XML for Factur-X,\n * or standalone XML for UBL/CII formats).\n *\n * @param id - Invoice UUID\n * @param format - File format to download: 'pdf' (default) or 'xml'\n * @param requestOptions - Request options\n * @returns ArrayBuffer containing the file content\n *\n * @example\n * ```typescript\n * // Download invoice as PDF (Factur-X)\n * const pdfBuffer = await client.invoices.downloadFile('invoice-uuid');\n *\n * // In Node.js, save to file:\n * import { writeFileSync } from 'fs';\n * writeFileSync('invoice.pdf', Buffer.from(pdfBuffer));\n *\n * // Download XML version (UBL/CII)\n * const xmlBuffer = await client.invoices.downloadFile('invoice-uuid', 'xml');\n * writeFileSync('invoice.xml', Buffer.from(xmlBuffer));\n *\n * // In browser, trigger download:\n * const blob = new Blob([pdfBuffer], { type: 'application/pdf' });\n * const url = URL.createObjectURL(blob);\n * const a = document.createElement('a');\n * a.href = url;\n * a.download = 'invoice.pdf';\n * a.click();\n * ```\n */\n async downloadFile(\n id: string,\n format: InvoiceFileFormat = 'pdf',\n requestOptions?: RequestOptions\n ): Promise<ArrayBuffer> {\n return this.http.getRaw(\n `/invoices/${id}/download`,\n { format },\n requestOptions\n );\n }\n}\n","/**\n * Signatures Resource\n *\n * @packageDocumentation\n */\n\nimport type { HttpClient, RequestOptions } from '../client.js';\nimport type {\n MessageResponse,\n MessageWithDataResponse,\n PaginatedResponse,\n SingleResponse,\n} from '../types/common.js';\nimport type {\n CreateSignatureInput,\n Signature,\n SignatureDownloadResponse,\n SignatureDownloadType,\n SignatureListOptions,\n SignatureRemindResponse,\n} from '../types/signatures.js';\n\n/**\n * Signatures API resource\n *\n * @example\n * ```typescript\n * // Create a signature request\n * const signature = await client.signatures.create({\n * title: 'Employment Contract',\n * document: btoa(pdfContent), // Base64 encoded\n * document_name: 'contract.pdf',\n * signers: [{\n * first_name: 'John',\n * last_name: 'Doe',\n * email: 'john@example.com',\n * auth_method: 'email'\n * }]\n * });\n *\n * // Send reminder\n * await client.signatures.remind(signature.id);\n * ```\n */\nexport class SignaturesResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List signature requests with optional filtering\n *\n * @param options - Filter and pagination options\n * @param requestOptions - Request options\n * @returns Paginated list of signatures\n *\n * @example\n * ```typescript\n * const { data, meta } = await client.signatures.list({\n * status: 'pending',\n * per_page: 25\n * });\n * console.log(`${meta.total} pending signatures`);\n * ```\n */\n async list(\n options: SignatureListOptions = {},\n requestOptions?: RequestOptions\n ): Promise<PaginatedResponse<Signature>> {\n return this.http.get<PaginatedResponse<Signature>>(\n '/signatures',\n options as Record<string, string | number | boolean | undefined>,\n requestOptions\n );\n }\n\n /**\n * Get a specific signature by ID\n *\n * @param id - Signature UUID\n * @param requestOptions - Request options\n * @returns Signature details with signers\n *\n * @example\n * ```typescript\n * const { data: signature } = await client.signatures.get('uuid-here');\n * signature.signers?.forEach(signer => {\n * console.log(`${signer.full_name}: ${signer.status}`);\n * });\n * ```\n */\n async get(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<SingleResponse<Signature>> {\n return this.http.get<SingleResponse<Signature>>(\n `/signatures/${id}`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Create a new signature request\n *\n * Note: This endpoint requires API key authentication.\n * Creating a signature in production mode will debit your balance.\n *\n * @param input - Signature creation data\n * @param requestOptions - Request options\n * @returns Created signature\n *\n * @example\n * ```typescript\n * import { readFileSync } from 'fs';\n *\n * const pdfContent = readFileSync('contract.pdf');\n * const { data: signature } = await client.signatures.create({\n * title: 'Service Agreement',\n * description: 'Annual service contract',\n * document: pdfContent.toString('base64'),\n * document_name: 'contract.pdf',\n * signers: [\n * {\n * first_name: 'Alice',\n * last_name: 'Smith',\n * email: 'alice@example.com',\n * auth_method: 'email'\n * },\n * {\n * first_name: 'Bob',\n * last_name: 'Jones',\n * phone: '+33612345678',\n * auth_method: 'sms'\n * }\n * ],\n * ui_config: {\n * logo_url: 'https://mycompany.com/logo.png',\n * primary_color: '#3b82f6',\n * company_name: 'My Company'\n * },\n * redirect_complete_url: 'https://myapp.com/signed',\n * redirect_cancel_url: 'https://myapp.com/cancelled'\n * });\n *\n * // Send signing URLs to signers\n * signature.signers?.forEach(signer => {\n * console.log(`${signer.email}: ${signer.signing_url}`);\n * });\n * ```\n */\n async create(\n input: CreateSignatureInput,\n requestOptions?: RequestOptions\n ): Promise<MessageWithDataResponse<Signature>> {\n return this.http.post<MessageWithDataResponse<Signature>>(\n '/signatures',\n input,\n requestOptions\n );\n }\n\n /**\n * Download signature files\n *\n * @param id - Signature UUID\n * @param type - File type to download\n * @param requestOptions - Request options\n * @returns Temporary download URL\n *\n * @example\n * ```typescript\n * // Download signed document\n * const { url } = await client.signatures.download(\n * 'signature-uuid',\n * 'signed'\n * );\n *\n * // Download audit trail (proof file)\n * const { url: auditUrl } = await client.signatures.download(\n * 'signature-uuid',\n * 'audit_trail'\n * );\n * ```\n */\n async download(\n id: string,\n type: SignatureDownloadType,\n requestOptions?: RequestOptions\n ): Promise<SignatureDownloadResponse> {\n return this.http.get<SignatureDownloadResponse>(\n `/signatures/${id}/download/${type}`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Send reminder to pending signers\n *\n * @param id - Signature UUID\n * @param requestOptions - Request options\n * @returns Number of signers reminded\n *\n * @example\n * ```typescript\n * const { signers_reminded } = await client.signatures.remind('uuid');\n * console.log(`Reminded ${signers_reminded} signers`);\n * ```\n */\n async remind(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<SignatureRemindResponse> {\n return this.http.post<SignatureRemindResponse>(\n `/signatures/${id}/remind`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Cancel a signature request\n *\n * Note: Cannot cancel completed signatures.\n *\n * @param id - Signature UUID\n * @param requestOptions - Request options\n * @returns Cancellation confirmation\n *\n * @example\n * ```typescript\n * await client.signatures.cancel('signature-uuid');\n * console.log('Signature cancelled');\n * ```\n */\n async cancel(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<MessageResponse> {\n return this.http.post<MessageResponse>(\n `/signatures/${id}/cancel`,\n undefined,\n requestOptions\n );\n }\n}\n","/**\n * Webhooks Resource\n *\n * @packageDocumentation\n */\n\nimport type { HttpClient, RequestOptions } from '../client.js';\nimport type {\n MessageResponse,\n MessageWithDataResponse,\n PaginatedResponse,\n} from '../types/common.js';\nimport type {\n CreateWebhookInput,\n UpdateWebhookInput,\n Webhook,\n WebhookListOptions,\n WebhookLog,\n WebhookTestResponse,\n WebhookWithSecret,\n} from '../types/webhooks.js';\n\n/**\n * Webhooks API resource\n *\n * @example\n * ```typescript\n * // Create a webhook\n * const webhook = await client.webhooks.create({\n * url: 'https://myapp.com/webhooks/scell',\n * events: ['invoice.validated', 'signature.completed'],\n * environment: 'production'\n * });\n *\n * // Store the secret securely!\n * console.log('Webhook secret:', webhook.secret);\n *\n * // Test the webhook\n * const test = await client.webhooks.test(webhook.id);\n * console.log('Test success:', test.success);\n * ```\n */\nexport class WebhooksResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List all webhooks\n *\n * @param options - Filter options\n * @param requestOptions - Request options\n * @returns List of webhooks\n *\n * @example\n * ```typescript\n * const { data: webhooks } = await client.webhooks.list();\n * webhooks.forEach(wh => {\n * console.log(`${wh.url}: ${wh.is_active ? 'active' : 'inactive'}`);\n * });\n * ```\n */\n async list(\n options: WebhookListOptions = {},\n requestOptions?: RequestOptions\n ): Promise<{ data: Webhook[] }> {\n return this.http.get<{ data: Webhook[] }>(\n '/webhooks',\n options as Record<string, string | number | boolean | undefined>,\n requestOptions\n );\n }\n\n /**\n * Create a new webhook\n *\n * Important: The secret is only returned once during creation.\n * Store it securely - you'll need it to verify webhook signatures.\n *\n * @param input - Webhook configuration\n * @param requestOptions - Request options\n * @returns Created webhook with secret\n *\n * @example\n * ```typescript\n * const { data: webhook } = await client.webhooks.create({\n * url: 'https://myapp.com/webhooks/scell',\n * events: [\n * 'invoice.created',\n * 'invoice.validated',\n * 'signature.completed',\n * 'balance.low'\n * ],\n * environment: 'production',\n * headers: {\n * 'X-Custom-Auth': 'my-secret-token'\n * },\n * retry_count: 5,\n * timeout_seconds: 30\n * });\n *\n * // IMPORTANT: Store this secret securely!\n * await saveWebhookSecret(webhook.id, webhook.secret);\n * ```\n */\n async create(\n input: CreateWebhookInput,\n requestOptions?: RequestOptions\n ): Promise<MessageWithDataResponse<WebhookWithSecret>> {\n return this.http.post<MessageWithDataResponse<WebhookWithSecret>>(\n '/webhooks',\n input,\n requestOptions\n );\n }\n\n /**\n * Update a webhook\n *\n * @param id - Webhook UUID\n * @param input - Fields to update\n * @param requestOptions - Request options\n * @returns Updated webhook\n *\n * @example\n * ```typescript\n * // Disable a webhook temporarily\n * await client.webhooks.update('webhook-uuid', {\n * is_active: false\n * });\n *\n * // Update events\n * await client.webhooks.update('webhook-uuid', {\n * events: ['invoice.validated', 'signature.completed']\n * });\n * ```\n */\n async update(\n id: string,\n input: UpdateWebhookInput,\n requestOptions?: RequestOptions\n ): Promise<MessageWithDataResponse<Webhook>> {\n return this.http.put<MessageWithDataResponse<Webhook>>(\n `/webhooks/${id}`,\n input,\n requestOptions\n );\n }\n\n /**\n * Delete a webhook\n *\n * @param id - Webhook UUID\n * @param requestOptions - Request options\n * @returns Deletion confirmation\n *\n * @example\n * ```typescript\n * await client.webhooks.delete('webhook-uuid');\n * ```\n */\n async delete(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<MessageResponse> {\n return this.http.delete<MessageResponse>(`/webhooks/${id}`, requestOptions);\n }\n\n /**\n * Regenerate webhook secret\n *\n * Use this if your secret has been compromised.\n * The old secret will immediately stop working.\n *\n * @param id - Webhook UUID\n * @param requestOptions - Request options\n * @returns Webhook with new secret\n *\n * @example\n * ```typescript\n * const { data: webhook } = await client.webhooks.regenerateSecret(\n * 'webhook-uuid'\n * );\n *\n * // Update your stored secret\n * await updateWebhookSecret(webhook.id, webhook.secret);\n * ```\n */\n async regenerateSecret(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<MessageWithDataResponse<WebhookWithSecret>> {\n return this.http.post<MessageWithDataResponse<WebhookWithSecret>>(\n `/webhooks/${id}/regenerate-secret`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Test webhook by sending a test event\n *\n * @param id - Webhook UUID\n * @param requestOptions - Request options\n * @returns Test result\n *\n * @example\n * ```typescript\n * const result = await client.webhooks.test('webhook-uuid');\n *\n * if (result.success) {\n * console.log(`Success! Response time: ${result.response_time_ms}ms`);\n * } else {\n * console.log(`Failed: ${result.error}`);\n * }\n * ```\n */\n async test(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<WebhookTestResponse> {\n return this.http.post<WebhookTestResponse>(\n `/webhooks/${id}/test`,\n undefined,\n requestOptions\n );\n }\n\n /**\n * Get webhook delivery logs\n *\n * @param id - Webhook UUID\n * @param options - Pagination options\n * @param requestOptions - Request options\n * @returns Paginated list of logs\n *\n * @example\n * ```typescript\n * const { data: logs } = await client.webhooks.logs('webhook-uuid', {\n * per_page: 50\n * });\n *\n * logs.forEach(log => {\n * const status = log.success ? 'OK' : 'FAILED';\n * console.log(`${log.event} - ${status} (${log.response_time_ms}ms)`);\n * });\n * ```\n */\n async logs(\n id: string,\n options: { per_page?: number } = {},\n requestOptions?: RequestOptions\n ): Promise<PaginatedResponse<WebhookLog>> {\n return this.http.get<PaginatedResponse<WebhookLog>>(\n `/webhooks/${id}/logs`,\n options,\n requestOptions\n );\n }\n}\n","/**\n * Webhook signature verification utility\n *\n * @packageDocumentation\n */\n\nimport type { WebhookPayload } from '../types/webhooks.js';\n\n/**\n * Signature verification options\n */\nexport interface VerifySignatureOptions {\n /** Tolerance in seconds for timestamp validation (default: 300 = 5 minutes) */\n tolerance?: number | undefined;\n}\n\n/**\n * Parse the X-Scell-Signature header\n *\n * @param header - The signature header value (format: \"t=timestamp,v1=signature\")\n * @returns Parsed timestamp and signature\n */\nfunction parseSignatureHeader(header: string): {\n timestamp: number;\n signature: string;\n} | null {\n const parts = header.split(',');\n let timestamp: number | undefined;\n let signature: string | undefined;\n\n for (const part of parts) {\n const splitIndex = part.indexOf('=');\n if (splitIndex === -1) continue;\n\n const key = part.substring(0, splitIndex);\n const value = part.substring(splitIndex + 1);\n\n if (key === 't') {\n timestamp = parseInt(value, 10);\n } else if (key === 'v1') {\n signature = value;\n }\n }\n\n if (timestamp === undefined || signature === undefined) {\n return null;\n }\n\n return { timestamp, signature };\n}\n\n/**\n * Compute HMAC-SHA256 signature\n *\n * @param payload - The payload string\n * @param timestamp - The timestamp\n * @param secret - The webhook secret\n * @returns Hex-encoded signature\n */\nasync function computeSignature(\n payload: string,\n timestamp: number,\n secret: string\n): Promise<string> {\n const signedPayload = `${timestamp}.${payload}`;\n\n // Use Web Crypto API (works in Node.js 18+ and browsers)\n const encoder = new TextEncoder();\n const keyData = encoder.encode(secret);\n const messageData = encoder.encode(signedPayload);\n\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyData,\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n );\n\n const signatureBuffer = await crypto.subtle.sign(\n 'HMAC',\n cryptoKey,\n messageData\n );\n\n // Convert to hex string\n return Array.from(new Uint8Array(signatureBuffer))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\n/**\n * Constant-time string comparison to prevent timing attacks\n */\nfunction secureCompare(a: string, b: string): boolean {\n if (a.length !== b.length) {\n return false;\n }\n\n let result = 0;\n for (let i = 0; i < a.length; i++) {\n result |= a.charCodeAt(i) ^ b.charCodeAt(i);\n }\n\n return result === 0;\n}\n\n/**\n * Scell Webhook signature verification utilities\n *\n * @example\n * ```typescript\n * import { ScellWebhooks } from '@scell/sdk';\n *\n * // In your webhook endpoint\n * app.post('/webhooks/scell', async (req, res) => {\n * const signature = req.headers['x-scell-signature'];\n * const payload = JSON.stringify(req.body);\n *\n * const isValid = await ScellWebhooks.verifySignature(\n * payload,\n * signature,\n * process.env.WEBHOOK_SECRET\n * );\n *\n * if (!isValid) {\n * return res.status(401).send('Invalid signature');\n * }\n *\n * // Process the webhook\n * const event = ScellWebhooks.parsePayload(payload);\n * console.log('Received event:', event.event);\n * });\n * ```\n */\nexport const ScellWebhooks = {\n /**\n * Verify webhook signature\n *\n * @param payload - Raw request body as string\n * @param signature - Value of X-Scell-Signature header\n * @param secret - Your webhook secret (whsec_...)\n * @param options - Verification options\n * @returns True if signature is valid\n *\n * @example\n * ```typescript\n * const isValid = await ScellWebhooks.verifySignature(\n * rawBody,\n * req.headers['x-scell-signature'],\n * 'whsec_abc123...'\n * );\n * ```\n */\n async verifySignature(\n payload: string,\n signature: string,\n secret: string,\n options: VerifySignatureOptions = {}\n ): Promise<boolean> {\n const { tolerance = 300 } = options;\n\n // Parse the signature header\n const parsed = parseSignatureHeader(signature);\n if (!parsed) {\n return false;\n }\n\n const { timestamp, signature: providedSignature } = parsed;\n\n // Check timestamp tolerance\n const now = Math.floor(Date.now() / 1000);\n if (Math.abs(now - timestamp) > tolerance) {\n return false;\n }\n\n // Compute expected signature\n const expectedSignature = await computeSignature(payload, timestamp, secret);\n\n // Constant-time comparison\n return secureCompare(expectedSignature, providedSignature);\n },\n\n /**\n * Verify webhook signature synchronously using Node.js crypto\n * (Only works in Node.js environment)\n *\n * @param payload - Raw request body as string\n * @param signature - Value of X-Scell-Signature header\n * @param secret - Your webhook secret (whsec_...)\n * @param options - Verification options\n * @returns True if signature is valid\n */\n verifySignatureSync(\n payload: string,\n signature: string,\n secret: string,\n options: VerifySignatureOptions = {}\n ): boolean {\n const { tolerance = 300 } = options;\n\n // Parse the signature header\n const parsed = parseSignatureHeader(signature);\n if (!parsed) {\n return false;\n }\n\n const { timestamp, signature: providedSignature } = parsed;\n\n // Check timestamp tolerance\n const now = Math.floor(Date.now() / 1000);\n if (Math.abs(now - timestamp) > tolerance) {\n return false;\n }\n\n // Use Node.js crypto for sync operation\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const crypto = require('crypto') as typeof import('crypto');\n const signedPayload = `${timestamp}.${payload}`;\n const expectedSignature = crypto\n .createHmac('sha256', secret)\n .update(signedPayload)\n .digest('hex');\n\n // Use Node.js timingSafeEqual\n try {\n return crypto.timingSafeEqual(\n Buffer.from(expectedSignature),\n Buffer.from(providedSignature)\n );\n } catch {\n return false;\n }\n },\n\n /**\n * Parse webhook payload\n *\n * @param payload - Raw request body as string\n * @returns Parsed webhook payload\n *\n * @example\n * ```typescript\n * const event = ScellWebhooks.parsePayload<InvoiceWebhookData>(rawBody);\n * if (event.event === 'invoice.validated') {\n * console.log('Invoice validated:', event.data.invoice_number);\n * }\n * ```\n */\n parsePayload<T = unknown>(payload: string): WebhookPayload<T> {\n return JSON.parse(payload) as WebhookPayload<T>;\n },\n\n /**\n * Construct a test webhook event for local testing\n *\n * @param event - Event type\n * @param data - Event data\n * @param secret - Webhook secret for signing\n * @returns Object with payload and headers for testing\n */\n async constructTestEvent<T>(\n event: string,\n data: T,\n secret: string\n ): Promise<{\n payload: string;\n headers: Record<string, string>;\n }> {\n const timestamp = Math.floor(Date.now() / 1000);\n const webhookPayload: WebhookPayload<T> = {\n event: event as WebhookPayload<T>['event'],\n timestamp: new Date().toISOString(),\n data,\n };\n\n const payload = JSON.stringify(webhookPayload);\n const signature = await computeSignature(payload, timestamp, secret);\n\n return {\n payload,\n headers: {\n 'X-Scell-Signature': `t=${timestamp},v1=${signature}`,\n 'X-Scell-Event': event,\n 'X-Scell-Delivery': crypto.randomUUID(),\n 'Content-Type': 'application/json',\n },\n };\n },\n};\n","/**\n * Scell.io Official TypeScript SDK\n *\n * @packageDocumentation\n *\n * @example\n * ```typescript\n * import { ScellClient, ScellApiClient, ScellTenantClient, ScellAuth, ScellWebhooks } from '@scell/sdk';\n *\n * // Dashboard client (Bearer token)\n * const auth = await ScellAuth.login({ email, password });\n * const client = new ScellClient(auth.token);\n *\n * // API client (X-API-Key)\n * const apiClient = new ScellApiClient('your-api-key');\n *\n * // Tenant client (X-Tenant-Key) - for multi-tenant operations\n * const tenantClient = new ScellTenantClient('your-tenant-key');\n *\n * // Create invoice\n * const invoice = await apiClient.invoices.create({...});\n *\n * // Create direct invoice (tenant)\n * const directInvoice = await tenantClient.directInvoices.create({...});\n *\n * // Verify webhook\n * const isValid = await ScellWebhooks.verifySignature(payload, signature, secret);\n * ```\n */\n\n// Client\nimport { HttpClient, type ClientConfig } from './client.js';\n\n// Tenant Client\nimport { ScellTenantClient } from './tenant-client.js';\n\n// Resources\nimport { ApiKeysResource } from './resources/api-keys.js';\nimport { AuthResource, ScellAuth } from './resources/auth.js';\nimport { BalanceResource } from './resources/balance.js';\nimport { CompaniesResource } from './resources/companies.js';\nimport { InvoicesResource } from './resources/invoices.js';\nimport { SignaturesResource } from './resources/signatures.js';\nimport { TenantCreditNotesResource } from './resources/tenant-credit-notes.js';\nimport { WebhooksResource } from './resources/webhooks.js';\n\n// Utilities\nimport { ScellWebhooks } from './utils/webhook-verify.js';\nimport { withRetry, createRetryWrapper } from './utils/retry.js';\n\n/**\n * Scell Dashboard Client\n *\n * Use this client for dashboard/user operations with Bearer token authentication.\n *\n * @example\n * ```typescript\n * import { ScellClient, ScellAuth } from '@scell/sdk';\n *\n * // Login first\n * const auth = await ScellAuth.login({\n * email: 'user@example.com',\n * password: 'password'\n * });\n *\n * // Create client\n * const client = new ScellClient(auth.token);\n *\n * // Use the client\n * const companies = await client.companies.list();\n * const balance = await client.balance.get();\n * ```\n */\nexport class ScellClient {\n private readonly http: HttpClient;\n\n /** Authentication operations */\n public readonly auth: AuthResource;\n /** Company management */\n public readonly companies: CompaniesResource;\n /** API key management */\n public readonly apiKeys: ApiKeysResource;\n /** Balance and transactions */\n public readonly balance: BalanceResource;\n /** Webhook management */\n public readonly webhooks: WebhooksResource;\n /** Invoice listing (read-only via dashboard) */\n public readonly invoices: InvoicesResource;\n /** Signature listing (read-only via dashboard) */\n public readonly signatures: SignaturesResource;\n\n /**\n * Create a new Scell Dashboard Client\n *\n * @param token - Bearer token from login\n * @param config - Client configuration\n *\n * @example\n * ```typescript\n * const client = new ScellClient('your-bearer-token', {\n * baseUrl: 'https://api.scell.io/api/v1',\n * timeout: 30000,\n * retry: { maxRetries: 3 }\n * });\n * ```\n */\n constructor(token: string, config: ClientConfig = {}) {\n this.http = new HttpClient('bearer', token, config);\n\n this.auth = new AuthResource(this.http);\n this.companies = new CompaniesResource(this.http);\n this.apiKeys = new ApiKeysResource(this.http);\n this.balance = new BalanceResource(this.http);\n this.webhooks = new WebhooksResource(this.http);\n this.invoices = new InvoicesResource(this.http);\n this.signatures = new SignaturesResource(this.http);\n }\n}\n\n/**\n * Scell API Client\n *\n * Use this client for external API operations with X-API-Key authentication.\n * This is the client you'll use for creating invoices and signatures.\n *\n * @example\n * ```typescript\n * import { ScellApiClient } from '@scell/sdk';\n *\n * const client = new ScellApiClient('your-api-key');\n *\n * // Create an invoice\n * const invoice = await client.invoices.create({\n * invoice_number: 'FACT-2024-001',\n * direction: 'outgoing',\n * output_format: 'facturx',\n * // ...\n * });\n *\n * // Create a signature request\n * const signature = await client.signatures.create({\n * title: 'Contract',\n * document: btoa(pdfContent),\n * document_name: 'contract.pdf',\n * signers: [{...}]\n * });\n * ```\n */\nexport class ScellApiClient {\n private readonly http: HttpClient;\n\n /** Invoice operations (create, download, convert) */\n public readonly invoices: InvoicesResource;\n /** Signature operations (create, download, remind, cancel) */\n public readonly signatures: SignaturesResource;\n /** Tenant credit notes operations (create, send, download) */\n public readonly tenantCreditNotes: TenantCreditNotesResource;\n\n /**\n * Create a new Scell API Client\n *\n * @param apiKey - Your API key (from dashboard)\n * @param config - Client configuration\n *\n * @example\n * ```typescript\n * // Production client\n * const client = new ScellApiClient('sk_live_xxx');\n *\n * // Sandbox client\n * const sandboxClient = new ScellApiClient('sk_test_xxx', {\n * baseUrl: 'https://api.scell.io/api/v1/sandbox'\n * });\n * ```\n */\n constructor(apiKey: string, config: ClientConfig = {}) {\n this.http = new HttpClient('api-key', apiKey, config);\n\n this.invoices = new InvoicesResource(this.http);\n this.signatures = new SignaturesResource(this.http);\n this.tenantCreditNotes = new TenantCreditNotesResource(this.http);\n }\n}\n\n// Re-export utilities\nexport { ScellAuth, ScellWebhooks, withRetry, createRetryWrapper };\n\n// Re-export tenant client\nexport { ScellTenantClient };\n\n// Re-export types\nexport type { ClientConfig } from './client.js';\nexport type { RetryOptions } from './utils/retry.js';\nexport type { VerifySignatureOptions } from './utils/webhook-verify.js';\n\n// Re-export errors\nexport {\n ScellError,\n ScellAuthenticationError,\n ScellAuthorizationError,\n ScellValidationError,\n ScellRateLimitError,\n ScellNotFoundError,\n ScellServerError,\n ScellInsufficientBalanceError,\n ScellNetworkError,\n ScellTimeoutError,\n} from './errors.js';\n\n// Re-export all types\nexport * from './types/index.js';\n"]}