From 9b47333c59a971f333984f4865e665dba603d075 Mon Sep 17 00:00:00 2001 From: bodrovis Date: Tue, 11 Mar 2025 20:40:10 +0200 Subject: [PATCH] v14.1.0 --- dist/main.d.ts | 7 + dist/main.js | 3 + dist/main.js.map | 2 +- docs/additional_info/changelog.md | 5 + package-lock.json | 552 +++++++++++------------ package.json | 2 +- src/collections/contributors.ts | 6 +- test/contributors/contributors.spec.ts | 1 + test/fixtures/contributors/retrieve.json | 1 + 9 files changed, 297 insertions(+), 282 deletions(-) diff --git a/dist/main.d.ts b/dist/main.d.ts index d655fe77..b062f7c4 100644 --- a/dist/main.d.ts +++ b/dist/main.d.ts @@ -549,6 +549,7 @@ interface Contributor$1 { }>; admin_rights: string[]; role_id: number; + uuid?: string; } declare class Contributor extends BaseModel implements Contributor$1 { @@ -567,6 +568,7 @@ declare class Contributor extends BaseModel implements Contributor$1 { }>; admin_rights: string[]; role_id: number; + uuid?: string; } type ContributorRights = "upload" | "activity" | "download" | "settings" | "create_branches" | "statistics" | "keys" | "screenshots" | "glossary" | "contributors" | "languages" | "tasks"; @@ -603,6 +605,7 @@ declare class Contributors extends BaseCollection { list(request_params: ProjectWithPagination): Promise>; create(contributor_params: ContributorCreateData | ContributorCreateData[], request_params: ProjectOnly): Promise; get(contributor_id: string | number, request_params: ProjectOnly): Promise; + me(request_params: ProjectOnly): Promise; update(contributor_id: string | number, contributor_params: ContributorUpdateData, request_params: ProjectOnly): Promise; delete(contributor_id: string | number, request_params: ProjectOnly): Promise; } @@ -1268,6 +1271,7 @@ interface ProjectStatistics { interface Project$1 { project_id: string; project_type: string; + uuid?: string; name: string; description: string; created_at: string; @@ -1408,6 +1412,7 @@ interface TeamUser$1 { created_at: string; created_at_timestamp: number; role: string; + uuid?: string; } interface Team$1 { @@ -2536,6 +2541,7 @@ declare class PermissionTemplates extends BaseCollection { declare class Project extends BaseModel implements Project$1 { project_id: string; project_type: string; + uuid?: string; name: string; description: string; created_at: string; @@ -2765,6 +2771,7 @@ declare class TeamUser extends BaseModel implements TeamUser$1 { created_at: string; created_at_timestamp: number; role: string; + uuid?: string; } declare class TeamUsers extends BaseCollection { diff --git a/dist/main.js b/dist/main.js index f3c752e8..8f39ffae 100644 --- a/dist/main.js +++ b/dist/main.js @@ -816,6 +816,9 @@ var Contributors = class extends BaseCollection { get(contributor_id, request_params) { return this.doGet(contributor_id, request_params); } + me(request_params) { + return this.doGet("me", request_params); + } update(contributor_id, contributor_params, request_params) { return this.doUpdate(contributor_id, contributor_params, request_params); } diff --git a/dist/main.js.map b/dist/main.js.map index 39815c71..70674749 100644 --- a/dist/main.js.map +++ b/dist/main.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/models/base_model.ts","../src/models/branch.ts","../src/lokalise/pkg.ts","../src/models/api_error.ts","../src/http_client/base.ts","../src/models/paginated_result.ts","../src/models/cursor_paginated_result.ts","../src/collections/base_collection.ts","../src/collections/branches.ts","../src/models/comment.ts","../src/collections/comments.ts","../src/models/contributor.ts","../src/collections/contributors.ts","../src/models/file.ts","../src/models/queued_process.ts","../src/collections/files.ts","../src/models/jwt.ts","../src/collections/jwt.ts","../src/models/key.ts","../src/collections/keys.ts","../src/models/language.ts","../src/collections/languages.ts","../src/models/order.ts","../src/collections/orders.ts","../src/models/payment_card.ts","../src/collections/payment_cards.ts","../src/models/permission_template.ts","../src/collections/permission_templates.ts","../src/models/project.ts","../src/collections/projects.ts","../src/collections/queued_processes.ts","../src/models/screenshot.ts","../src/collections/screenshots.ts","../src/models/segment.ts","../src/collections/segments.ts","../src/models/snapshot.ts","../src/collections/snapshots.ts","../src/models/task.ts","../src/collections/tasks.ts","../src/models/team_user_billing_details.ts","../src/collections/team_user_billing_details.ts","../src/models/team_user.ts","../src/collections/team_users.ts","../src/models/team.ts","../src/collections/teams.ts","../src/models/translation_provider.ts","../src/collections/translation_providers.ts","../src/models/translation_status.ts","../src/collections/translation_statuses.ts","../src/models/translation.ts","../src/collections/translations.ts","../src/models/user_group.ts","../src/collections/user_groups.ts","../src/models/webhook.ts","../src/collections/webhooks.ts","../src/lokalise/base_client.ts","../src/lokalise/lokalise_api.ts","../src/lokalise/lokalise_api_oauth.ts","../src/models/ota/ota_bundle.ts","../src/ota_collections/ota_collection.ts","../src/ota_collections/ota_bundle_management.ts","../src/ota_collections/ota_bundle_publishing.ts","../src/models/ota/ota_bundle_archive.ts","../src/ota_collections/ota_bundles.ts","../src/models/ota/ota_freeze_period.ts","../src/ota_collections/ota_freeze_periods.ts","../src/models/ota/ota_sdk_token.ts","../src/ota_collections/ota_sdk_tokens.ts","../src/models/ota/ota_statistics.ts","../src/ota_collections/ota_usage_statistics.ts","../src/lokalise/lokalise_api_ota.ts","../src/lokalise/lokalise_ota_bundles.ts","../src/oauth2/auth_request.ts","../src/oauth2/lokalise_auth.ts","../src/models/auth_error.ts"],"sourcesContent":["export abstract class BaseModel {\n\tconstructor(params: { [key: string]: any }) {\n\t\tfor (const key of Object.keys(params)) {\n\t\t\t(this)[key] = params[key];\n\t\t}\n\t}\n}\n","import type { Branch as BranchInterface } from \"../interfaces/branch.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Branch extends BaseModel implements BranchInterface {\n\tdeclare branch_id: number;\n\tdeclare name: string;\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n\tdeclare created_by: number;\n\tdeclare created_by_email: string;\n}\n","import { readFile } from \"node:fs/promises\";\n\n/**\n * Returns the relative path to the package.json file.\n * Adjust this if your directory structure changes.\n */\nfunction pkgPath(): string {\n\treturn \"../../package.json\";\n}\n\n/**\n * Attempts to read and parse the local package.json file to retrieve the version.\n * If the file cannot be read or parsed, returns \"unknown\".\n *\n * @returns {Promise} The package version string or \"unknown\" if unavailable.\n */\nexport async function getVersion(): Promise {\n\ttry {\n\t\tconst data = await readFile(new URL(pkgPath(), import.meta.url));\n\t\tconst pkg = JSON.parse(data.toString()) as { version?: string };\n\t\treturn String(pkg.version);\n\t} catch {\n\t\treturn \"unknown\";\n\t}\n}\n","import type { IApiError } from \"../interfaces/api_error.js\";\n\n/**\n * Represents an API error with a specific code and optional details.\n */\nexport class ApiError extends Error implements IApiError {\n\t/**\n\t * The error code representing the type of API error.\n\t */\n\tcode: number;\n\n\t/**\n\t * Additional details about the error (optional).\n\t */\n\tdetails?: Record;\n\n\t/**\n\t * Creates an instance of ApiError.\n\t *\n\t * @param {string} message - The error message.\n\t * @param {number} code - The error code.\n\t * @param {Record} [details] - Additional details about the error.\n\t */\n\tconstructor(message: string, code: number, details?: Record) {\n\t\tsuper(message);\n\t\tthis.code = code;\n\t\tthis.details = details;\n\t}\n\n\t/**\n\t * Returns a string representation of the error, including code and details.\n\t *\n\t * @returns The formatted error message.\n\t */\n\toverride toString(): string {\n\t\tlet baseMessage = `LokaliseError: ${this.message}`;\n\t\tbaseMessage += ` (Code: ${this.code})`;\n\n\t\tif (this.details) {\n\t\t\tconst formattedDetails = Object.entries(this.details)\n\t\t\t\t.map(([key, value]) => `${key}: ${value}`)\n\t\t\t\t.join(\", \");\n\n\t\t\tbaseMessage += ` | Details: ${formattedDetails}`;\n\t\t}\n\t\treturn baseMessage;\n\t}\n}\n","import type { ClientData } from \"../interfaces/client_data.js\";\nimport type { Keyable, WritableKeyable } from \"../interfaces/keyable.js\";\nimport { getVersion } from \"../lokalise/pkg.js\";\nimport { ApiError } from \"../models/api_error.js\";\nimport type { HttpMethod } from \"../types/http_method.js\";\n\nexport type ApiResponse = {\n\tjson: Keyable;\n\theaders: Headers;\n};\n\n/**\n * Represents a single API request to the Lokalise API.\n * Handles URL construction, request initiation, response processing, and error handling.\n */\nexport class ApiRequest {\n\t/**\n\t * The resolved response from the API request.\n\t */\n\tpublic response!: ApiResponse;\n\n\t/**\n\t * Query and path parameters used to construct the request URL.\n\t * This object is modified during URL construction, removing parameters used in path segments.\n\t */\n\tpublic params: WritableKeyable = {};\n\n\t/**\n\t * The default base URL for the Lokalise API.\n\t */\n\tprotected readonly urlRoot = \"https://api.lokalise.com/api2/\";\n\n\t/**\n\t * Constructs a new ApiRequest instance.\n\t * @param params - Query and/or path parameters.\n\t */\n\tconstructor(params: Keyable) {\n\t\t// Copy params to avoid modifying the original object\n\t\tthis.params = { ...params };\n\t}\n\n\t/**\n\t * Static async factory method to create an ApiRequest instance with a fully resolved response.\n\t * @param uri - The endpoint URI (versioned path expected).\n\t * @param method - The HTTP method (GET, POST, PUT, DELETE, etc).\n\t * @param body - The request payload, if applicable.\n\t * @param params - Query and/or path parameters.\n\t * @param clientData - Authentication and configuration data for the request.\n\t * @returns A promise that resolves to a fully constructed ApiRequest instance with the `response` set.\n\t */\n\tpublic static async create(\n\t\turi: string,\n\t\tmethod: HttpMethod,\n\t\tbody: object | object[] | null,\n\t\tparams: Keyable,\n\t\tclientData: ClientData,\n\t): Promise {\n\t\tconst apiRequest = new ApiRequest(params);\n\t\tapiRequest.response = await apiRequest.createPromise(\n\t\t\turi,\n\t\t\tmethod,\n\t\t\tbody,\n\t\t\tclientData,\n\t\t);\n\t\treturn apiRequest;\n\t}\n\n\t/**\n\t * Creates the request promise by composing the URL, building headers, and executing the fetch.\n\t * @param uri - The endpoint URI.\n\t * @param method - The HTTP method.\n\t * @param body - The request payload.\n\t * @param clientData - Client configuration and auth data.\n\t * @returns A promise resolving to an ApiResponse or rejecting with an ApiError.\n\t */\n\tprotected async createPromise(\n\t\turi: string,\n\t\tmethod: HttpMethod,\n\t\tbody: object | object[] | null,\n\t\tclientData: ClientData,\n\t): Promise {\n\t\tconst url = this.composeURI(`/${clientData.version}/${uri}`);\n\t\tconst prefixUrl = clientData.host ?? this.urlRoot;\n\t\tconst headers = await this.buildHeaders(clientData, method, body);\n\n\t\tconst options: RequestInit = {\n\t\t\tmethod: method,\n\t\t\theaders: headers,\n\t\t\t...(method !== \"GET\" && body ? { body: JSON.stringify(body) } : {}),\n\t\t};\n\n\t\tconst target = new URL(url, prefixUrl);\n\t\ttarget.search = new URLSearchParams(this.params).toString();\n\n\t\treturn this.fetchAndHandleResponse(\n\t\t\ttarget,\n\t\t\toptions,\n\t\t\tclientData.requestTimeout,\n\t\t);\n\t}\n\n\t/**\n\t * Executes the fetch request and handles network-level errors.\n\t * Applies a request timeout if specified.\n\t * @param target - The fully constructed request URL.\n\t * @param options - The fetch request options.\n\t * @param requestTimeout - Optional timeout in milliseconds.\n\t * @returns A promise resolving to an ApiResponse or rejecting with an ApiError.\n\t */\n\tprotected async fetchAndHandleResponse(\n\t\ttarget: URL,\n\t\toptions: RequestInit,\n\t\trequestTimeout: number | undefined,\n\t): Promise {\n\t\tconst controller = new AbortController();\n\t\tlet timeoutId: NodeJS.Timeout | null = null;\n\n\t\tif (requestTimeout && requestTimeout > 0) {\n\t\t\ttimeoutId = setTimeout(() => controller.abort(), requestTimeout);\n\t\t}\n\n\t\ttry {\n\t\t\tconst response = await fetch(target, {\n\t\t\t\t...options,\n\t\t\t\tsignal: controller.signal,\n\t\t\t});\n\n\t\t\treturn this.processResponse(response);\n\t\t} catch (err) {\n\t\t\tif (err instanceof Error) {\n\t\t\t\tif (err.name === \"AbortError\") {\n\t\t\t\t\treturn Promise.reject(\n\t\t\t\t\t\tnew ApiError(`Request timed out after ${requestTimeout}ms`, 408, {\n\t\t\t\t\t\t\treason: \"timeout\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn Promise.reject(\n\t\t\t\t\tnew ApiError(err.message, 500, { reason: \"network or fetch error\" }),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn Promise.reject(\n\t\t\t\tnew ApiError(\"An unknown error occurred\", 500, {\n\t\t\t\t\treason: String(err),\n\t\t\t\t}),\n\t\t\t);\n\t\t} finally {\n\t\t\tif (timeoutId) {\n\t\t\t\tclearTimeout(timeoutId);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Processes the fetch response.\n\t * Attempts to parse JSON unless the status is 204 (No Content).\n\t * @param response - The raw fetch Response object.\n\t * @returns A promise resolving to an ApiResponse if successful, or rejecting with ApiError otherwise.\n\t */\n\tprotected async processResponse(response: Response): Promise {\n\t\tlet responseJSON: unknown = null;\n\n\t\ttry {\n\t\t\tif (response.status !== 204) {\n\t\t\t\tresponseJSON = await response.json();\n\t\t\t}\n\t\t} catch (error) {\n\t\t\treturn Promise.reject(\n\t\t\t\tnew ApiError((error as Error).message, response.status, {\n\t\t\t\t\tstatusText: response.statusText,\n\t\t\t\t\treason: \"JSON parsing error\",\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tif (response.ok) {\n\t\t\treturn {\n\t\t\t\tjson: responseJSON as Keyable,\n\t\t\t\theaders: response.headers,\n\t\t\t};\n\t\t}\n\n\t\treturn Promise.reject(this.getErrorFromResp(responseJSON));\n\t}\n\n\t/**\n\t * Derives an ApiError instance from the response JSON, which may follow various patterns.\n\t * @param respJson - The parsed JSON response from the server.\n\t * @returns An ApiError representing the server error.\n\t */\n\tprotected getErrorFromResp(respJson: unknown): ApiError {\n\t\tif (!respJson || typeof respJson !== \"object\") {\n\t\t\treturn new ApiError(\"An unknown error occurred\", 500, {\n\t\t\t\treason: \"unexpected response format\",\n\t\t\t});\n\t\t}\n\n\t\tconst errorObj = respJson as Record;\n\n\t\t// Top-level error format: { message: string, statusCode: number, error: string }\n\t\tif (\n\t\t\ttypeof errorObj.message === \"string\" &&\n\t\t\ttypeof errorObj.statusCode === \"number\" &&\n\t\t\ttypeof errorObj.error === \"string\"\n\t\t) {\n\t\t\treturn new ApiError(errorObj.message, errorObj.statusCode, {\n\t\t\t\treason: errorObj.error,\n\t\t\t});\n\t\t}\n\n\t\t// Nested error object: { error: { message, code, details } }\n\t\tif (errorObj.error && typeof errorObj.error === \"object\") {\n\t\t\tconst {\n\t\t\t\tmessage = \"Unknown error\",\n\t\t\t\tcode = 500,\n\t\t\t\tdetails,\n\t\t\t} = errorObj.error as Record;\n\t\t\treturn new ApiError(\n\t\t\t\tString(message),\n\t\t\t\ttypeof code === \"number\" ? code : 500,\n\t\t\t\tdetails ?? { reason: \"server error without details\" },\n\t\t\t);\n\t\t}\n\n\t\t// Alternative top-level fields: { message: string, code?: number, errorCode?: number, details?: any }\n\t\tif (\n\t\t\ttypeof errorObj.message === \"string\" &&\n\t\t\t(typeof errorObj.code === \"number\" ||\n\t\t\t\ttypeof errorObj.errorCode === \"number\")\n\t\t) {\n\t\t\tconst statusCode =\n\t\t\t\ttypeof errorObj.code === \"number\" ? errorObj.code : errorObj.errorCode;\n\t\t\treturn new ApiError(\n\t\t\t\terrorObj.message,\n\t\t\t\tstatusCode as number,\n\t\t\t\terrorObj.details ?? { reason: \"server error without details\" },\n\t\t\t);\n\t\t}\n\n\t\t// Fallback if no known error format matches\n\t\treturn new ApiError(\"An unknown error occurred\", 500, {\n\t\t\treason: \"unhandled error format\",\n\t\t\tdata: respJson,\n\t\t});\n\t}\n\n\t/**\n\t * Builds the request headers, including authentication, compression, and JSON headers as needed.\n\t * @param clientData - Client configuration and auth data.\n\t * @param method - The HTTP method.\n\t * @param body - The request payload.\n\t * @returns A promise resolving to the constructed Headers.\n\t */\n\tprotected async buildHeaders(\n\t\tclientData: ClientData,\n\t\tmethod: HttpMethod,\n\t\tbody: object | object[] | null,\n\t): Promise {\n\t\tconst headers = new Headers({\n\t\t\tAccept: \"application/json\",\n\t\t\t\"User-Agent\": `node-lokalise-api/${await getVersion()}`,\n\t\t});\n\n\t\t// Auth header can be either just the token or \" \"\n\t\theaders.append(\n\t\t\tclientData.authHeader,\n\t\t\tclientData.tokenType.length > 0\n\t\t\t\t? `${clientData.tokenType} ${clientData.token}`\n\t\t\t\t: clientData.token,\n\t\t);\n\n\t\tif (clientData.enableCompression) {\n\t\t\theaders.append(\"Accept-Encoding\", \"gzip,deflate\");\n\t\t}\n\n\t\tif (method !== \"GET\" && body) {\n\t\t\theaders.append(\"Content-Type\", \"application/json\");\n\t\t}\n\n\t\treturn headers;\n\t}\n\n\t/**\n\t * Composes the final URI by replacing placeholders of the form `/{!:{paramName}}`\n\t * with the corresponding parameter values.\n\t * @param rawUri - The raw URI template.\n\t * @returns The final composed URI string.\n\t * @throws Error if a required parameter is missing.\n\t */\n\tprotected composeURI(rawUri: string): string {\n\t\tconst regexp = /\\{(!?):(\\w+)\\}/g;\n\t\tconst uri = rawUri.replace(regexp, this.mapUriParams());\n\t\treturn uri.endsWith(\"/\") ? uri.slice(0, -1) : uri;\n\t}\n\n\t/**\n\t * Returns a function that maps URI parameters from placeholders.\n\t * @returns A function used as a replacement callback in `composeURI`.\n\t * @throws Error if a required parameter is missing.\n\t */\n\tprotected mapUriParams(): (\n\t\tsubstring: string,\n\t\tisMandatory: string,\n\t\tparamName: string,\n\t) => string {\n\t\treturn (\n\t\t\t_substring: string,\n\t\t\tisMandatory: string,\n\t\t\tparamName: string,\n\t\t): string => {\n\t\t\tif (this.params[paramName] != null) {\n\t\t\t\tconst paramValue = String(this.params[paramName]);\n\t\t\t\t// Remove the parameter so it doesn't appear as a query parameter\n\t\t\t\tdelete this.params[paramName];\n\t\t\t\treturn paramValue;\n\t\t\t}\n\t\t\tif (isMandatory === \"!\") {\n\t\t\t\tthrow new Error(`Missing required parameter: ${paramName}`);\n\t\t\t}\n\t\t\treturn \"\";\n\t\t};\n\t}\n}\n","import type { PaginatedResult as PaginatedResultInterface } from \"../interfaces/paginated_result.js\";\n\nexport class PaginatedResult implements PaginatedResultInterface {\n\ttotalResults: number;\n\ttotalPages: number;\n\tresultsPerPage: number;\n\tcurrentPage: number;\n\titems: T[];\n\n\tconstructor(items: T[], headers: Headers) {\n\t\tthis.totalResults = this.safeParseInt(\n\t\t\theaders.get(\"x-pagination-total-count\"),\n\t\t);\n\t\tthis.totalPages = this.safeParseInt(headers.get(\"x-pagination-page-count\"));\n\t\tthis.resultsPerPage = this.safeParseInt(headers.get(\"x-pagination-limit\"));\n\t\tthis.currentPage = this.safeParseInt(headers.get(\"x-pagination-page\"));\n\t\tthis.items = items;\n\t}\n\n\thasNextPage(): boolean {\n\t\treturn this.currentPage > 0 && this.currentPage < this.totalPages;\n\t}\n\n\thasPrevPage(): boolean {\n\t\treturn this.currentPage > 1;\n\t}\n\n\tisLastPage(): boolean {\n\t\treturn !this.hasNextPage();\n\t}\n\n\tisFirstPage(): boolean {\n\t\treturn !this.hasPrevPage();\n\t}\n\n\tnextPage(): number {\n\t\tif (this.isLastPage()) {\n\t\t\treturn this.currentPage;\n\t\t}\n\t\treturn this.currentPage + 1;\n\t}\n\n\tprevPage(): number {\n\t\tif (this.isFirstPage()) {\n\t\t\treturn this.currentPage;\n\t\t}\n\t\treturn this.currentPage - 1;\n\t}\n\n\tprivate safeParseInt(str: string | null): number {\n\t\tif (!str || Number.isNaN(Number(str))) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn Number.parseInt(str, 10);\n\t}\n}\n","import type { CursorPaginatedResult as CursorPaginatedResultInterface } from \"../interfaces/cursor_paginated_result.js\";\nimport { PaginatedResult } from \"./paginated_result.js\";\n\nexport class CursorPaginatedResult\n\textends PaginatedResult\n\timplements CursorPaginatedResultInterface\n{\n\tnextCursor: string | null;\n\n\tconstructor(items: T[], headers: Headers) {\n\t\tsuper(items, headers);\n\n\t\tthis.nextCursor = headers.get(\"x-pagination-next-cursor\");\n\t}\n\n\thasNextCursor(): boolean {\n\t\treturn this.nextCursor !== null;\n\t}\n}\n","import { ApiRequest } from \"../http_client/base.js\";\nimport type { BulkResult } from \"../interfaces/bulk_result.js\";\nimport type { ClientData } from \"../interfaces/client_data.js\";\nimport type { Keyable } from \"../interfaces/keyable.js\";\nimport { CursorPaginatedResult } from \"../models/cursor_paginated_result.js\";\nimport { PaginatedResult } from \"../models/paginated_result.js\";\nimport type { HttpMethod } from \"../types/http_method.js\";\n\ntype ResolveHandler = (json: Keyable, headers: Headers) => T;\n\n/**\n * An abstract base class that provides generic CRUD (Create, Read, Update, Delete) operations\n * and handling for pagination, cursor pagination, and bulk operations. Other \"collection\" classes\n * should extend this class and provide specific implementations for resource endpoints.\n *\n * Expected usage:\n * - Subclasses define `rootElementName` and/or `rootElementNameSingular` to indicate the JSON fields\n * that contain the desired data.\n * - `elementClass` and optionally `secondaryElementClass` should be overridden to map raw JSON\n * objects to strongly typed model instances.\n * - `endpoint` and `prefixURI` should be set as static properties in subclasses to specify resource paths.\n */\nexport abstract class BaseCollection {\n\t/**\n\t * Client data containing authentication and configuration details.\n\t * Provided by a `BaseClient` or similar client instance.\n\t */\n\treadonly clientData: ClientData;\n\n\t/**\n\t * Static endpoint property that subclasses can define to indicate the API endpoint\n\t * for this collection. If not set, ensure `prefixURI` or `uri` parameters are passed.\n\t */\n\tprotected static endpoint: string | null;\n\n\t/**\n\t * Static prefixURI property that subclasses can define to indicate a base path.\n\t * If `uri` is not passed explicitly, this prefix is used to construct the request URL.\n\t */\n\tprotected static prefixURI: string | null;\n\n\t/**\n\t * Constructs a new BaseCollection instance.\n\t * @param clientData - Client data for making authenticated requests.\n\t */\n\tconstructor(clientData: ClientData) {\n\t\tthis.clientData = clientData;\n\t}\n\n\t/**\n\t * Abstract getter that must be implemented by subclasses.\n\t * Should return a class constructor that maps a JSON object to an `ElementType` instance.\n\t */\n\tprotected abstract get elementClass(): new (\n\t\tjson: Keyable,\n\t) => ElementType;\n\n\t/**\n\t * Getter that must be overridden by subclasses to return the root element name\n\t * for array-based JSON responses.\n\t * @throws Error if not defined by the subclass.\n\t */\n\tprotected get rootElementName(): string {\n\t\tthrow new Error(\n\t\t\t\"rootElementName is not defined. Subclasses must override `rootElementName`.\",\n\t\t);\n\t}\n\n\t/**\n\t * Getter that may be overridden by subclasses to return the root element name\n\t * for single-item JSON responses.\n\t * @throws Error if not defined by the subclass.\n\t */\n\tprotected get rootElementNameSingular(): string | null {\n\t\tthrow new Error(\n\t\t\t\"rootElementNameSingular is not defined. Subclasses must override `rootElementNameSingular`.\",\n\t\t);\n\t}\n\n\t/**\n\t * Getter that may be overridden by subclasses if a secondary model type is returned.\n\t * By default, this throws an error. If needed, override it in the subclass.\n\t */\n\tprotected get secondaryElementClass(): new (\n\t\tjson: Keyable,\n\t) => SecondaryType {\n\t\tthrow new Error(\n\t\t\t\"Secondary elements are not supported by this collection. Override `secondaryElementClass` if needed.\",\n\t\t);\n\t}\n\n\t/**\n\t * Getter that must be overridden if `secondaryElementClass` is used.\n\t * Returns the JSON property name for the secondary element.\n\t * @throws Error if not defined by the subclass that uses secondary elements.\n\t */\n\tprotected get secondaryElementNameSingular(): string {\n\t\tthrow new Error(\n\t\t\t\"secondaryElementNameSingular is not defined. Subclasses must override this if secondary elements are used.\",\n\t\t);\n\t}\n\n\t/**\n\t * Perform a GET request that expects a list of items.\n\t * @param params Optional query or request parameters.\n\t * @returns A promise resolving to either a paginated result or an array of ElementType.\n\t */\n\tprotected doList(\n\t\tparams: Keyable,\n\t): Promise | ElementType[]> {\n\t\treturn this.createPromise(\"GET\", params, this.populateArrayFromJson, null);\n\t}\n\n\t/**\n\t * Perform a GET request that expects a cursor-paginated list of items.\n\t * @param params Optional query or request parameters.\n\t * @returns A promise resolving to a CursorPaginatedResult of ElementType.\n\t */\n\tprotected doListCursor(\n\t\tparams: Keyable,\n\t): Promise> {\n\t\treturn this.createPromise(\n\t\t\t\"GET\",\n\t\t\tparams,\n\t\t\tthis.populateArrayFromJsonCursor,\n\t\t\tnull,\n\t\t);\n\t}\n\n\t/**\n\t * Perform a GET request to retrieve a single item by its ID.\n\t * @param id The ID of the item to retrieve.\n\t * @param params Optional query or request parameters.\n\t * @returns A promise resolving to a single ElementType instance.\n\t */\n\tprotected doGet(\n\t\tid: string | number,\n\t\tparams: Keyable = {},\n\t): Promise {\n\t\treturn this.createPromise(\n\t\t\t\"GET\",\n\t\t\t{ ...params, id },\n\t\t\tthis.populateObjectFromJsonRoot,\n\t\t\tnull,\n\t\t);\n\t}\n\n\t/**\n\t * Perform a DELETE request to remove a single item by its ID.\n\t * @param id The ID of the item to delete.\n\t * @param params Optional query or request parameters.\n\t * @returns A promise resolving to JSON representing the deletion result.\n\t */\n\tprotected doDelete(\n\t\tid: string | number,\n\t\tparams: Keyable = {},\n\t): Promise {\n\t\treturn this.createPromise(\n\t\t\t\"DELETE\",\n\t\t\t{ ...params, id },\n\t\t\tthis.returnBareJSON,\n\t\t\tnull,\n\t\t) as Promise;\n\t}\n\n\t/**\n\t * Perform a POST request to create a new resource.\n\t * @param body The object or array of objects to send in the request body.\n\t * @param params Optional query or request parameters.\n\t * @param resolveFn Optional custom resolve handler to parse the response.\n\t * @returns A promise resolving to an ElementType or SecondaryType instance.\n\t */\n\tprotected doCreate(\n\t\tbody: object | object[] | null,\n\t\tparams: Keyable = {},\n\t\tresolveFn = this.populateObjectFromJson,\n\t): Promise {\n\t\treturn this.createPromise(\"POST\", params, resolveFn, body);\n\t}\n\n\t/**\n\t * Perform a POST request to create multiple resources at once.\n\t * @param body The object or array of objects to send in the request body.\n\t * @param params Optional query or request parameters.\n\t * @param resolveFn Optional custom resolve handler to parse the response array.\n\t * @returns A promise resolving to an array of ElementType.\n\t */\n\tprotected doCreateArray(\n\t\tbody: object | object[] | null,\n\t\tparams: Keyable,\n\t\tresolveFn: ResolveHandler = this.populateArray,\n\t): Promise {\n\t\treturn this.createPromise(\"POST\", params, resolveFn, body);\n\t}\n\n\t/**\n\t * Perform an UPDATE (PUT/PATCH) request to modify an existing resource by its ID.\n\t * @param id The ID of the item to update.\n\t * @param body The updated fields to send in the request body.\n\t * @param params Optional query or request parameters.\n\t * @param resolveFn Optional custom resolve handler to parse the response object.\n\t * @param method The HTTP method to use, typically PUT or PATCH.\n\t * @returns A promise resolving to the updated ElementType instance.\n\t */\n\tprotected doUpdate(\n\t\tid: string | number,\n\t\tbody: Keyable | null,\n\t\tparams: Keyable,\n\t\tresolveFn = this.populateObjectFromJsonRoot,\n\t\tmethod: HttpMethod = \"PUT\",\n\t): Promise {\n\t\treturn this.createPromise(method, { ...params, id }, resolveFn, body);\n\t}\n\n\t/**\n\t * Parse a JSON response that contains a single item under a known root element name.\n\t * @param json The raw JSON object returned by the API.\n\t * @param headers The response headers.\n\t * @returns The parsed ElementType instance.\n\t * @throws Error if the expected root element name is missing.\n\t */\n\tprotected populateObjectFromJsonRoot(\n\t\tjson: Keyable,\n\t\theaders: Headers,\n\t): ElementType {\n\t\tlet jsonData = json;\n\n\t\tconst rootElementName = this.rootElementNameSingular;\n\t\tif (this.rootElementNameSingular && rootElementName) {\n\t\t\tconst dataRecord = jsonData as Record;\n\t\t\tjsonData = dataRecord[rootElementName];\n\t\t\tif (!jsonData) {\n\t\t\t\tthrow new Error(`Missing property '${rootElementName}' in JSON object`);\n\t\t\t}\n\t\t}\n\n\t\treturn this.populateObjectFromJson(jsonData, headers) as ElementType;\n\t}\n\n\t/**\n\t * Parse a JSON response that contains a secondary item under a known secondary root element name.\n\t * @param json The raw JSON object returned by the API.\n\t * @param headers The response headers.\n\t * @returns The parsed SecondaryType instance.\n\t * @throws Error if the expected secondary element name is missing.\n\t */\n\tprotected populateSecondaryObjectFromJsonRoot(\n\t\tjson: Keyable,\n\t\theaders: Headers,\n\t): SecondaryType {\n\t\tconst root = this.secondaryElementNameSingular;\n\t\tconst record = json as Record;\n\n\t\tconst itemJson = record[root];\n\t\tif (!itemJson) {\n\t\t\tthrow new Error(\n\t\t\t\t`Missing expected secondary property '${root}' in JSON response.`,\n\t\t\t);\n\t\t}\n\n\t\treturn this.populateObjectFromJson(\n\t\t\titemJson,\n\t\t\theaders,\n\t\t\ttrue,\n\t\t) as SecondaryType;\n\t}\n\n\t/**\n\t * Parse a JSON response that contains a secondary item.\n\t * @param json The raw JSON object returned by the API.\n\t * @param headers The response headers.\n\t * @returns The parsed SecondaryType instance.\n\t */\n\tprotected populateSecondaryObjectFromJson(\n\t\tjson: Keyable,\n\t\theaders: Headers,\n\t): SecondaryType {\n\t\treturn this.populateObjectFromJson(json, headers, true) as SecondaryType;\n\t}\n\n\t/**\n\t * Parse a JSON response that contains an array of items along with bulk result details.\n\t * @param json The raw JSON object returned by the API.\n\t * @param headers The response headers.\n\t * @returns A BulkResult object containing items and potential errors.\n\t * @throws Error if the expected root element is missing or not an array.\n\t */\n\tprotected populateArrayFromJsonBulk(\n\t\tjson: Keyable,\n\t\theaders: Headers,\n\t): BulkResult {\n\t\tconst root = this.rootElementName;\n\t\tconst jsonArray = json[root];\n\n\t\tif (!Array.isArray(jsonArray)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Expected an array under '${root}' but received: ${typeof jsonArray}`,\n\t\t\t);\n\t\t}\n\n\t\tconst items: ElementType[] = jsonArray.map(\n\t\t\t(obj) => this.populateObjectFromJson(obj, headers) as ElementType,\n\t\t);\n\n\t\treturn {\n\t\t\terrors: json.errors,\n\t\t\titems,\n\t\t};\n\t}\n\n\t/**\n\t * Parse a JSON response that contains an array of items.\n\t * If pagination headers are detected, returns a PaginatedResult.\n\t * Otherwise, returns a plain array of ElementType.\n\t * @param json The raw JSON object returned by the API.\n\t * @param headers The response headers.\n\t */\n\tprotected populateArrayFromJson(\n\t\tjson: Keyable,\n\t\theaders: Headers,\n\t): PaginatedResult | ElementType[] {\n\t\tconst array = this.populateArray(json, headers);\n\t\treturn this.isPaginated(headers)\n\t\t\t? new PaginatedResult(array, headers)\n\t\t\t: array;\n\t}\n\n\t/**\n\t * Parse a JSON response that contains an array of items.\n\t * This method returns a plain array and does not consider pagination.\n\t * @param json The raw JSON object returned by the API.\n\t * @param headers The response headers.\n\t */\n\tprotected populateArray(json: Keyable, headers: Headers): ElementType[] {\n\t\tconst root = this.rootElementName;\n\t\tconst jsonArray = json[root];\n\n\t\tif (!Array.isArray(jsonArray)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Expected an array under '${root}' but received: ${typeof jsonArray}`,\n\t\t\t);\n\t\t}\n\n\t\treturn jsonArray.map(\n\t\t\t(obj: Keyable) =>\n\t\t\t\tthis.populateObjectFromJson(obj, headers) as ElementType,\n\t\t);\n\t}\n\n\t/**\n\t * Parse a JSON response that contains a cursor-paginated array of items.\n\t * @param json The raw JSON object returned by the API.\n\t * @param headers The response headers.\n\t */\n\tprotected populateArrayFromJsonCursor(\n\t\tjson: Keyable,\n\t\theaders: Headers,\n\t): CursorPaginatedResult {\n\t\tconst root = this.rootElementName;\n\t\tconst jsonArray = json[root];\n\n\t\tif (!Array.isArray(jsonArray)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Expected an array under '${root}' for cursor pagination but received: ${typeof jsonArray}`,\n\t\t\t);\n\t\t}\n\n\t\tconst items = jsonArray.map(\n\t\t\t(obj: Keyable) =>\n\t\t\t\tthis.populateObjectFromJson(obj, headers) as ElementType,\n\t\t);\n\n\t\treturn new CursorPaginatedResult(items, headers);\n\t}\n\n\t/**\n\t * Parse a JSON object into either an ElementType or a SecondaryType instance.\n\t * @param json The raw JSON object returned by the API.\n\t * @param _headers The response headers (if needed).\n\t * @param secondary If true, use the secondaryElementClass instead of elementClass.\n\t */\n\tprotected populateObjectFromJson(\n\t\tjson: Keyable,\n\t\t_headers: Headers,\n\t\tsecondary = false,\n\t): ElementType | SecondaryType {\n\t\tconst cls = secondary ? this.secondaryElementClass : this.elementClass;\n\t\treturn new cls(json);\n\t}\n\n\t/**\n\t * Return the raw JSON as-is.\n\t * @param json The raw JSON object or array returned by the API.\n\t */\n\tprotected returnBareJSON(json: Keyable | Keyable[]): T {\n\t\treturn json as T;\n\t}\n\n\t/**\n\t * Convert a single object into an array if it's not already an array.\n\t * @param raw_body The raw request body.\n\t */\n\tprotected objToArray(raw_body: Keyable | Keyable[]): Keyable[] {\n\t\treturn Array.isArray(raw_body) ? raw_body : [raw_body];\n\t}\n\n\t/**\n\t * Create a Promise that sends an HTTP request and resolves with a parsed response.\n\t * @param method The HTTP method (GET, POST, PUT, DELETE, etc.).\n\t * @param params Query or request parameters.\n\t * @param resolveFn A function to resolve and parse the JSON response.\n\t * @param body The request body, if applicable.\n\t * @param uri An explicit URI to use for the request. If not provided, prefixURI is used.\n\t */\n\tprotected async createPromise(\n\t\tmethod: HttpMethod,\n\t\tparams: Keyable,\n\t\tresolveFn: ResolveHandler,\n\t\tbody: object | object[] | null,\n\t\turi: string | null = null,\n\t): Promise {\n\t\tconst request = await this.prepareRequest(method, body, params, uri);\n\t\treturn resolveFn.call(\n\t\t\tthis,\n\t\t\trequest.response.json,\n\t\t\trequest.response.headers,\n\t\t);\n\t}\n\n\t/**\n\t * Prepare the API request by creating a new ApiRequest instance using the static async factory method.\n\t * @param method The HTTP method.\n\t * @param body The request body.\n\t * @param params The request parameters.\n\t * @param uri An explicit URI for the request or null.\n\t */\n\tprotected async prepareRequest(\n\t\tmethod: HttpMethod,\n\t\tbody: object | object[] | null,\n\t\tparams: Keyable,\n\t\turi: string | null,\n\t): Promise {\n\t\treturn await ApiRequest.create(\n\t\t\tthis.getUri(uri),\n\t\t\tmethod,\n\t\t\tbody,\n\t\t\tparams,\n\t\t\tthis.clientData,\n\t\t);\n\t}\n\n\t/**\n\t * Determine the URI for the request. If uri is not provided, use prefixURI.\n\t * @param uri An explicit URI or null.\n\t * @throws Error if no URI or prefixURI is provided.\n\t */\n\tprotected getUri(uri: string | null): string {\n\t\tconst childClass = this.constructor as typeof BaseCollection;\n\t\tconst resolvedUri = uri ?? childClass.prefixURI;\n\t\tif (!resolvedUri) {\n\t\t\tthrow new Error(\n\t\t\t\t\"No URI or prefixURI provided. Ensure the subclass defines a static prefixURI or pass a URI explicitly.\",\n\t\t\t);\n\t\t}\n\t\treturn resolvedUri;\n\t}\n\n\t/**\n\t * Determine if the response headers indicate pagination.\n\t * @param headers The response headers.\n\t */\n\tprivate isPaginated(headers: Headers): boolean {\n\t\treturn (\n\t\t\t!!headers.get(\"x-pagination-total-count\") &&\n\t\t\t!!headers.get(\"x-pagination-page\")\n\t\t);\n\t}\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { Branch } from \"../models/branch.js\";\nimport type {\n\tBranchDeleted,\n\tBranchMerged,\n\tBranchParams,\n\tMergeBranchParams,\n} from \"../types/branches.js\";\nimport type {\n\tProjectOnly,\n\tProjectWithPagination,\n} from \"../types/common_get_params.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Branches extends BaseCollection {\n\tprotected static override prefixURI =\n\t\t\"projects/{!:project_id}/branches/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Branch {\n\t\treturn Branch;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"branches\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"branch\";\n\t}\n\n\tlist(\n\t\trequest_params: ProjectWithPagination,\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tcreate(\n\t\tbranch_params: BranchParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doCreate(\n\t\t\tbranch_params,\n\t\t\trequest_params,\n\t\t\tthis.populateObjectFromJsonRoot,\n\t\t);\n\t}\n\n\tget(\n\t\tbranch_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doGet(branch_id, request_params);\n\t}\n\n\tupdate(\n\t\tbranch_id: string | number,\n\t\tbranch_params: BranchParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doUpdate(branch_id, branch_params, request_params);\n\t}\n\n\tdelete(\n\t\tbranch_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doDelete(branch_id, request_params);\n\t}\n\n\tmerge(\n\t\tbranch_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t\tbody: MergeBranchParams = {},\n\t): Promise {\n\t\tconst params = {\n\t\t\t...request_params,\n\t\t\t...{ id: branch_id },\n\t\t};\n\n\t\treturn this.createPromise(\n\t\t\t\"POST\",\n\t\t\tparams,\n\t\t\tthis.returnBareJSON,\n\t\t\tbody,\n\t\t\t\"projects/{!:project_id}/branches/{:id}/merge\",\n\t\t);\n\t}\n}\n","import type { Comment as CommentInterface } from \"../interfaces/comment.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Comment extends BaseModel implements CommentInterface {\n\tdeclare comment_id: number;\n\tdeclare key_id: number;\n\tdeclare comment: string;\n\tdeclare added_by: number;\n\tdeclare added_by_email: string;\n\tdeclare added_at: string;\n\tdeclare added_at_timestamp: number;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { Comment } from \"../models/comment.js\";\nimport type {\n\tCommentData,\n\tCommentDeleted,\n\tKeyProjectPagination,\n\tProjectAndKey,\n} from \"../types/comments.js\";\nimport type { ProjectWithPagination } from \"../types/common_get_params.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Comments extends BaseCollection {\n\tprotected static override prefixURI =\n\t\t\"projects/{!:project_id}/keys/{!:key_id}/comments/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Comment {\n\t\treturn Comment;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"comments\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"comment\";\n\t}\n\n\tlist(\n\t\trequest_params: KeyProjectPagination,\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tcreate(\n\t\tcomment_params: CommentData | CommentData[],\n\t\trequest_params: ProjectAndKey,\n\t): Promise {\n\t\tconst body = { comments: this.objToArray(comment_params) };\n\n\t\treturn this.doCreateArray(body, request_params);\n\t}\n\n\tget(\n\t\tcomment_id: string | number,\n\t\trequest_params: ProjectAndKey,\n\t): Promise {\n\t\treturn this.doGet(comment_id, request_params);\n\t}\n\n\tdelete(\n\t\tcomment_id: string | number,\n\t\trequest_params: ProjectAndKey,\n\t): Promise {\n\t\treturn this.doDelete(comment_id, request_params);\n\t}\n\n\tlist_project_comments(\n\t\tparams: ProjectWithPagination,\n\t): Promise> {\n\t\treturn this.createPromise(\n\t\t\t\"GET\",\n\t\t\tparams,\n\t\t\tthis.populateArrayFromJson,\n\t\t\tnull,\n\t\t\t\"projects/{!:project_id}/comments\",\n\t\t) as Promise>;\n\t}\n}\n","import type { Contributor as ContributorInterface } from \"../interfaces/contributor.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Contributor extends BaseModel implements ContributorInterface {\n\tdeclare user_id: number;\n\tdeclare email: string;\n\tdeclare fullname: string;\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n\tdeclare is_admin: boolean; //deprecated\n\tdeclare is_reviewer: boolean; //deprecated\n\tdeclare languages: Array<{\n\t\tlang_id: number;\n\t\tlang_iso: string;\n\t\tlang_name: string;\n\t\tis_writable: boolean;\n\t}>;\n\tdeclare admin_rights: string[];\n\tdeclare role_id: number;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { Contributor } from \"../models/contributor.js\";\nimport type {\n\tProjectOnly,\n\tProjectWithPagination,\n} from \"../types/common_get_params.js\";\nimport type {\n\tContributorCreateData,\n\tContributorDeleted,\n\tContributorUpdateData,\n} from \"../types/contributors.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Contributors extends BaseCollection {\n\tprotected static override prefixURI =\n\t\t\"projects/{!:project_id}/contributors/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Contributor {\n\t\treturn Contributor;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"contributors\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"contributor\";\n\t}\n\n\tlist(\n\t\trequest_params: ProjectWithPagination,\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tcreate(\n\t\tcontributor_params: ContributorCreateData | ContributorCreateData[],\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\tconst body = { contributors: this.objToArray(contributor_params) };\n\n\t\treturn this.doCreateArray(body, request_params);\n\t}\n\n\tget(\n\t\tcontributor_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doGet(contributor_id, request_params);\n\t}\n\n\tupdate(\n\t\tcontributor_id: string | number,\n\t\tcontributor_params: ContributorUpdateData,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doUpdate(contributor_id, contributor_params, request_params);\n\t}\n\n\tdelete(\n\t\tcontributor_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doDelete(contributor_id, request_params);\n\t}\n}\n","import type { File as FileInterface } from \"../interfaces/file.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class File extends BaseModel implements FileInterface {\n\tdeclare file_id: number;\n\tdeclare filename: string;\n\tdeclare key_count: number;\n}\n","import type { QueuedProcess as QueuedProcessInterface } from \"../interfaces/queued_process.js\";\nimport { BaseModel } from \"./base_model.js\";\n\ntype ProcessDetails = {\n\t[key: string]: any;\n};\n\nexport class QueuedProcess extends BaseModel implements QueuedProcessInterface {\n\tdeclare process_id: string;\n\tdeclare type: string;\n\tdeclare status: string;\n\tdeclare message: string;\n\tdeclare created_by: string;\n\tdeclare created_by_email: string;\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n\tdeclare details: ProcessDetails;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { File } from \"../models/file.js\";\nimport { QueuedProcess } from \"../models/queued_process.js\";\nimport type { ProjectOnly } from \"../types/common_get_params.js\";\nimport type {\n\tDownloadBundle,\n\tDownloadFileParams,\n\tFileDeleted,\n\tListFileParams,\n\tUploadFileParams,\n} from \"../types/files.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Files extends BaseCollection {\n\tprotected static override prefixURI = \"projects/{!:project_id}/files/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => File {\n\t\treturn File;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"files\";\n\t}\n\n\tprotected override get secondaryElementClass(): new (\n\t\tjson: Keyable,\n\t) => QueuedProcess {\n\t\treturn QueuedProcess;\n\t}\n\n\tprotected override get secondaryElementNameSingular(): string {\n\t\treturn \"process\";\n\t}\n\n\tlist(request_params: ListFileParams): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tupload(project_id: string, upload: UploadFileParams): Promise {\n\t\treturn this.createPromise(\n\t\t\t\"POST\",\n\t\t\t{ project_id },\n\t\t\tthis.populateSecondaryObjectFromJsonRoot,\n\t\t\tupload,\n\t\t\t\"projects/{!:project_id}/files/upload\",\n\t\t);\n\t}\n\n\tdownload(\n\t\tproject_id: string,\n\t\tdownload: DownloadFileParams,\n\t): Promise {\n\t\treturn this.createPromise(\n\t\t\t\"POST\",\n\t\t\t{ project_id },\n\t\t\tthis.returnBareJSON,\n\t\t\tdownload,\n\t\t\t\"projects/{!:project_id}/files/download\",\n\t\t);\n\t}\n\n\tasync_download(\n\t\tproject_id: string,\n\t\tdownload: DownloadFileParams,\n\t): Promise {\n\t\treturn this.createPromise(\n\t\t\t\"POST\",\n\t\t\t{ project_id },\n\t\t\tthis.populateSecondaryObjectFromJson,\n\t\t\tdownload,\n\t\t\t\"projects/{!:project_id}/files/async-download\",\n\t\t);\n\t}\n\n\tdelete(\n\t\tfile_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doDelete(file_id, request_params);\n\t}\n}\n","import type { Jwt as JwtInterface } from \"../interfaces/jwt.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Jwt extends BaseModel implements JwtInterface {\n\tdeclare jwt: string;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport { Jwt as JwtModel } from \"../models/jwt.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Jwt extends BaseCollection {\n\tprotected static override prefixURI = \"projects/{!:project_id}/tokens\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => JwtModel {\n\t\treturn JwtModel;\n\t}\n\n\tcreate(project_id: string, body = { service: \"ota\" }): Promise {\n\t\tconst request_params = { project_id: project_id };\n\t\treturn this.doCreate(body, request_params, this.populateObjectFromJson);\n\t}\n}\n","import type { Comment } from \"../interfaces/comment.js\";\nimport type { Key as KeyInterface } from \"../interfaces/key.js\";\nimport type { Screenshot } from \"../interfaces/screenshot.js\";\nimport type { Translation } from \"../interfaces/translation.js\";\nimport type { Filenames, Filenames as Keynames } from \"../types/filenames.js\";\nimport type { SupportedPlatforms } from \"../types/supported_platforms.js\";\nimport { BaseModel } from \"./base_model.js\";\n\ntype KeyComment = Omit;\n\nexport class Key extends BaseModel implements KeyInterface {\n\tdeclare key_id: number;\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n\tdeclare key_name: Keynames;\n\tdeclare filenames: Filenames;\n\tdeclare description: string;\n\tdeclare platforms: SupportedPlatforms[];\n\tdeclare tags: string[];\n\tdeclare comments: KeyComment[];\n\tdeclare screenshots: Screenshot[];\n\tdeclare translations: Translation[];\n\tdeclare is_plural: boolean;\n\tdeclare plural_name: string;\n\tdeclare is_hidden: boolean;\n\tdeclare is_archived: boolean;\n\tdeclare context: string;\n\tdeclare base_words: number;\n\tdeclare char_limit: number;\n\tdeclare custom_attributes: any[] | string;\n\tdeclare modified_at: string;\n\tdeclare modified_at_timestamp: number;\n\tdeclare translations_modified_at: string;\n\tdeclare translations_modified_at_timestamp: number;\n}\n","import type { BulkResult } from \"../interfaces/bulk_result.js\";\nimport type { CursorPaginatedResult } from \"../interfaces/cursor_paginated_result.js\";\nimport type { Keyable } from \"../interfaces/keyable.js\";\nimport { Key } from \"../models/key.js\";\nimport type { ProjectOnly } from \"../types/common_get_params.js\";\nimport type {\n\tBulkUpdateKeyParams,\n\tCreateKeyParams,\n\tGetKeyParams,\n\tKeyDeleted,\n\tKeyParamsWithPagination,\n\tKeysBulkDeleted,\n\tUpdateKeyData,\n} from \"../types/keys.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Keys extends BaseCollection {\n\tprotected static override prefixURI = \"projects/{!:project_id}/keys/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Key {\n\t\treturn Key;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"keys\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"key\";\n\t}\n\n\tlist(\n\t\trequest_params: KeyParamsWithPagination,\n\t): Promise> {\n\t\treturn this.doListCursor(request_params);\n\t}\n\n\tcreate(\n\t\tkey_params: CreateKeyParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise> {\n\t\treturn this.createPromise(\n\t\t\t\"POST\",\n\t\t\trequest_params,\n\t\t\tthis.populateArrayFromJsonBulk,\n\t\t\tkey_params,\n\t\t);\n\t}\n\n\tget(key_id: string | number, request_params: GetKeyParams): Promise {\n\t\treturn this.doGet(key_id, request_params);\n\t}\n\n\tupdate(\n\t\tkey_id: string | number,\n\t\tkey_params: UpdateKeyData,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doUpdate(key_id, key_params, request_params);\n\t}\n\n\tdelete(\n\t\tkey_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doDelete(key_id, request_params);\n\t}\n\n\tbulk_update(\n\t\tkey_params: BulkUpdateKeyParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise> {\n\t\treturn this.createPromise(\n\t\t\t\"PUT\",\n\t\t\trequest_params,\n\t\t\tthis.populateArrayFromJsonBulk,\n\t\t\tkey_params,\n\t\t\t\"projects/{!:project_id}/keys\",\n\t\t);\n\t}\n\n\tbulk_delete(\n\t\tkey_ids: number[] | string[],\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\tconst keys = { keys: this.objToArray(key_ids) };\n\n\t\treturn this.createPromise(\n\t\t\t\"DELETE\",\n\t\t\trequest_params,\n\t\t\tthis.returnBareJSON,\n\t\t\tkeys,\n\t\t\t\"projects/{!:project_id}/keys\",\n\t\t);\n\t}\n}\n","import type { Language as LanguageInterface } from \"../interfaces/language.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Language extends BaseModel implements LanguageInterface {\n\tdeclare lang_id: number;\n\tdeclare lang_iso: string;\n\tdeclare lang_name: string;\n\tdeclare is_rtl: boolean;\n\tdeclare plural_forms: string[];\n}\n","import type { BulkResult } from \"../interfaces/bulk_result.js\";\nimport type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { Language } from \"../models/language.js\";\nimport type {\n\tPaginationParams,\n\tProjectOnly,\n\tProjectWithPagination,\n} from \"../types/common_get_params.js\";\nimport type {\n\tCreateLanguageParams,\n\tLanguageDeleted,\n\tUpdateLanguageParams,\n} from \"../types/languages.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Languages extends BaseCollection {\n\tprotected static override prefixURI =\n\t\t\"projects/{!:project_id}/languages/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Language {\n\t\treturn Language;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"languages\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"language\";\n\t}\n\n\tsystem_languages(\n\t\tparams: PaginationParams = {},\n\t): Promise> {\n\t\treturn this.createPromise(\n\t\t\t\"GET\",\n\t\t\tparams,\n\t\t\tthis.populateArrayFromJson,\n\t\t\tnull,\n\t\t\t\"system/languages\",\n\t\t) as Promise>;\n\t}\n\n\tlist(\n\t\trequest_params: ProjectWithPagination,\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tcreate(\n\t\traw_body: CreateLanguageParams | CreateLanguageParams[],\n\t\trequest_params: ProjectOnly,\n\t): Promise> {\n\t\tconst body = { languages: this.objToArray(raw_body) };\n\n\t\treturn this.createPromise(\n\t\t\t\"POST\",\n\t\t\trequest_params,\n\t\t\tthis.populateArrayFromJsonBulk,\n\t\t\tbody,\n\t\t);\n\t}\n\n\tget(\n\t\tlang_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doGet(lang_id, request_params);\n\t}\n\n\tupdate(\n\t\tlang_id: string | number,\n\t\tlang_params: UpdateLanguageParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doUpdate(lang_id, lang_params, request_params);\n\t}\n\n\tdelete(\n\t\tlang_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn super.doDelete(lang_id, request_params);\n\t}\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { Order as OrderInterface } from \"../interfaces/order.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Order extends BaseModel implements OrderInterface {\n\tdeclare order_id: string;\n\tdeclare project_id: string;\n\tdeclare branch: string;\n\tdeclare card_id: number | string;\n\tdeclare status: string;\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n\tdeclare created_by: number;\n\tdeclare created_by_email: string;\n\tdeclare source_language_iso: string;\n\tdeclare target_language_isos: string[];\n\tdeclare keys: number[] | string[];\n\tdeclare source_words: Keyable;\n\tdeclare provider_slug: string;\n\tdeclare translation_style: string;\n\tdeclare translation_tier: number;\n\tdeclare translation_tier_name: string;\n\tdeclare briefing: string;\n\tdeclare total: number;\n\tdeclare payment_method: string | null;\n\tdeclare is_saved_to_translation_memory: boolean;\n\tdeclare dry_run: boolean;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { Order } from \"../models/order.js\";\nimport type { TeamOnly } from \"../types/common_get_params.js\";\nimport type { CreateOrderParams } from \"../types/orders.js\";\nimport type { TeamWithPagination } from \"../types/teams.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Orders extends BaseCollection {\n\tprotected static override prefixURI = \"teams/{!:team_id}/orders/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Order {\n\t\treturn Order;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"orders\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn null;\n\t}\n\n\tlist(request_params: TeamWithPagination): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tcreate(\n\t\torder_params: CreateOrderParams,\n\t\trequest_params: TeamOnly,\n\t): Promise {\n\t\treturn this.doCreate(\n\t\t\torder_params,\n\t\t\trequest_params,\n\t\t\tthis.populateObjectFromJsonRoot,\n\t\t);\n\t}\n\n\tget(order_id: string | number, request_params: TeamOnly): Promise {\n\t\treturn this.doGet(order_id, request_params);\n\t}\n}\n","import type { PaymentCard as PaymentCardInterface } from \"../interfaces/payment_card.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class PaymentCard extends BaseModel implements PaymentCardInterface {\n\tdeclare card_id: number;\n\tdeclare last4: string;\n\tdeclare brand: string;\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { PaymentCard } from \"../models/payment_card.js\";\nimport type { CardDeleted, CreateCardParams } from \"../types/cards.js\";\nimport type { PaginationParams } from \"../types/common_get_params.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class PaymentCards extends BaseCollection {\n\tprotected static override prefixURI = \"payment_cards/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => PaymentCard {\n\t\treturn PaymentCard;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"payment_cards\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"payment_card\";\n\t}\n\n\tlist(\n\t\trequest_params: PaginationParams = {},\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tcreate(card_params: CreateCardParams): Promise {\n\t\treturn this.doCreate(card_params);\n\t}\n\n\tget(card_id: string | number): Promise {\n\t\treturn this.doGet(card_id);\n\t}\n\n\tdelete(card_id: string | number): Promise {\n\t\treturn this.doDelete(card_id);\n\t}\n}\n","import type { PermissionTemplate as PermissionTemplateInterface } from \"../interfaces/permission_template.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class PermissionTemplate\n\textends BaseModel\n\timplements PermissionTemplateInterface\n{\n\tdeclare id: number;\n\tdeclare role: string;\n\tdeclare permissions: string[];\n\tdeclare description: string;\n\tdeclare tag: string;\n\tdeclare tagColor: string;\n\tdeclare tagInfo: string | null;\n\tdeclare doesEnableAllReadOnlyLanguages: boolean;\n}\n","import type { PaginatedResult } from \"../interfaces/index.js\";\nimport type { Keyable } from \"../interfaces/keyable.js\";\nimport { PermissionTemplate } from \"../models/permission_template.js\";\nimport type { TeamOnly } from \"../types/index.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class PermissionTemplates extends BaseCollection {\n\tprotected static override prefixURI = \"teams/{!:team_id}/roles\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => PermissionTemplate {\n\t\treturn PermissionTemplate;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"roles\";\n\t}\n\n\tlist(request_params: TeamOnly): Promise> {\n\t\treturn this.doList(request_params) as Promise<\n\t\t\tPaginatedResult\n\t\t>;\n\t}\n}\n","import type { Project as ProjectInterface } from \"../interfaces/project.js\";\nimport type { ProjectSettings } from \"../interfaces/project_settings.js\";\nimport type { ProjectStatistics } from \"../interfaces/project_statistics.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Project extends BaseModel implements ProjectInterface {\n\tdeclare project_id: string;\n\tdeclare project_type: string;\n\tdeclare name: string;\n\tdeclare description: string;\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n\tdeclare created_by: number;\n\tdeclare created_by_email: string;\n\tdeclare team_id: number;\n\tdeclare base_language_id: number;\n\tdeclare base_language_iso: string;\n\tdeclare settings: ProjectSettings;\n\tdeclare statistics: ProjectStatistics;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { Project } from \"../models/project.js\";\nimport type {\n\tCreateProjectParams,\n\tProjectDeleted,\n\tProjectEmptied,\n\tProjectListParams,\n\tUpdateProjectParams,\n} from \"../types/projects.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Projects extends BaseCollection {\n\tprotected static override prefixURI = \"projects/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Project {\n\t\treturn Project;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"projects\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn null;\n\t}\n\n\tlist(\n\t\trequest_params: ProjectListParams = {},\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tcreate(project_params: CreateProjectParams): Promise {\n\t\treturn this.doCreate(project_params);\n\t}\n\n\tget(project_id: string | number): Promise {\n\t\treturn this.doGet(project_id);\n\t}\n\n\tupdate(\n\t\tproject_id: string | number,\n\t\tproject_params: UpdateProjectParams,\n\t): Promise {\n\t\treturn this.doUpdate(\n\t\t\tproject_id,\n\t\t\tproject_params,\n\t\t\t{},\n\t\t\tthis.populateObjectFromJson,\n\t\t);\n\t}\n\n\tdelete(project_id: string | number): Promise {\n\t\treturn this.doDelete(project_id);\n\t}\n\n\tempty(project_id: any): Promise {\n\t\treturn this.createPromise(\n\t\t\t\"PUT\",\n\t\t\t{ project_id: project_id },\n\t\t\tthis.returnBareJSON,\n\t\t\tnull,\n\t\t\t\"projects/{!:project_id}/empty\",\n\t\t);\n\t}\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { QueuedProcess } from \"../models/queued_process.js\";\nimport type {\n\tProjectOnly,\n\tProjectWithPagination,\n} from \"../types/common_get_params.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class QueuedProcesses extends BaseCollection {\n\tprotected static override prefixURI =\n\t\t\"projects/{!:project_id}/processes/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => QueuedProcess {\n\t\treturn QueuedProcess;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"processes\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"process\";\n\t}\n\n\tlist(\n\t\trequest_params: ProjectWithPagination,\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise<\n\t\t\tPaginatedResult\n\t\t>;\n\t}\n\n\tget(\n\t\tprocess_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doGet(process_id, request_params);\n\t}\n}\n","import type { Screenshot as ScreenshotInterface } from \"../interfaces/screenshot.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Screenshot extends BaseModel implements ScreenshotInterface {\n\tdeclare screenshot_id: number;\n\tdeclare key_ids: number[];\n\tdeclare keys: Array<{\n\t\tkey_id: number;\n\t\tcoordinates: {\n\t\t\tleft: number;\n\t\t\ttop: number;\n\t\t\twidth: number;\n\t\t\theight: number;\n\t\t};\n\t}>;\n\tdeclare url: string;\n\tdeclare title: string;\n\tdeclare description: string;\n\tdeclare screenshot_tags: string[];\n\tdeclare width: number;\n\tdeclare height: number;\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n}\n","import type { BulkResult } from \"../interfaces/bulk_result.js\";\nimport type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { Screenshot } from \"../models/screenshot.js\";\nimport type {\n\tProjectOnly,\n\tProjectWithPagination,\n} from \"../types/common_get_params.js\";\nimport type {\n\tCreateScreenshotParams,\n\tScreenshotDeleted,\n\tUpdateScreenshotParams,\n} from \"../types/screenshots.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Screenshots extends BaseCollection {\n\tprotected static override prefixURI =\n\t\t\"projects/{!:project_id}/screenshots/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Screenshot {\n\t\treturn Screenshot;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"screenshots\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"screenshot\";\n\t}\n\n\tlist(\n\t\trequest_params: ProjectWithPagination,\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tcreate(\n\t\traw_body: CreateScreenshotParams | CreateScreenshotParams[],\n\t\trequest_params: ProjectOnly,\n\t): Promise> {\n\t\tconst body = { screenshots: this.objToArray(raw_body) };\n\n\t\treturn this.createPromise(\n\t\t\t\"POST\",\n\t\t\trequest_params,\n\t\t\tthis.populateArrayFromJsonBulk,\n\t\t\tbody,\n\t\t);\n\t}\n\n\tget(\n\t\tscrenshot_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doGet(screnshot_id, request_params);\n\t}\n\n\tupdate(\n\t\tscreenshot_id: string | number,\n\t\tscreenshot_params: UpdateScreenshotParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doUpdate(screenshot_id, screenshot_params, request_params);\n\t}\n\n\tdelete(\n\t\tscreenshot_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doDelete(screenshot_id, request_params);\n\t}\n}\n","import type { Segment as SegmentInterface } from \"../interfaces/segment.js\";\nimport { BaseModel } from \"./base_model.js\";\nimport type { TranslationStatus } from \"./translation_status.js\";\n\nexport class Segment extends BaseModel implements SegmentInterface {\n\tdeclare segment_number: number;\n\tdeclare language_iso: string;\n\tdeclare modified_at: string;\n\tdeclare modified_at_timestamp: number;\n\tdeclare modified_by: number;\n\tdeclare modified_by_email: string;\n\tdeclare value: string;\n\tdeclare is_fuzzy: boolean;\n\tdeclare is_reviewed: boolean;\n\tdeclare reviewed_by: number;\n\tdeclare words: number;\n\tdeclare custom_translation_statuses: TranslationStatus[];\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport { Segment } from \"../models/segment.js\";\nimport type {\n\tGetSegmentParams,\n\tListSegmentParams,\n\tUpdateSegmentBodyParams,\n\tUpdateSegmentReqParams,\n} from \"../types/segments.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Segments extends BaseCollection {\n\tprotected static override prefixURI =\n\t\t\"projects/{!:project_id}/keys/{!:key_id}/segments/{!:language_iso}/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Segment {\n\t\treturn Segment;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"segments\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"segment\";\n\t}\n\n\tlist(request_params: ListSegmentParams): Promise {\n\t\treturn this.doList(request_params) as Promise;\n\t}\n\n\tget(\n\t\tsegment_number: string | number,\n\t\trequest_params: GetSegmentParams,\n\t): Promise {\n\t\treturn this.doGet(segment_number, request_params);\n\t}\n\n\tupdate(\n\t\tsegment_number: string | number,\n\t\tsegment_params: UpdateSegmentBodyParams,\n\t\trequest_params: UpdateSegmentReqParams,\n\t): Promise {\n\t\treturn this.doUpdate(segment_number, segment_params, request_params);\n\t}\n}\n","import type { Snapshot as SnapshotInterface } from \"../interfaces/snapshot.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Snapshot extends BaseModel implements SnapshotInterface {\n\tdeclare snapshot_id: number;\n\tdeclare title: string;\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n\tdeclare created_by: number;\n\tdeclare created_by_email: string;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport type { Project } from \"../models/project.js\";\nimport { Snapshot } from \"../models/snapshot.js\";\nimport type {\n\tProjectOnly,\n\tProjectWithPagination,\n} from \"../types/common_get_params.js\";\nimport type {\n\tCreateSnapshotParams,\n\tSnapshotDeleted,\n} from \"../types/snapshots.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Snapshots extends BaseCollection {\n\tprotected static override prefixURI =\n\t\t\"projects/{!:project_id}/snapshots/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Snapshot {\n\t\treturn Snapshot;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"snapshots\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"snapshot\";\n\t}\n\n\tlist(\n\t\trequest_params: ProjectWithPagination,\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tcreate(\n\t\tsnapshot_params: CreateSnapshotParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doCreate(\n\t\t\tsnapshot_params,\n\t\t\trequest_params,\n\t\t\tthis.populateObjectFromJsonRoot,\n\t\t);\n\t}\n\n\trestore(\n\t\tsnapshot_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\tconst params = {\n\t\t\t...request_params,\n\t\t\t...{ id: snapshot_id },\n\t\t};\n\n\t\treturn this.createPromise(\"POST\", params, this.returnBareJSON, {});\n\t}\n\n\tdelete(\n\t\tsnapshot_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doDelete(snapshot_id, request_params);\n\t}\n}\n","import type { Task as TaskInterface } from \"../interfaces/task.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Task extends BaseModel implements TaskInterface {\n\tdeclare task_id: number;\n\tdeclare title: string;\n\tdeclare description: string;\n\tdeclare status: string;\n\tdeclare progress: number;\n\tdeclare due_date: string;\n\tdeclare due_date_timestamp: number;\n\tdeclare keys_count: number;\n\tdeclare words_count: number;\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n\tdeclare created_by: number;\n\tdeclare created_by_email: string;\n\tdeclare can_be_parent: boolean;\n\tdeclare task_type: string;\n\tdeclare parent_task_id: number;\n\tdeclare closing_tags: string[];\n\tdeclare do_lock_translations: boolean;\n\tdeclare languages: Array<{\n\t\tlanguage_iso: string;\n\t\tusers: Array<{\n\t\t\tuser_id: string | number;\n\t\t\temail: string;\n\t\t\tfullname: string;\n\t\t}>;\n\t\tgroups: Array<{\n\t\t\tid: string | number;\n\t\t\tname: string;\n\t\t}>;\n\t\tkeys: string[] | number[];\n\t\tstatus: string;\n\t\tprogress: number;\n\t\tinitial_tm_leverage: {\n\t\t\t\"0%+\": number;\n\t\t\t\"60%+\": number;\n\t\t\t\"75%+\": number;\n\t\t\t\"95%+\": number;\n\t\t\t\"100%\": number;\n\t\t};\n\t\ttm_leverage: {\n\t\t\tstatus: string;\n\t\t\tvalue: {\n\t\t\t\t\"0%+\": number;\n\t\t\t\t\"50%+\": number;\n\t\t\t\t\"75%+\": number;\n\t\t\t\t\"85%+\": number;\n\t\t\t\t\"95%+\": number;\n\t\t\t\t\"100%\": number;\n\t\t\t};\n\t\t};\n\t\tkeys_count: number;\n\t\twords_count: number;\n\t\tcompleted_at: string;\n\t\tcompleted_at_timestamp: number;\n\t\tcompleted_by: number;\n\t\tcompleted_by_email: string;\n\t}>;\n\tdeclare source_language_iso: string;\n\tdeclare auto_close_languages: boolean;\n\tdeclare auto_close_task: boolean;\n\tdeclare auto_close_items: boolean;\n\tdeclare completed_at: string;\n\tdeclare completed_at_timestamp: number;\n\tdeclare completed_by: number;\n\tdeclare completed_by_email: string;\n\tdeclare custom_translation_status_ids: number[];\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { Task } from \"../models/task.js\";\nimport type { ProjectOnly } from \"../types/common_get_params.js\";\nimport type {\n\tCreateTaskParams,\n\tListTaskParams,\n\tTaskDeleted,\n\tUpdateTaskParams,\n} from \"../types/tasks.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Tasks extends BaseCollection {\n\tprotected static override prefixURI = \"projects/{!:project_id}/tasks/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Task {\n\t\treturn Task;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"tasks\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"task\";\n\t}\n\n\tlist(request_params: ListTaskParams): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tcreate(\n\t\ttask_params: CreateTaskParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doCreate(\n\t\t\ttask_params,\n\t\t\trequest_params,\n\t\t\tthis.populateObjectFromJsonRoot,\n\t\t);\n\t}\n\n\tget(task_id: string | number, request_params: ProjectOnly): Promise {\n\t\treturn this.doGet(task_id, request_params);\n\t}\n\n\tupdate(\n\t\ttask_id: string | number,\n\t\ttask_params: UpdateTaskParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doUpdate(task_id, task_params, request_params);\n\t}\n\n\tdelete(\n\t\ttask_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doDelete(task_id, request_params);\n\t}\n}\n","import type { TeamUserBillingDetails as TeamUserBillingDetailsInterface } from \"../interfaces/team_user_billing_details.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class TeamUserBillingDetails\n\textends BaseModel\n\timplements TeamUserBillingDetailsInterface\n{\n\tdeclare billing_email: string;\n\tdeclare country_code: string;\n\tdeclare zip: string;\n\tdeclare state_code: string;\n\tdeclare address1: string;\n\tdeclare address2: string;\n\tdeclare city: string;\n\tdeclare phone: string;\n\tdeclare company: string;\n\tdeclare vatnumber: string;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport { TeamUserBillingDetails as BillingDetailsModel } from \"../models/team_user_billing_details.js\";\nimport type { BillingDetailsParams } from \"../types/billing_details.js\";\nimport type { TeamOnly } from \"../types/common_get_params.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class TeamUserBillingDetails extends BaseCollection {\n\tprotected static override prefixURI = \"teams/{!:team_id}/billing_details\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => BillingDetailsModel {\n\t\treturn BillingDetailsModel;\n\t}\n\n\tget(team_id: string | number): Promise {\n\t\tconst params = { team_id: team_id };\n\t\treturn this.createPromise(\"GET\", params, this.populateObjectFromJson, null);\n\t}\n\n\tcreate(\n\t\tbilling_details_params: BillingDetailsParams,\n\t\trequest_params: TeamOnly,\n\t): Promise {\n\t\treturn this.doCreate(billing_details_params, request_params);\n\t}\n\n\tupdate(\n\t\tteam_id: string | number,\n\t\tbilling_details_params: BillingDetailsParams,\n\t): Promise {\n\t\tconst params = { team_id: team_id };\n\t\treturn this.createPromise(\n\t\t\t\"PUT\",\n\t\t\tparams,\n\t\t\tthis.populateObjectFromJson,\n\t\t\tbilling_details_params,\n\t\t);\n\t}\n}\n","import type { TeamUser as TeamUserInterface } from \"../interfaces/team_user.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class TeamUser extends BaseModel implements TeamUserInterface {\n\tdeclare user_id: number;\n\tdeclare email: string;\n\tdeclare fullname: string;\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n\tdeclare role: string;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { TeamUser } from \"../models/team_user.js\";\nimport type { TeamOnly } from \"../types/common_get_params.js\";\nimport type { TeamUserDeleted, TeamUserParams } from \"../types/team_users.js\";\nimport type { TeamWithPagination } from \"../types/teams.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class TeamUsers extends BaseCollection {\n\tprotected static override prefixURI = \"teams/{!:team_id}/users/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => TeamUser {\n\t\treturn TeamUser;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"team_users\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"team_user\";\n\t}\n\n\tlist(request_params: TeamWithPagination): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tget(\n\t\tteam_user_id: string | number,\n\t\trequest_params: TeamOnly,\n\t): Promise {\n\t\treturn this.doGet(team_user_id, request_params);\n\t}\n\n\tupdate(\n\t\tteam_user_id: string | number,\n\t\tteam_user_params: TeamUserParams,\n\t\trequest_params: TeamOnly,\n\t): Promise {\n\t\treturn this.doUpdate(team_user_id, team_user_params, request_params);\n\t}\n\n\tdelete(\n\t\tteam_user_id: string | number,\n\t\trequest_params: TeamOnly,\n\t): Promise {\n\t\treturn this.doDelete(team_user_id, request_params);\n\t}\n}\n","import type { Team as TeamInterface } from \"../interfaces/team.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Team extends BaseModel implements TeamInterface {\n\tdeclare team_id: number;\n\tdeclare name: string;\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n\tdeclare plan: string;\n\tdeclare quota_usage: {\n\t\tusers: number;\n\t\tkeys: number;\n\t\tprojects: number;\n\t\tmau: number;\n\t\tai_words: number;\n\t};\n\tdeclare quota_allowed: {\n\t\tusers: number;\n\t\tkeys: number;\n\t\tprojects: number;\n\t\tmau: number;\n\t\tai_words: number;\n\t};\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { Team } from \"../models/team.js\";\nimport type { PaginationParams } from \"../types/common_get_params.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Teams extends BaseCollection {\n\tprotected static override prefixURI = \"teams\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Team {\n\t\treturn Team;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"teams\";\n\t}\n\n\tlist(request_params: PaginationParams = {}): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n}\n","import type { TranslationProvider as TranslationProviderInterface } from \"../interfaces/translation_provider.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class TranslationProvider\n\textends BaseModel\n\timplements TranslationProviderInterface\n{\n\tdeclare provider_id: number;\n\tdeclare name: string;\n\tdeclare slug: string;\n\tdeclare price_pair_min: number;\n\tdeclare website_url: string;\n\tdeclare description: string;\n\tdeclare tiers: Array<{\n\t\ttier_id: number;\n\t\ttitle: string;\n\t}>;\n\tdeclare pairs: Array<{\n\t\ttier_id: number;\n\t\tfrom_lang_iso: string;\n\t\tfrom_lang_name: string;\n\t\tto_lang_iso: string;\n\t\tto_lang_name: string;\n\t\tprice_per_word: number;\n\t}>;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { TranslationProvider } from \"../models/translation_provider.js\";\nimport type { TeamOnly } from \"../types/common_get_params.js\";\nimport type { TeamWithPagination } from \"../types/teams.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class TranslationProviders extends BaseCollection {\n\tprotected static override prefixURI =\n\t\t\"teams/{!:team_id}/translation_providers/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => TranslationProvider {\n\t\treturn TranslationProvider;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"translation_providers\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn null;\n\t}\n\n\tlist(\n\t\trequest_params: TeamWithPagination,\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise<\n\t\t\tPaginatedResult\n\t\t>;\n\t}\n\n\tget(\n\t\tprovider_id: string | number,\n\t\trequest_params: TeamOnly,\n\t): Promise {\n\t\treturn this.doGet(provider_id, request_params);\n\t}\n}\n","import type { TranslationStatus as TranslationStatusInterface } from \"../interfaces/translation_status.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class TranslationStatus\n\textends BaseModel\n\timplements TranslationStatusInterface\n{\n\tdeclare status_id: number;\n\tdeclare title: string;\n\tdeclare color: string;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { TranslationStatus } from \"../models/translation_status.js\";\nimport type {\n\tProjectOnly,\n\tProjectWithPagination,\n} from \"../types/common_get_params.js\";\nimport type {\n\tCreateTranslationStatusParams,\n\tTranslationStatusColors,\n\tTranslationStatusDeleted,\n\tUpdateTranslationStatusParams,\n} from \"../types/translation_statuses.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class TranslationStatuses extends BaseCollection {\n\tprotected static override prefixURI =\n\t\t\"projects/{!:project_id}/custom_translation_statuses/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => TranslationStatus {\n\t\treturn TranslationStatus;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"custom_translation_statuses\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"custom_translation_status\";\n\t}\n\n\tlist(\n\t\trequest_params: ProjectWithPagination,\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise<\n\t\t\tPaginatedResult\n\t\t>;\n\t}\n\n\tcreate(\n\t\ttranslation_status_params: CreateTranslationStatusParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doCreate(\n\t\t\ttranslation_status_params,\n\t\t\trequest_params,\n\t\t\tthis.populateObjectFromJsonRoot,\n\t\t);\n\t}\n\n\tget(\n\t\ttranslation_status_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doGet(translation_status_id, request_params);\n\t}\n\n\tupdate(\n\t\ttranslation_status_id: string | number,\n\t\ttranslation_status_params: UpdateTranslationStatusParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doUpdate(\n\t\t\ttranslation_status_id,\n\t\t\ttranslation_status_params,\n\t\t\trequest_params,\n\t\t);\n\t}\n\n\tdelete(\n\t\ttranslation_status_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doDelete(translation_status_id, request_params);\n\t}\n\n\tavailable_colors(\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.createPromise(\n\t\t\t\"GET\",\n\t\t\trequest_params,\n\t\t\tthis.returnBareJSON,\n\t\t\t{},\n\t\t\t\"projects/{!:project_id}/custom_translation_statuses/colors\",\n\t\t);\n\t}\n}\n","import type { Translation as TranslationInterface } from \"../interfaces/translation.js\";\nimport type { TranslationStatus } from \"../interfaces/translation_status.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Translation extends BaseModel implements TranslationInterface {\n\tdeclare translation_id: number;\n\tdeclare key_id: number;\n\tdeclare language_iso: string;\n\tdeclare modified_at: string;\n\tdeclare modified_at_timestamp: number;\n\tdeclare modified_by: number;\n\tdeclare modified_by_email: string;\n\tdeclare translation: string;\n\tdeclare is_unverified: boolean;\n\tdeclare is_reviewed: boolean;\n\tdeclare reviewed_by: number;\n\tdeclare is_fuzzy: boolean;\n\tdeclare words: number;\n\tdeclare custom_translation_statuses: TranslationStatus[];\n\tdeclare task_id: number;\n\tdeclare segment_number: number;\n}\n","import type { CursorPaginatedResult } from \"../interfaces/cursor_paginated_result.js\";\nimport type { Keyable } from \"../interfaces/keyable.js\";\nimport { Translation } from \"../models/translation.js\";\nimport type { ProjectOnly } from \"../types/common_get_params.js\";\nimport type {\n\tGetTranslationParams,\n\tListTranslationParams,\n\tUpdateTranslationParams,\n} from \"../types/translations.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Translations extends BaseCollection {\n\tprotected static override prefixURI =\n\t\t\"projects/{!:project_id}/translations/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Translation {\n\t\treturn Translation;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"translations\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"translation\";\n\t}\n\n\tlist(\n\t\trequest_params: ListTranslationParams,\n\t): Promise> {\n\t\treturn this.doListCursor(request_params);\n\t}\n\n\tget(\n\t\ttranslation_id: string | number,\n\t\trequest_params: GetTranslationParams,\n\t): Promise {\n\t\treturn this.doGet(translation_id, request_params);\n\t}\n\n\tupdate(\n\t\ttranslation_id: string | number,\n\t\ttranslation_params: UpdateTranslationParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doUpdate(translation_id, translation_params, request_params);\n\t}\n}\n","import type { UserGroup as UserGroupInterface } from \"../interfaces/user_group.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class UserGroup extends BaseModel implements UserGroupInterface {\n\tdeclare group_id: number;\n\tdeclare name: string;\n\tdeclare permissions: {\n\t\tis_admin: boolean; // deprecated\n\t\tis_reviewer: boolean; // deprecated\n\t\tadmin_rights: string[];\n\t\tlanguages: Array<{\n\t\t\tlang_id: number;\n\t\t\tlang_iso: string;\n\t\t\tlang_name: string;\n\t\t\tis_writable: boolean;\n\t\t}>;\n\t};\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n\tdeclare team_id: number;\n\tdeclare projects: string[] | number[];\n\tdeclare members: number[] | string[];\n\tdeclare role_id: number | null;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { UserGroup } from \"../models/user_group.js\";\nimport type { TeamOnly } from \"../types/common_get_params.js\";\nimport type { TeamWithPagination } from \"../types/teams.js\";\nimport type {\n\tUserGroupDeleted,\n\tUserGroupParams,\n} from \"../types/user_groups.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class UserGroups extends BaseCollection {\n\tprotected static override prefixURI = \"teams/{!:team_id}/groups/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => UserGroup {\n\t\treturn UserGroup;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"user_groups\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn null;\n\t}\n\n\tlist(\n\t\trequest_params: TeamWithPagination,\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tcreate(\n\t\tuser_group_params: UserGroupParams,\n\t\trequest_params: TeamOnly,\n\t): Promise {\n\t\treturn this.doCreate(\n\t\t\tuser_group_params,\n\t\t\trequest_params,\n\t\t\tthis.populateGroupFromJsonRoot,\n\t\t);\n\t}\n\n\tget(\n\t\tuser_group_id: string | number,\n\t\trequest_params: TeamOnly,\n\t): Promise {\n\t\treturn this.doGet(user_group_id, request_params);\n\t}\n\n\tupdate(\n\t\tuser_group_id: string | number,\n\t\tuser_group_params: UserGroupParams,\n\t\trequest_params: TeamOnly,\n\t): Promise {\n\t\treturn this.doUpdate(\n\t\t\tuser_group_id,\n\t\t\tuser_group_params,\n\t\t\trequest_params,\n\t\t\tthis.populateGroupFromJsonRoot,\n\t\t);\n\t}\n\n\tdelete(\n\t\tuser_group_id: string | number,\n\t\trequest_params: TeamOnly,\n\t): Promise {\n\t\treturn this.doDelete(user_group_id, request_params);\n\t}\n\n\tadd_members_to_group(\n\t\tteam_id: string | number,\n\t\tgroup_id: string | number,\n\t\tuser_ids: string[] | number[],\n\t): Promise {\n\t\tconst params = {\n\t\t\tteam_id: team_id,\n\t\t\tgroup_id: group_id,\n\t\t};\n\t\tconst body = { users: user_ids };\n\t\treturn this.createPromise(\n\t\t\t\"PUT\",\n\t\t\tparams,\n\t\t\tthis.populateGroupFromJsonRoot,\n\t\t\tbody,\n\t\t\t\"teams/{!:team_id}/groups/{!:group_id}/members/add\",\n\t\t);\n\t}\n\n\tremove_members_from_group(\n\t\tteam_id: string | number,\n\t\tgroup_id: string | number,\n\t\tuser_ids: string[] | number[],\n\t): Promise {\n\t\tconst params = {\n\t\t\tteam_id: team_id,\n\t\t\tgroup_id: group_id,\n\t\t};\n\t\tconst body = { users: user_ids };\n\t\treturn this.createPromise(\n\t\t\t\"PUT\",\n\t\t\tparams,\n\t\t\tthis.populateGroupFromJsonRoot,\n\t\t\tbody,\n\t\t\t\"teams/{!:team_id}/groups/{!:group_id}/members/remove\",\n\t\t);\n\t}\n\n\tadd_projects_to_group(\n\t\tteam_id: string | number,\n\t\tgroup_id: string | number,\n\t\tproject_ids: string[] | number[],\n\t): Promise {\n\t\tconst params = {\n\t\t\tteam_id: team_id,\n\t\t\tgroup_id: group_id,\n\t\t};\n\t\tconst body = { projects: project_ids };\n\t\treturn this.createPromise(\n\t\t\t\"PUT\",\n\t\t\tparams,\n\t\t\tthis.populateGroupFromJsonRoot,\n\t\t\tbody,\n\t\t\t\"teams/{!:team_id}/groups/{!:group_id}/projects/add\",\n\t\t);\n\t}\n\n\tremove_projects_from_group(\n\t\tteam_id: string | number,\n\t\tgroup_id: string | number,\n\t\tproject_ids: string[] | number[],\n\t): Promise {\n\t\tconst params = {\n\t\t\tteam_id: team_id,\n\t\t\tgroup_id: group_id,\n\t\t};\n\t\tconst body = { projects: project_ids };\n\t\treturn this.createPromise(\n\t\t\t\"PUT\",\n\t\t\tparams,\n\t\t\tthis.populateGroupFromJsonRoot,\n\t\t\tbody,\n\t\t\t\"teams/{!:team_id}/groups/{!:group_id}/projects/remove\",\n\t\t);\n\t}\n\n\tprotected populateGroupFromJsonRoot(\n\t\tjson: Keyable,\n\t\theaders: Headers,\n\t): UserGroup {\n\t\tconst formatted_json = json.group;\n\t\treturn this.populateObjectFromJson(formatted_json, headers);\n\t}\n}\n","import type { Webhook as WebhookInterface } from \"../interfaces/webhook.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Webhook extends BaseModel implements WebhookInterface {\n\tdeclare webhook_id: string;\n\tdeclare branch: string;\n\tdeclare url: string;\n\tdeclare secret: string;\n\tdeclare events: string[];\n\tdeclare event_lang_map: Array<{\n\t\tevent: string;\n\t\tlang_iso_codes: string[];\n\t}>;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { Webhook } from \"../models/webhook.js\";\nimport type {\n\tProjectOnly,\n\tProjectWithPagination,\n} from \"../types/common_get_params.js\";\nimport type {\n\tCreateWebhookParams,\n\tUpdateWebhookParams,\n\tWebhookDeleted,\n\tWebhookRegenerated,\n} from \"../types/webhooks.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Webhooks extends BaseCollection {\n\tprotected static override prefixURI =\n\t\t\"projects/{!:project_id}/webhooks/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Webhook {\n\t\treturn Webhook;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"webhooks\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"webhook\";\n\t}\n\n\tlist(\n\t\trequest_params: ProjectWithPagination,\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tcreate(\n\t\twebhook_params: CreateWebhookParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doCreate(\n\t\t\twebhook_params,\n\t\t\trequest_params,\n\t\t\tthis.populateObjectFromJsonRoot,\n\t\t);\n\t}\n\n\tget(\n\t\twebhook_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doGet(webhook_id, request_params);\n\t}\n\n\tupdate(\n\t\twebhook_id: string | number,\n\t\twebhook_params: UpdateWebhookParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doUpdate(webhook_id, webhook_params, request_params);\n\t}\n\n\tdelete(\n\t\twebhook_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doDelete(webhook_id, request_params);\n\t}\n\n\tregenerate_secret(\n\t\twebhook_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\tconst params = {\n\t\t\t...request_params,\n\t\t\t...{ id: webhook_id },\n\t\t};\n\t\treturn this.createPromise(\n\t\t\t\"PATCH\",\n\t\t\tparams,\n\t\t\tthis.returnBareJSON,\n\t\t\tnull,\n\t\t\t\"projects/{!:project_id}/webhooks/{:id}/secret/regenerate\",\n\t\t);\n\t}\n}\n","import type { ClientData } from \"../interfaces/client_data.js\";\nimport type { ClientParams } from \"../interfaces/client_params.js\";\n/**\n * A foundational client class that establishes authentication and configuration data.\n * Other specialized clients can inherit from this class to leverage the configured\n * authentication, compression, host, and timeout settings.\n */\nexport class BaseClient {\n\t/**\n\t * Internal client data including token, token type, host, compression, and timeouts.\n\t */\n\treadonly clientData: ClientData = {\n\t\ttoken: \"\",\n\t\ttokenType: \"\",\n\t\tauthHeader: \"x-api-token\",\n\t\tenableCompression: false,\n\t\trequestTimeout: undefined,\n\t};\n\n\t/**\n\t * Constructs a new BaseClient instance.\n\t * @param params - Configuration parameters including API key and optional features.\n\t * @throws Error if the API key is not provided or is empty.\n\t */\n\tconstructor(params: ClientParams) {\n\t\tconst { apiKey } = params;\n\t\tif (!apiKey || apiKey.trim().length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Instantiation failed: A non-empty API key or JWT must be provided.\",\n\t\t\t);\n\t\t}\n\n\t\tthis.clientData.token = apiKey;\n\t\tthis.clientData.enableCompression = params.enableCompression ?? false;\n\t\tthis.clientData.tokenType = params.tokenType ?? \"\";\n\t\tthis.clientData.host = params.host;\n\t\tthis.clientData.requestTimeout = params.requestTimeout;\n\t}\n}\n","import {\n\tBranches,\n\tComments,\n\tContributors,\n\tFiles,\n\tJwt,\n\tKeys,\n\tLanguages,\n\tOrders,\n\tPaymentCards,\n\tPermissionTemplates,\n\tProjects,\n\tQueuedProcesses,\n\tScreenshots,\n\tSegments,\n\tSnapshots,\n\tTasks,\n\tTeamUserBillingDetails,\n\tTeamUsers,\n\tTeams,\n\tTranslationProviders,\n\tTranslationStatuses,\n\tTranslations,\n\tUserGroups,\n\tWebhooks,\n} from \"../collections/index.js\";\n\nimport type { ClientParams } from \"../interfaces/client_params.js\";\nimport { BaseClient } from \"./base_client.js\";\n\n/**\n * A main entry point for interacting with the Lokalise API.\n * Provides easy access to various resource collections (Branches, Comments, Projects, etc.)\n * through dedicated methods.\n */\nexport class LokaliseApi extends BaseClient {\n\t/**\n\t * Creates a new instance of the LokaliseApi client.\n\t * @param params - Configuration parameters including `apiKey` and optional `version`, `host`, etc.\n\t */\n\tconstructor(params: ClientParams) {\n\t\tsuper(params);\n\n\t\t// Default to \"api2\" version if not explicitly provided\n\t\tthis.clientData.version = params.version ?? \"api2\";\n\t\tthis.clientData.authHeader = params.header ?? this.clientData.authHeader;\n\t}\n\n\t/**\n\t * Access Branch-related endpoints.\n\t */\n\tbranches(): Branches {\n\t\treturn new Branches(this.clientData);\n\t}\n\n\t/**\n\t * Access Comment-related endpoints.\n\t */\n\tcomments(): Comments {\n\t\treturn new Comments(this.clientData);\n\t}\n\n\t/**\n\t * Access Contributor-related endpoints.\n\t */\n\tcontributors(): Contributors {\n\t\treturn new Contributors(this.clientData);\n\t}\n\n\t/**\n\t * Access File-related endpoints.\n\t */\n\tfiles(): Files {\n\t\treturn new Files(this.clientData);\n\t}\n\n\t/**\n\t * Access JWT-related endpoints.\n\t */\n\tjwt(): Jwt {\n\t\treturn new Jwt(this.clientData);\n\t}\n\n\t/**\n\t * Access Key-related endpoints.\n\t */\n\tkeys(): Keys {\n\t\treturn new Keys(this.clientData);\n\t}\n\n\t/**\n\t * Access Language-related endpoints.\n\t */\n\tlanguages(): Languages {\n\t\treturn new Languages(this.clientData);\n\t}\n\n\t/**\n\t * Access Order-related endpoints.\n\t */\n\torders(): Orders {\n\t\treturn new Orders(this.clientData);\n\t}\n\n\t/**\n\t * Access Payment Card-related endpoints.\n\t */\n\tpaymentCards(): PaymentCards {\n\t\treturn new PaymentCards(this.clientData);\n\t}\n\n\t/**\n\t * Access Permission Template-related endpoints.\n\t */\n\tpermissionTemplates(): PermissionTemplates {\n\t\treturn new PermissionTemplates(this.clientData);\n\t}\n\n\t/**\n\t * Access Project-related endpoints.\n\t */\n\tprojects(): Projects {\n\t\treturn new Projects(this.clientData);\n\t}\n\n\t/**\n\t * Access Queued Process-related endpoints.\n\t */\n\tqueuedProcesses(): QueuedProcesses {\n\t\treturn new QueuedProcesses(this.clientData);\n\t}\n\n\t/**\n\t * Access Screenshot-related endpoints.\n\t */\n\tscreenshots(): Screenshots {\n\t\treturn new Screenshots(this.clientData);\n\t}\n\n\t/**\n\t * Access Segment-related endpoints.\n\t */\n\tsegments(): Segments {\n\t\treturn new Segments(this.clientData);\n\t}\n\n\t/**\n\t * Access Snapshot-related endpoints.\n\t */\n\tsnapshots(): Snapshots {\n\t\treturn new Snapshots(this.clientData);\n\t}\n\n\t/**\n\t * Access Task-related endpoints.\n\t */\n\ttasks(): Tasks {\n\t\treturn new Tasks(this.clientData);\n\t}\n\n\t/**\n\t * Access Team-related endpoints.\n\t */\n\tteams(): Teams {\n\t\treturn new Teams(this.clientData);\n\t}\n\n\t/**\n\t * Access Team User-related endpoints.\n\t */\n\tteamUsers(): TeamUsers {\n\t\treturn new TeamUsers(this.clientData);\n\t}\n\n\t/**\n\t * Access Team User Billing Detail-related endpoints.\n\t */\n\tteamUserBillingDetails(): TeamUserBillingDetails {\n\t\treturn new TeamUserBillingDetails(this.clientData);\n\t}\n\n\t/**\n\t * Access Translation-related endpoints.\n\t */\n\ttranslations(): Translations {\n\t\treturn new Translations(this.clientData);\n\t}\n\n\t/**\n\t * Access Translation Provider-related endpoints.\n\t */\n\ttranslationProviders(): TranslationProviders {\n\t\treturn new TranslationProviders(this.clientData);\n\t}\n\n\t/**\n\t * Access Translation Status-related endpoints.\n\t */\n\ttranslationStatuses(): TranslationStatuses {\n\t\treturn new TranslationStatuses(this.clientData);\n\t}\n\n\t/**\n\t * Access User Group-related endpoints.\n\t */\n\tuserGroups(): UserGroups {\n\t\treturn new UserGroups(this.clientData);\n\t}\n\n\t/**\n\t * Access Webhook-related endpoints.\n\t */\n\twebhooks(): Webhooks {\n\t\treturn new Webhooks(this.clientData);\n\t}\n}\n","import type { ClientParams } from \"../interfaces/client_params.js\";\nimport { LokaliseApi } from \"./lokalise_api.js\";\n\n/**\n * A specialized client for interacting with the Lokalise API using OAuth authentication.\n * Extends `LokaliseApi` and configures the token type and authorization header to use Bearer tokens.\n */\nexport class LokaliseApiOAuth extends LokaliseApi {\n\t/**\n\t * Constructs a new LokaliseApiOAuth client instance.\n\t * @param params - Configuration parameters including `apiKey` (OAuth token)\n\t * and optionally `tokenType` (defaults to \"Bearer\").\n\t * @throws Error If `apiKey` is missing or empty.\n\t */\n\tconstructor(params: ClientParams) {\n\t\tsuper(params);\n\n\t\t// Default to \"Bearer\" if tokenType not provided.\n\t\tthis.clientData.tokenType = params.tokenType ?? \"Bearer\";\n\n\t\t// For OAuth, the header should be `Authorization`.\n\t\tthis.clientData.authHeader = \"Authorization\";\n\t}\n}\n","import type { OtaBundle as OtaBundleInterface } from \"../../interfaces/ota/ota_bundle.js\";\nimport { BaseModel } from \"./../base_model.js\";\n\nexport class OtaBundle extends BaseModel implements OtaBundleInterface {\n\tdeclare id: number;\n\tdeclare projectId: string;\n\tdeclare isPrerelease: boolean;\n\tdeclare isProduction: boolean;\n\tdeclare createdAt: string;\n\tdeclare createdBy: string;\n\tdeclare framework: string;\n\tdeclare description: string;\n\tdeclare isFrozen: boolean;\n\tdeclare lokaliseId: number;\n\tdeclare fileId: string;\n\tdeclare fileUrl: string;\n\tdeclare modifiedAt: string;\n}\n","import { BaseCollection } from \"../collections/base_collection.js\";\nimport type { Keyable } from \"../interfaces/keyable.js\";\nimport type { HttpMethod } from \"../types/http_method.js\";\n\nexport abstract class OtaCollection<\n\tElementType,\n\tSecondaryType = ElementType,\n> extends BaseCollection {\n\tprotected override doDelete(\n\t\tid: string | number,\n\t\treq_params: Keyable,\n\t): Promise {\n\t\tconst params = { ...req_params, id };\n\t\treturn this.createPromise(\n\t\t\t\"DELETE\",\n\t\t\tparams,\n\t\t\tthis.returnJSONFromData,\n\t\t\tnull,\n\t\t) as Promise;\n\t}\n\n\tprotected returnJSONFromData(json: Keyable): Keyable | Array {\n\t\treturn json.data;\n\t}\n\n\tprotected async createVoidPromise(\n\t\tmethod: HttpMethod,\n\t\tparams: Keyable,\n\t\tbody: object | object[] | null,\n\t\turi: string | null = null,\n\t): Promise {\n\t\tawait this.prepareRequest(method, body, params, uri);\n\t\treturn null;\n\t}\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport { OtaBundle } from \"../models/ota/ota_bundle.js\";\nimport type {\n\tOtaBundleUpdateData,\n\tOtaResourceDeleted,\n\tOtaTeamProject,\n} from \"../types/ota.js\";\nimport { OtaCollection } from \"./ota_collection.js\";\n\nexport class OtaBundleManagement extends OtaCollection {\n\tprotected static override prefixURI =\n\t\t\"teams/{!:teamId}/projects/{!:lokaliseProjectId}/bundles/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => OtaBundle {\n\t\treturn OtaBundle;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"data\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"data\";\n\t}\n\n\tlist(request_params: OtaTeamProject): Promise {\n\t\treturn this.doList(request_params) as Promise;\n\t}\n\n\tget(\n\t\tbundleId: string | number,\n\t\trequestParams: OtaTeamProject,\n\t): Promise {\n\t\treturn this.doGet(bundleId, requestParams);\n\t}\n\n\tupdate(\n\t\tbundleId: string | number,\n\t\tbundleParams: OtaBundleUpdateData,\n\t\trequestParams: OtaTeamProject,\n\t): Promise {\n\t\treturn this.doUpdate(\n\t\t\tbundleId,\n\t\t\tbundleParams,\n\t\t\trequestParams,\n\t\t\tthis.populateObjectFromJsonRoot,\n\t\t\t\"PATCH\",\n\t\t);\n\t}\n\n\tdelete(\n\t\tbundleId: string | number,\n\t\trequestParams: OtaTeamProject,\n\t): Promise {\n\t\treturn this.doDelete(bundleId, requestParams);\n\t}\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport { Branch } from \"../models/branch.js\";\nimport type { OtaTeamProjectFramework } from \"../types/ota.js\";\nimport { OtaCollection } from \"./ota_collection.js\";\n\nexport class OtaBundlePublishing extends OtaCollection {\n\tprotected static override prefixURI =\n\t\t\"teams/{!:teamId}/projects/{!:lokaliseProjectId}/frameworks/{!:framework}/{!:action}\";\n\n\t// This is just a dummy implementation to keep linter happy\n\t// It's not used in this class\n\t// istanbul ignore next\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Branch {\n\t\t// istanbul ignore next\n\t\treturn Branch;\n\t}\n\n\tpublish(\n\t\tbundleId: number | string,\n\t\trequest_params: OtaTeamProjectFramework,\n\t): Promise {\n\t\tconst params = {\n\t\t\t...request_params,\n\t\t\t...{ action: \"publish\" },\n\t\t};\n\t\treturn this.createVoidPromise(\"POST\", params, {\n\t\t\tbundleId,\n\t\t});\n\t}\n\n\tstage(\n\t\tbundleId: number | string,\n\t\trequest_params: OtaTeamProjectFramework,\n\t): Promise {\n\t\tconst params = {\n\t\t\t...request_params,\n\t\t\t...{ action: \"stage\" },\n\t\t};\n\t\treturn this.createVoidPromise(\"POST\", params, {\n\t\t\tbundleId,\n\t\t});\n\t}\n}\n","import type { OtaBundleArchive as OtaBundleArchiveInterface } from \"../../interfaces/ota/ota_bundle_archive.js\";\nimport { BaseModel } from \"./../base_model.js\";\n\nexport class OtaBundleArchive\n\textends BaseModel\n\timplements OtaBundleArchiveInterface\n{\n\tdeclare url: string;\n\tdeclare version: number;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport { OtaBundleArchive } from \"../models/ota/ota_bundle_archive.js\";\nimport type {\n\tOtaProjectFramework,\n\tOtaRequestBundleParams,\n} from \"../types/ota.js\";\nimport { OtaCollection } from \"./ota_collection.js\";\n\nexport class OtaBundles extends OtaCollection {\n\tprotected static rootElementNameSingular = \"data\";\n\tprotected static override prefixURI =\n\t\t\"lokalise/projects/{!:lokaliseProjectId}/frameworks/{!:framework}\";\n\tprotected static elementClass = OtaBundleArchive;\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => OtaBundleArchive {\n\t\treturn OtaBundleArchive;\n\t}\n\n\tprotected override get rootElementNameSingular(): string {\n\t\treturn \"data\";\n\t}\n\n\tget(\n\t\tbundle_params: OtaRequestBundleParams,\n\t\trequest_params: OtaProjectFramework,\n\t): Promise {\n\t\tconst params = {\n\t\t\t...request_params,\n\t\t\t...bundle_params,\n\t\t};\n\n\t\treturn this.createPromise(\n\t\t\t\"GET\",\n\t\t\tparams,\n\t\t\tthis.populateObjectFromJsonRoot,\n\t\t\tnull,\n\t\t);\n\t}\n}\n","import type { OtaFreezePeriod as OtaFreezePeriodInterface } from \"../../interfaces/ota/ota_freeze_period.js\";\nimport { BaseModel } from \"./../base_model.js\";\n\nexport class OtaFreezePeriod\n\textends BaseModel\n\timplements OtaFreezePeriodInterface\n{\n\tdeclare id: number;\n\tdeclare projectId: number;\n\tdeclare bundleId: number;\n\tdeclare framework: string;\n\tdeclare from: string;\n\tdeclare to: string;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport { OtaFreezePeriod } from \"../models/ota/ota_freeze_period.js\";\nimport type {\n\tOtaFreezePeriodParams,\n\tOtaResourceDeleted,\n\tOtaTeamProject,\n\tOtaTeamProjectFramework,\n} from \"../types/ota.js\";\nimport { OtaCollection } from \"./ota_collection.js\";\n\nexport class OtaFreezePeriods extends OtaCollection {\n\tprotected static override prefixURI =\n\t\t\"teams/{!:teamId}/projects/{!:lokaliseProjectId}/bundle-freezes/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => OtaFreezePeriod {\n\t\treturn OtaFreezePeriod;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"data\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"data\";\n\t}\n\n\tlist(requestParams: OtaTeamProjectFramework): Promise {\n\t\treturn this.doList(requestParams) as Promise;\n\t}\n\n\tcreate(\n\t\tfreezeParams: OtaFreezePeriodParams,\n\t\trequestParams: OtaTeamProject,\n\t): Promise {\n\t\treturn this.doCreate(\n\t\t\tfreezeParams,\n\t\t\trequestParams,\n\t\t\tthis.populateObjectFromJsonRoot,\n\t\t);\n\t}\n\n\tupdate(\n\t\tfreezeId: string | number,\n\t\tfreezeParams: OtaFreezePeriodParams,\n\t\trequestParams: OtaTeamProject,\n\t): Promise {\n\t\treturn this.doUpdate(freezeId, freezeParams, requestParams);\n\t}\n\n\tdelete(\n\t\tfreezeId: string | number,\n\t\trequestParams: OtaTeamProject,\n\t): Promise {\n\t\treturn this.doDelete(freezeId, requestParams);\n\t}\n}\n","import type { OtaSdkToken as OtaSdkTokenInterface } from \"../../interfaces/ota/ota_sdk_token.js\";\nimport { BaseModel } from \"./../base_model.js\";\n\nexport class OtaSdkToken extends BaseModel implements OtaSdkTokenInterface {\n\tdeclare id: number;\n\tdeclare token: string;\n\tdeclare projectId: number;\n\tdeclare lokaliseId: number;\n\tdeclare createdAt: string;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport { OtaSdkToken } from \"../models/ota/ota_sdk_token.js\";\nimport type { OtaResourceDeleted, OtaTeamProject } from \"../types/ota.js\";\nimport { OtaCollection } from \"./ota_collection.js\";\n\nexport class OtaSdkTokens extends OtaCollection {\n\tprotected static override prefixURI =\n\t\t\"teams/{!:teamId}/projects/{!:lokaliseProjectId}/tokens/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => OtaSdkToken {\n\t\treturn OtaSdkToken;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"data\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"data\";\n\t}\n\n\tlist(request_params: OtaTeamProject): Promise {\n\t\treturn this.doList(request_params) as Promise;\n\t}\n\n\tcreate(request_params: OtaTeamProject): Promise {\n\t\treturn this.doCreate(null, request_params, this.populateObjectFromJsonRoot);\n\t}\n\n\tdelete(\n\t\ttokenId: string | number,\n\t\trequest_params: OtaTeamProject,\n\t): Promise {\n\t\treturn this.doDelete(tokenId, request_params);\n\t}\n}\n","import type { OtaStatistics as OtaStatisticsInterface } from \"../../interfaces/ota/ota_statistics.js\";\nimport { BaseModel } from \"./../base_model.js\";\n\nexport class OtaStatistics extends BaseModel implements OtaStatisticsInterface {\n\tdeclare lokaliseProjectId: string;\n\tdeclare from: string;\n\tdeclare to: string;\n\tdeclare sdk: string;\n\tdeclare daily: Array<{\n\t\tdate: string;\n\t\tdownloads: number;\n\t\ttrafficMb: number;\n\t\ttrafficBytes: string;\n\t\tframework: string;\n\t}>;\n\tdeclare monthly: Array<{\n\t\tdate: string;\n\t\tdownloads: number;\n\t\ttrafficMb: number;\n\t\ttrafficBytes: string;\n\t\tframework: string;\n\t}>;\n\tdeclare totals: {\n\t\tdownloads: number;\n\t\ttrafficMb: number;\n\t\ttrafficBytes: string;\n\t};\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport { OtaStatistics } from \"../models/ota/ota_statistics.js\";\nimport type { OtaTeamProject, OtaUsageParams } from \"../types/ota.js\";\nimport { OtaCollection } from \"./ota_collection.js\";\n\nexport class OtaUsageStatistics extends OtaCollection {\n\tprotected static override prefixURI =\n\t\t\"teams/{!:teamId}/projects/{!:lokaliseProjectId}/stats\";\n\tprotected static elementClass = OtaStatistics;\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => OtaStatistics {\n\t\treturn OtaStatistics;\n\t}\n\n\tget(\n\t\tbundle_params: OtaUsageParams,\n\t\trequest_params: OtaTeamProject,\n\t): Promise {\n\t\tconst params = {\n\t\t\t...request_params,\n\t\t\t...bundle_params,\n\t\t};\n\n\t\treturn this.createPromise(\"GET\", params, this.populateObjectFromJson, null);\n\t}\n}\n","import type { ClientParams } from \"../interfaces/client_params.js\";\nimport {\n\tOtaBundleManagement,\n\tOtaBundlePublishing,\n\tOtaFreezePeriods,\n\tOtaSdkTokens,\n\tOtaUsageStatistics,\n} from \"../ota_collections/index.js\";\nimport { BaseClient } from \"./base_client.js\";\n\n/**\n * A specialized client configured for interacting with Lokalise OTA endpoints.\n * Extends `BaseClient` and sets defaults suitable for OTA requests:\n * - `tokenType` defaults to \"Bearer\"\n * - `authHeader` set to \"Authorization\"\n * - `host` defaults to \"https://ota.lokalise.com\"\n * - `version` defaults to \"v3\"\n */\nexport class LokaliseApiOta extends BaseClient {\n\t/**\n\t * Creates a new LokaliseApiOta client instance.\n\t * @param params - Configuration parameters including `apiKey` and optional overrides for tokenType, host, version, etc.\n\t * @throws Error If `apiKey` is missing or empty.\n\t */\n\tconstructor(params: ClientParams) {\n\t\tsuper(params);\n\n\t\tthis.clientData.tokenType = params.tokenType ?? \"Bearer\";\n\t\tthis.clientData.authHeader = \"Authorization\";\n\t\tthis.clientData.host = this.clientData.host ?? \"https://ota.lokalise.com\";\n\t\tthis.clientData.version = params.version ?? \"v3\";\n\t}\n\n\t/**\n\t * Provides access to the OtaBundleManagement collection.\n\t */\n\totaBundleManagement(): OtaBundleManagement {\n\t\treturn new OtaBundleManagement(this.clientData);\n\t}\n\n\t/**\n\t * Provides access to the OtaBundlePublishing collection.\n\t */\n\totaBundlePublishing(): OtaBundlePublishing {\n\t\treturn new OtaBundlePublishing(this.clientData);\n\t}\n\n\t/**\n\t * Provides access to the OtaUsageStatistics collection.\n\t */\n\totaUsageStatistics(): OtaUsageStatistics {\n\t\treturn new OtaUsageStatistics(this.clientData);\n\t}\n\n\t/**\n\t * Provides access to the OtaFreezePeriods collection.\n\t */\n\totaFreezePeriods(): OtaFreezePeriods {\n\t\treturn new OtaFreezePeriods(this.clientData);\n\t}\n\n\t/**\n\t * Provides access to the OtaSdkTokens collection.\n\t */\n\totaSdkTokens(): OtaSdkTokens {\n\t\treturn new OtaSdkTokens(this.clientData);\n\t}\n}\n","import type { ClientParams } from \"../interfaces/client_params.js\";\nimport { OtaBundles } from \"../ota_collections/ota_bundles.js\";\nimport { BaseClient } from \"./base_client.js\";\n\n/**\n * A specialized client for interacting with Lokalise OTA (Over-The-Air) bundle resources.\n * Extends the BaseClient to configure authentication and endpoint specifics for OTA bundles.\n */\nexport class LokaliseOtaBundles extends BaseClient {\n\t/**\n\t * Constructs a new LokaliseOtaBundles client instance.\n\t * @param params - Configuration parameters, including the required `apiKey`.\n\t * Optional parameters include `version`, `host`, etc.\n\t * Defaults: `host` = \"https://ota.lokalise.com\", `version` = \"v3\".\n\t * @throws Error If no valid API key is provided.\n\t */\n\tconstructor(params: ClientParams) {\n\t\tsuper(params);\n\n\t\t// Use the OTA-specific auth header and default host.\n\t\tthis.clientData.authHeader = \"x-ota-api-token\";\n\t\tthis.clientData.host = this.clientData.host ?? \"https://ota.lokalise.com\";\n\n\t\t// Default OTA API version if not provided.\n\t\tthis.clientData.version = params.version ?? \"v3\";\n\t}\n\n\t/**\n\t * Provides access to the OtaBundles collection.\n\t * @returns An OtaBundles instance.\n\t */\n\totaBundles(): OtaBundles {\n\t\treturn new OtaBundles(this.clientData);\n\t}\n}\n","import type { AuthData as AuthDataInterface } from \"../interfaces/auth_data.js\";\nimport { getVersion } from \"../lokalise/pkg.js\";\nimport type { AuthError } from \"../models/auth_error.js\";\nimport type { HttpMethod } from \"../types/http_method.js\";\n\ninterface ResolvedResponse {\n\tjson: T;\n\theaders: Headers;\n}\n\n/**\n * Builds and returns headers for the request.\n */\nasync function buildHeaders(): Promise {\n\tconst headers = new Headers({\n\t\tAccept: \"application/json\",\n\t\t\"User-Agent\": `node-lokalise-api/${await getVersion()}`,\n\t\t\"Content-type\": \"application/json\",\n\t});\n\n\treturn headers;\n}\n\n/**\n * Fetches the response from the API and handles response validation.\n */\nasync function fetchAndHandleResponse(\n\ttarget: URL,\n\toptions: RequestInit,\n): Promise> {\n\ttry {\n\t\tconst response = await fetch(target, options);\n\t\tconst responseJSON = await response.json();\n\n\t\tif (response.ok) {\n\t\t\treturn {\n\t\t\t\tjson: responseJSON,\n\t\t\t\theaders: response.headers,\n\t\t\t};\n\t\t}\n\n\t\tconst error: AuthError = {\n\t\t\tcode: response.status,\n\t\t\t...responseJSON,\n\t\t};\n\t\treturn Promise.reject(error);\n\t} catch (err) {\n\t\tconst error: AuthError = {\n\t\t\terror: (err as Error).message,\n\t\t\tcode: 500,\n\t\t\terror_description: \"\",\n\t\t};\n\t\treturn Promise.reject(error);\n\t}\n}\n\n/**\n * Creates and sends an HTTP request, returning the parsed response.\n */\nexport async function createPromise(\n\turi: string,\n\tmethod: HttpMethod,\n\tbody: object | object[],\n\t{ host, version }: AuthDataInterface,\n): Promise> {\n\tconst fullUri = `/${version}/${uri}`;\n\tconst target = new URL(fullUri, host);\n\n\tconst options: RequestInit = {\n\t\tmethod,\n\t\theaders: await buildHeaders(),\n\t\tbody: JSON.stringify(body),\n\t};\n\n\treturn fetchAndHandleResponse(target, options);\n}\n","import type { AuthData as AuthDataInterface } from \"../interfaces/auth_data.js\";\nimport type { AuthError } from \"../models/auth_error.js\";\nimport type { RefreshTokenResponse } from \"../models/refresh_token_response.js\";\nimport type { RequestTokenResponse } from \"../models/request_token_response.js\";\nimport { createPromise } from \"./auth_request.js\";\n\nexport class LokaliseAuth {\n\tpublic authData: AuthDataInterface;\n\n\t/**\n\t * Instantiate LokaliseAuth to work with OAuth 2 tokens\n\t *\n\t * @param clientId - The client ID (mandatory)\n\t * @param clientSecret - The client secret (mandatory)\n\t * @param host - Optional host, defaults to \"https://app.lokalise.com\"\n\t * @param version - Optional API version, defaults to \"oauth2\"\n\t */\n\tconstructor(\n\t\tclientId: string,\n\t\tclientSecret: string,\n\t\thost = \"https://app.lokalise.com\",\n\t\tversion = \"oauth2\",\n\t) {\n\t\tif (!clientId || !clientSecret) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Error: Instantiation failed: Please pass client ID and client secret\",\n\t\t\t);\n\t\t}\n\n\t\tthis.authData = {\n\t\t\tclient_id: clientId,\n\t\t\tclient_secret: clientSecret,\n\t\t\thost,\n\t\t\tversion,\n\t\t};\n\t}\n\n\t/**\n\t * Generate the authorization URL\n\t *\n\t * @param scope - The scope(s) for the authorization\n\t * @param redirectUri - Optional redirect URI\n\t * @param state - Optional state parameter\n\t * @returns The authorization URL as a string\n\t */\n\tauth(scope: string | string[], redirectUri?: string, state?: string): string {\n\t\tconst scopeString = Array.isArray(scope) ? scope.join(\" \") : scope;\n\n\t\tconst params: Record = {\n\t\t\tclient_id: this.authData.client_id,\n\t\t\tscope: scopeString,\n\t\t\t...(state && { state }),\n\t\t\t...(redirectUri && { redirect_uri: redirectUri }),\n\t\t};\n\n\t\treturn this.buildUrl(params);\n\t}\n\n\t/**\n\t * Exchange an authorization code for an access token\n\t *\n\t * @param code - The authorization code\n\t * @returns A promise resolving to the token response\n\t */\n\ttoken(code: string): Promise {\n\t\tconst params = {\n\t\t\t...this.baseParams(),\n\t\t\tcode,\n\t\t\tgrant_type: \"authorization_code\",\n\t\t};\n\n\t\treturn this.doRequest(params);\n\t}\n\n\t/**\n\t * Refresh an access token using a refresh token\n\t *\n\t * @param refreshToken - The refresh token\n\t * @returns A promise resolving to the token response\n\t */\n\trefresh(refreshToken: string): Promise {\n\t\tconst params = {\n\t\t\t...this.baseParams(),\n\t\t\trefresh_token: refreshToken,\n\t\t\tgrant_type: \"refresh_token\",\n\t\t};\n\n\t\treturn this.doRequest(params);\n\t}\n\n\t/**\n\t * Internal method to perform the API request\n\t *\n\t * @param params - Request parameters\n\t * @returns A promise resolving to the API response\n\t */\n\tprivate async doRequest(params: Record): Promise {\n\t\ttry {\n\t\t\tconst data = await createPromise(\"token\", \"POST\", params, this.authData);\n\n\t\t\treturn data.json as T;\n\t\t} catch (err) {\n\t\t\tthrow this.handleReject(err);\n\t\t}\n\t}\n\n\t/**\n\t * Build the authorization URL\n\t *\n\t * @param params - URL parameters\n\t * @returns The complete URL as a string\n\t */\n\tprivate buildUrl(params: Record): string {\n\t\tconst url = new URL(\"auth\", this.authData.host);\n\t\turl.search = new URLSearchParams(params).toString();\n\t\treturn url.toString();\n\t}\n\n\t/**\n\t * Get the base parameters for authentication requests\n\t *\n\t * @returns A record containing the client ID and client secret\n\t */\n\tprivate baseParams(): Record {\n\t\treturn {\n\t\t\tclient_id: this.authData.client_id,\n\t\t\tclient_secret: this.authData.client_secret,\n\t\t};\n\t}\n\n\t/**\n\t * Handle API request errors and transform them into an `AuthError`\n\t *\n\t * @param error - The error object\n\t * @returns An `AuthError` instance\n\t */\n\tprivate handleReject(error: unknown): AuthError {\n\t\treturn error as AuthError;\n\t}\n}\n","import type { IAuthError } from \"../interfaces/auth_error.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class AuthError extends BaseModel implements IAuthError {\n\tdeclare code: number;\n\tdeclare error: string;\n\tdeclare error_description: string;\n\tdeclare error_uri?: string;\n}\n"],"mappings":"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","names":["Jwt","TeamUserBillingDetails","Jwt","TeamUserBillingDetails"]} \ No newline at end of file +{"version":3,"sources":["../src/models/base_model.ts","../src/models/branch.ts","../src/lokalise/pkg.ts","../src/models/api_error.ts","../src/http_client/base.ts","../src/models/paginated_result.ts","../src/models/cursor_paginated_result.ts","../src/collections/base_collection.ts","../src/collections/branches.ts","../src/models/comment.ts","../src/collections/comments.ts","../src/models/contributor.ts","../src/collections/contributors.ts","../src/models/file.ts","../src/models/queued_process.ts","../src/collections/files.ts","../src/models/jwt.ts","../src/collections/jwt.ts","../src/models/key.ts","../src/collections/keys.ts","../src/models/language.ts","../src/collections/languages.ts","../src/models/order.ts","../src/collections/orders.ts","../src/models/payment_card.ts","../src/collections/payment_cards.ts","../src/models/permission_template.ts","../src/collections/permission_templates.ts","../src/models/project.ts","../src/collections/projects.ts","../src/collections/queued_processes.ts","../src/models/screenshot.ts","../src/collections/screenshots.ts","../src/models/segment.ts","../src/collections/segments.ts","../src/models/snapshot.ts","../src/collections/snapshots.ts","../src/models/task.ts","../src/collections/tasks.ts","../src/models/team_user_billing_details.ts","../src/collections/team_user_billing_details.ts","../src/models/team_user.ts","../src/collections/team_users.ts","../src/models/team.ts","../src/collections/teams.ts","../src/models/translation_provider.ts","../src/collections/translation_providers.ts","../src/models/translation_status.ts","../src/collections/translation_statuses.ts","../src/models/translation.ts","../src/collections/translations.ts","../src/models/user_group.ts","../src/collections/user_groups.ts","../src/models/webhook.ts","../src/collections/webhooks.ts","../src/lokalise/base_client.ts","../src/lokalise/lokalise_api.ts","../src/lokalise/lokalise_api_oauth.ts","../src/models/ota/ota_bundle.ts","../src/ota_collections/ota_collection.ts","../src/ota_collections/ota_bundle_management.ts","../src/ota_collections/ota_bundle_publishing.ts","../src/models/ota/ota_bundle_archive.ts","../src/ota_collections/ota_bundles.ts","../src/models/ota/ota_freeze_period.ts","../src/ota_collections/ota_freeze_periods.ts","../src/models/ota/ota_sdk_token.ts","../src/ota_collections/ota_sdk_tokens.ts","../src/models/ota/ota_statistics.ts","../src/ota_collections/ota_usage_statistics.ts","../src/lokalise/lokalise_api_ota.ts","../src/lokalise/lokalise_ota_bundles.ts","../src/oauth2/auth_request.ts","../src/oauth2/lokalise_auth.ts","../src/models/auth_error.ts"],"sourcesContent":["export abstract class BaseModel {\n\tconstructor(params: { [key: string]: any }) {\n\t\tfor (const key of Object.keys(params)) {\n\t\t\t(this)[key] = params[key];\n\t\t}\n\t}\n}\n","import type { Branch as BranchInterface } from \"../interfaces/branch.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Branch extends BaseModel implements BranchInterface {\n\tdeclare branch_id: number;\n\tdeclare name: string;\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n\tdeclare created_by: number;\n\tdeclare created_by_email: string;\n}\n","import { readFile } from \"node:fs/promises\";\n\n/**\n * Returns the relative path to the package.json file.\n * Adjust this if your directory structure changes.\n */\nfunction pkgPath(): string {\n\treturn \"../../package.json\";\n}\n\n/**\n * Attempts to read and parse the local package.json file to retrieve the version.\n * If the file cannot be read or parsed, returns \"unknown\".\n *\n * @returns {Promise} The package version string or \"unknown\" if unavailable.\n */\nexport async function getVersion(): Promise {\n\ttry {\n\t\tconst data = await readFile(new URL(pkgPath(), import.meta.url));\n\t\tconst pkg = JSON.parse(data.toString()) as { version?: string };\n\t\treturn String(pkg.version);\n\t} catch {\n\t\treturn \"unknown\";\n\t}\n}\n","import type { IApiError } from \"../interfaces/api_error.js\";\n\n/**\n * Represents an API error with a specific code and optional details.\n */\nexport class ApiError extends Error implements IApiError {\n\t/**\n\t * The error code representing the type of API error.\n\t */\n\tcode: number;\n\n\t/**\n\t * Additional details about the error (optional).\n\t */\n\tdetails?: Record;\n\n\t/**\n\t * Creates an instance of ApiError.\n\t *\n\t * @param {string} message - The error message.\n\t * @param {number} code - The error code.\n\t * @param {Record} [details] - Additional details about the error.\n\t */\n\tconstructor(message: string, code: number, details?: Record) {\n\t\tsuper(message);\n\t\tthis.code = code;\n\t\tthis.details = details;\n\t}\n\n\t/**\n\t * Returns a string representation of the error, including code and details.\n\t *\n\t * @returns The formatted error message.\n\t */\n\toverride toString(): string {\n\t\tlet baseMessage = `LokaliseError: ${this.message}`;\n\t\tbaseMessage += ` (Code: ${this.code})`;\n\n\t\tif (this.details) {\n\t\t\tconst formattedDetails = Object.entries(this.details)\n\t\t\t\t.map(([key, value]) => `${key}: ${value}`)\n\t\t\t\t.join(\", \");\n\n\t\t\tbaseMessage += ` | Details: ${formattedDetails}`;\n\t\t}\n\t\treturn baseMessage;\n\t}\n}\n","import type { ClientData } from \"../interfaces/client_data.js\";\nimport type { Keyable, WritableKeyable } from \"../interfaces/keyable.js\";\nimport { getVersion } from \"../lokalise/pkg.js\";\nimport { ApiError } from \"../models/api_error.js\";\nimport type { HttpMethod } from \"../types/http_method.js\";\n\nexport type ApiResponse = {\n\tjson: Keyable;\n\theaders: Headers;\n};\n\n/**\n * Represents a single API request to the Lokalise API.\n * Handles URL construction, request initiation, response processing, and error handling.\n */\nexport class ApiRequest {\n\t/**\n\t * The resolved response from the API request.\n\t */\n\tpublic response!: ApiResponse;\n\n\t/**\n\t * Query and path parameters used to construct the request URL.\n\t * This object is modified during URL construction, removing parameters used in path segments.\n\t */\n\tpublic params: WritableKeyable = {};\n\n\t/**\n\t * The default base URL for the Lokalise API.\n\t */\n\tprotected readonly urlRoot = \"https://api.lokalise.com/api2/\";\n\n\t/**\n\t * Constructs a new ApiRequest instance.\n\t * @param params - Query and/or path parameters.\n\t */\n\tconstructor(params: Keyable) {\n\t\t// Copy params to avoid modifying the original object\n\t\tthis.params = { ...params };\n\t}\n\n\t/**\n\t * Static async factory method to create an ApiRequest instance with a fully resolved response.\n\t * @param uri - The endpoint URI (versioned path expected).\n\t * @param method - The HTTP method (GET, POST, PUT, DELETE, etc).\n\t * @param body - The request payload, if applicable.\n\t * @param params - Query and/or path parameters.\n\t * @param clientData - Authentication and configuration data for the request.\n\t * @returns A promise that resolves to a fully constructed ApiRequest instance with the `response` set.\n\t */\n\tpublic static async create(\n\t\turi: string,\n\t\tmethod: HttpMethod,\n\t\tbody: object | object[] | null,\n\t\tparams: Keyable,\n\t\tclientData: ClientData,\n\t): Promise {\n\t\tconst apiRequest = new ApiRequest(params);\n\t\tapiRequest.response = await apiRequest.createPromise(\n\t\t\turi,\n\t\t\tmethod,\n\t\t\tbody,\n\t\t\tclientData,\n\t\t);\n\t\treturn apiRequest;\n\t}\n\n\t/**\n\t * Creates the request promise by composing the URL, building headers, and executing the fetch.\n\t * @param uri - The endpoint URI.\n\t * @param method - The HTTP method.\n\t * @param body - The request payload.\n\t * @param clientData - Client configuration and auth data.\n\t * @returns A promise resolving to an ApiResponse or rejecting with an ApiError.\n\t */\n\tprotected async createPromise(\n\t\turi: string,\n\t\tmethod: HttpMethod,\n\t\tbody: object | object[] | null,\n\t\tclientData: ClientData,\n\t): Promise {\n\t\tconst url = this.composeURI(`/${clientData.version}/${uri}`);\n\t\tconst prefixUrl = clientData.host ?? this.urlRoot;\n\t\tconst headers = await this.buildHeaders(clientData, method, body);\n\n\t\tconst options: RequestInit = {\n\t\t\tmethod: method,\n\t\t\theaders: headers,\n\t\t\t...(method !== \"GET\" && body ? { body: JSON.stringify(body) } : {}),\n\t\t};\n\n\t\tconst target = new URL(url, prefixUrl);\n\t\ttarget.search = new URLSearchParams(this.params).toString();\n\n\t\treturn this.fetchAndHandleResponse(\n\t\t\ttarget,\n\t\t\toptions,\n\t\t\tclientData.requestTimeout,\n\t\t);\n\t}\n\n\t/**\n\t * Executes the fetch request and handles network-level errors.\n\t * Applies a request timeout if specified.\n\t * @param target - The fully constructed request URL.\n\t * @param options - The fetch request options.\n\t * @param requestTimeout - Optional timeout in milliseconds.\n\t * @returns A promise resolving to an ApiResponse or rejecting with an ApiError.\n\t */\n\tprotected async fetchAndHandleResponse(\n\t\ttarget: URL,\n\t\toptions: RequestInit,\n\t\trequestTimeout: number | undefined,\n\t): Promise {\n\t\tconst controller = new AbortController();\n\t\tlet timeoutId: NodeJS.Timeout | null = null;\n\n\t\tif (requestTimeout && requestTimeout > 0) {\n\t\t\ttimeoutId = setTimeout(() => controller.abort(), requestTimeout);\n\t\t}\n\n\t\ttry {\n\t\t\tconst response = await fetch(target, {\n\t\t\t\t...options,\n\t\t\t\tsignal: controller.signal,\n\t\t\t});\n\n\t\t\treturn this.processResponse(response);\n\t\t} catch (err) {\n\t\t\tif (err instanceof Error) {\n\t\t\t\tif (err.name === \"AbortError\") {\n\t\t\t\t\treturn Promise.reject(\n\t\t\t\t\t\tnew ApiError(`Request timed out after ${requestTimeout}ms`, 408, {\n\t\t\t\t\t\t\treason: \"timeout\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn Promise.reject(\n\t\t\t\t\tnew ApiError(err.message, 500, { reason: \"network or fetch error\" }),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn Promise.reject(\n\t\t\t\tnew ApiError(\"An unknown error occurred\", 500, {\n\t\t\t\t\treason: String(err),\n\t\t\t\t}),\n\t\t\t);\n\t\t} finally {\n\t\t\tif (timeoutId) {\n\t\t\t\tclearTimeout(timeoutId);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Processes the fetch response.\n\t * Attempts to parse JSON unless the status is 204 (No Content).\n\t * @param response - The raw fetch Response object.\n\t * @returns A promise resolving to an ApiResponse if successful, or rejecting with ApiError otherwise.\n\t */\n\tprotected async processResponse(response: Response): Promise {\n\t\tlet responseJSON: unknown = null;\n\n\t\ttry {\n\t\t\tif (response.status !== 204) {\n\t\t\t\tresponseJSON = await response.json();\n\t\t\t}\n\t\t} catch (error) {\n\t\t\treturn Promise.reject(\n\t\t\t\tnew ApiError((error as Error).message, response.status, {\n\t\t\t\t\tstatusText: response.statusText,\n\t\t\t\t\treason: \"JSON parsing error\",\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tif (response.ok) {\n\t\t\treturn {\n\t\t\t\tjson: responseJSON as Keyable,\n\t\t\t\theaders: response.headers,\n\t\t\t};\n\t\t}\n\n\t\treturn Promise.reject(this.getErrorFromResp(responseJSON));\n\t}\n\n\t/**\n\t * Derives an ApiError instance from the response JSON, which may follow various patterns.\n\t * @param respJson - The parsed JSON response from the server.\n\t * @returns An ApiError representing the server error.\n\t */\n\tprotected getErrorFromResp(respJson: unknown): ApiError {\n\t\tif (!respJson || typeof respJson !== \"object\") {\n\t\t\treturn new ApiError(\"An unknown error occurred\", 500, {\n\t\t\t\treason: \"unexpected response format\",\n\t\t\t});\n\t\t}\n\n\t\tconst errorObj = respJson as Record;\n\n\t\t// Top-level error format: { message: string, statusCode: number, error: string }\n\t\tif (\n\t\t\ttypeof errorObj.message === \"string\" &&\n\t\t\ttypeof errorObj.statusCode === \"number\" &&\n\t\t\ttypeof errorObj.error === \"string\"\n\t\t) {\n\t\t\treturn new ApiError(errorObj.message, errorObj.statusCode, {\n\t\t\t\treason: errorObj.error,\n\t\t\t});\n\t\t}\n\n\t\t// Nested error object: { error: { message, code, details } }\n\t\tif (errorObj.error && typeof errorObj.error === \"object\") {\n\t\t\tconst {\n\t\t\t\tmessage = \"Unknown error\",\n\t\t\t\tcode = 500,\n\t\t\t\tdetails,\n\t\t\t} = errorObj.error as Record;\n\t\t\treturn new ApiError(\n\t\t\t\tString(message),\n\t\t\t\ttypeof code === \"number\" ? code : 500,\n\t\t\t\tdetails ?? { reason: \"server error without details\" },\n\t\t\t);\n\t\t}\n\n\t\t// Alternative top-level fields: { message: string, code?: number, errorCode?: number, details?: any }\n\t\tif (\n\t\t\ttypeof errorObj.message === \"string\" &&\n\t\t\t(typeof errorObj.code === \"number\" ||\n\t\t\t\ttypeof errorObj.errorCode === \"number\")\n\t\t) {\n\t\t\tconst statusCode =\n\t\t\t\ttypeof errorObj.code === \"number\" ? errorObj.code : errorObj.errorCode;\n\t\t\treturn new ApiError(\n\t\t\t\terrorObj.message,\n\t\t\t\tstatusCode as number,\n\t\t\t\terrorObj.details ?? { reason: \"server error without details\" },\n\t\t\t);\n\t\t}\n\n\t\t// Fallback if no known error format matches\n\t\treturn new ApiError(\"An unknown error occurred\", 500, {\n\t\t\treason: \"unhandled error format\",\n\t\t\tdata: respJson,\n\t\t});\n\t}\n\n\t/**\n\t * Builds the request headers, including authentication, compression, and JSON headers as needed.\n\t * @param clientData - Client configuration and auth data.\n\t * @param method - The HTTP method.\n\t * @param body - The request payload.\n\t * @returns A promise resolving to the constructed Headers.\n\t */\n\tprotected async buildHeaders(\n\t\tclientData: ClientData,\n\t\tmethod: HttpMethod,\n\t\tbody: object | object[] | null,\n\t): Promise {\n\t\tconst headers = new Headers({\n\t\t\tAccept: \"application/json\",\n\t\t\t\"User-Agent\": `node-lokalise-api/${await getVersion()}`,\n\t\t});\n\n\t\t// Auth header can be either just the token or \" \"\n\t\theaders.append(\n\t\t\tclientData.authHeader,\n\t\t\tclientData.tokenType.length > 0\n\t\t\t\t? `${clientData.tokenType} ${clientData.token}`\n\t\t\t\t: clientData.token,\n\t\t);\n\n\t\tif (clientData.enableCompression) {\n\t\t\theaders.append(\"Accept-Encoding\", \"gzip,deflate\");\n\t\t}\n\n\t\tif (method !== \"GET\" && body) {\n\t\t\theaders.append(\"Content-Type\", \"application/json\");\n\t\t}\n\n\t\treturn headers;\n\t}\n\n\t/**\n\t * Composes the final URI by replacing placeholders of the form `/{!:{paramName}}`\n\t * with the corresponding parameter values.\n\t * @param rawUri - The raw URI template.\n\t * @returns The final composed URI string.\n\t * @throws Error if a required parameter is missing.\n\t */\n\tprotected composeURI(rawUri: string): string {\n\t\tconst regexp = /\\{(!?):(\\w+)\\}/g;\n\t\tconst uri = rawUri.replace(regexp, this.mapUriParams());\n\t\treturn uri.endsWith(\"/\") ? uri.slice(0, -1) : uri;\n\t}\n\n\t/**\n\t * Returns a function that maps URI parameters from placeholders.\n\t * @returns A function used as a replacement callback in `composeURI`.\n\t * @throws Error if a required parameter is missing.\n\t */\n\tprotected mapUriParams(): (\n\t\tsubstring: string,\n\t\tisMandatory: string,\n\t\tparamName: string,\n\t) => string {\n\t\treturn (\n\t\t\t_substring: string,\n\t\t\tisMandatory: string,\n\t\t\tparamName: string,\n\t\t): string => {\n\t\t\tif (this.params[paramName] != null) {\n\t\t\t\tconst paramValue = String(this.params[paramName]);\n\t\t\t\t// Remove the parameter so it doesn't appear as a query parameter\n\t\t\t\tdelete this.params[paramName];\n\t\t\t\treturn paramValue;\n\t\t\t}\n\t\t\tif (isMandatory === \"!\") {\n\t\t\t\tthrow new Error(`Missing required parameter: ${paramName}`);\n\t\t\t}\n\t\t\treturn \"\";\n\t\t};\n\t}\n}\n","import type { PaginatedResult as PaginatedResultInterface } from \"../interfaces/paginated_result.js\";\n\nexport class PaginatedResult implements PaginatedResultInterface {\n\ttotalResults: number;\n\ttotalPages: number;\n\tresultsPerPage: number;\n\tcurrentPage: number;\n\titems: T[];\n\n\tconstructor(items: T[], headers: Headers) {\n\t\tthis.totalResults = this.safeParseInt(\n\t\t\theaders.get(\"x-pagination-total-count\"),\n\t\t);\n\t\tthis.totalPages = this.safeParseInt(headers.get(\"x-pagination-page-count\"));\n\t\tthis.resultsPerPage = this.safeParseInt(headers.get(\"x-pagination-limit\"));\n\t\tthis.currentPage = this.safeParseInt(headers.get(\"x-pagination-page\"));\n\t\tthis.items = items;\n\t}\n\n\thasNextPage(): boolean {\n\t\treturn this.currentPage > 0 && this.currentPage < this.totalPages;\n\t}\n\n\thasPrevPage(): boolean {\n\t\treturn this.currentPage > 1;\n\t}\n\n\tisLastPage(): boolean {\n\t\treturn !this.hasNextPage();\n\t}\n\n\tisFirstPage(): boolean {\n\t\treturn !this.hasPrevPage();\n\t}\n\n\tnextPage(): number {\n\t\tif (this.isLastPage()) {\n\t\t\treturn this.currentPage;\n\t\t}\n\t\treturn this.currentPage + 1;\n\t}\n\n\tprevPage(): number {\n\t\tif (this.isFirstPage()) {\n\t\t\treturn this.currentPage;\n\t\t}\n\t\treturn this.currentPage - 1;\n\t}\n\n\tprivate safeParseInt(str: string | null): number {\n\t\tif (!str || Number.isNaN(Number(str))) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn Number.parseInt(str, 10);\n\t}\n}\n","import type { CursorPaginatedResult as CursorPaginatedResultInterface } from \"../interfaces/cursor_paginated_result.js\";\nimport { PaginatedResult } from \"./paginated_result.js\";\n\nexport class CursorPaginatedResult\n\textends PaginatedResult\n\timplements CursorPaginatedResultInterface\n{\n\tnextCursor: string | null;\n\n\tconstructor(items: T[], headers: Headers) {\n\t\tsuper(items, headers);\n\n\t\tthis.nextCursor = headers.get(\"x-pagination-next-cursor\");\n\t}\n\n\thasNextCursor(): boolean {\n\t\treturn this.nextCursor !== null;\n\t}\n}\n","import { ApiRequest } from \"../http_client/base.js\";\nimport type { BulkResult } from \"../interfaces/bulk_result.js\";\nimport type { ClientData } from \"../interfaces/client_data.js\";\nimport type { Keyable } from \"../interfaces/keyable.js\";\nimport { CursorPaginatedResult } from \"../models/cursor_paginated_result.js\";\nimport { PaginatedResult } from \"../models/paginated_result.js\";\nimport type { HttpMethod } from \"../types/http_method.js\";\n\ntype ResolveHandler = (json: Keyable, headers: Headers) => T;\n\n/**\n * An abstract base class that provides generic CRUD (Create, Read, Update, Delete) operations\n * and handling for pagination, cursor pagination, and bulk operations. Other \"collection\" classes\n * should extend this class and provide specific implementations for resource endpoints.\n *\n * Expected usage:\n * - Subclasses define `rootElementName` and/or `rootElementNameSingular` to indicate the JSON fields\n * that contain the desired data.\n * - `elementClass` and optionally `secondaryElementClass` should be overridden to map raw JSON\n * objects to strongly typed model instances.\n * - `endpoint` and `prefixURI` should be set as static properties in subclasses to specify resource paths.\n */\nexport abstract class BaseCollection {\n\t/**\n\t * Client data containing authentication and configuration details.\n\t * Provided by a `BaseClient` or similar client instance.\n\t */\n\treadonly clientData: ClientData;\n\n\t/**\n\t * Static endpoint property that subclasses can define to indicate the API endpoint\n\t * for this collection. If not set, ensure `prefixURI` or `uri` parameters are passed.\n\t */\n\tprotected static endpoint: string | null;\n\n\t/**\n\t * Static prefixURI property that subclasses can define to indicate a base path.\n\t * If `uri` is not passed explicitly, this prefix is used to construct the request URL.\n\t */\n\tprotected static prefixURI: string | null;\n\n\t/**\n\t * Constructs a new BaseCollection instance.\n\t * @param clientData - Client data for making authenticated requests.\n\t */\n\tconstructor(clientData: ClientData) {\n\t\tthis.clientData = clientData;\n\t}\n\n\t/**\n\t * Abstract getter that must be implemented by subclasses.\n\t * Should return a class constructor that maps a JSON object to an `ElementType` instance.\n\t */\n\tprotected abstract get elementClass(): new (\n\t\tjson: Keyable,\n\t) => ElementType;\n\n\t/**\n\t * Getter that must be overridden by subclasses to return the root element name\n\t * for array-based JSON responses.\n\t * @throws Error if not defined by the subclass.\n\t */\n\tprotected get rootElementName(): string {\n\t\tthrow new Error(\n\t\t\t\"rootElementName is not defined. Subclasses must override `rootElementName`.\",\n\t\t);\n\t}\n\n\t/**\n\t * Getter that may be overridden by subclasses to return the root element name\n\t * for single-item JSON responses.\n\t * @throws Error if not defined by the subclass.\n\t */\n\tprotected get rootElementNameSingular(): string | null {\n\t\tthrow new Error(\n\t\t\t\"rootElementNameSingular is not defined. Subclasses must override `rootElementNameSingular`.\",\n\t\t);\n\t}\n\n\t/**\n\t * Getter that may be overridden by subclasses if a secondary model type is returned.\n\t * By default, this throws an error. If needed, override it in the subclass.\n\t */\n\tprotected get secondaryElementClass(): new (\n\t\tjson: Keyable,\n\t) => SecondaryType {\n\t\tthrow new Error(\n\t\t\t\"Secondary elements are not supported by this collection. Override `secondaryElementClass` if needed.\",\n\t\t);\n\t}\n\n\t/**\n\t * Getter that must be overridden if `secondaryElementClass` is used.\n\t * Returns the JSON property name for the secondary element.\n\t * @throws Error if not defined by the subclass that uses secondary elements.\n\t */\n\tprotected get secondaryElementNameSingular(): string {\n\t\tthrow new Error(\n\t\t\t\"secondaryElementNameSingular is not defined. Subclasses must override this if secondary elements are used.\",\n\t\t);\n\t}\n\n\t/**\n\t * Perform a GET request that expects a list of items.\n\t * @param params Optional query or request parameters.\n\t * @returns A promise resolving to either a paginated result or an array of ElementType.\n\t */\n\tprotected doList(\n\t\tparams: Keyable,\n\t): Promise | ElementType[]> {\n\t\treturn this.createPromise(\"GET\", params, this.populateArrayFromJson, null);\n\t}\n\n\t/**\n\t * Perform a GET request that expects a cursor-paginated list of items.\n\t * @param params Optional query or request parameters.\n\t * @returns A promise resolving to a CursorPaginatedResult of ElementType.\n\t */\n\tprotected doListCursor(\n\t\tparams: Keyable,\n\t): Promise> {\n\t\treturn this.createPromise(\n\t\t\t\"GET\",\n\t\t\tparams,\n\t\t\tthis.populateArrayFromJsonCursor,\n\t\t\tnull,\n\t\t);\n\t}\n\n\t/**\n\t * Perform a GET request to retrieve a single item by its ID.\n\t * @param id The ID of the item to retrieve.\n\t * @param params Optional query or request parameters.\n\t * @returns A promise resolving to a single ElementType instance.\n\t */\n\tprotected doGet(\n\t\tid: string | number,\n\t\tparams: Keyable = {},\n\t): Promise {\n\t\treturn this.createPromise(\n\t\t\t\"GET\",\n\t\t\t{ ...params, id },\n\t\t\tthis.populateObjectFromJsonRoot,\n\t\t\tnull,\n\t\t);\n\t}\n\n\t/**\n\t * Perform a DELETE request to remove a single item by its ID.\n\t * @param id The ID of the item to delete.\n\t * @param params Optional query or request parameters.\n\t * @returns A promise resolving to JSON representing the deletion result.\n\t */\n\tprotected doDelete(\n\t\tid: string | number,\n\t\tparams: Keyable = {},\n\t): Promise {\n\t\treturn this.createPromise(\n\t\t\t\"DELETE\",\n\t\t\t{ ...params, id },\n\t\t\tthis.returnBareJSON,\n\t\t\tnull,\n\t\t) as Promise;\n\t}\n\n\t/**\n\t * Perform a POST request to create a new resource.\n\t * @param body The object or array of objects to send in the request body.\n\t * @param params Optional query or request parameters.\n\t * @param resolveFn Optional custom resolve handler to parse the response.\n\t * @returns A promise resolving to an ElementType or SecondaryType instance.\n\t */\n\tprotected doCreate(\n\t\tbody: object | object[] | null,\n\t\tparams: Keyable = {},\n\t\tresolveFn = this.populateObjectFromJson,\n\t): Promise {\n\t\treturn this.createPromise(\"POST\", params, resolveFn, body);\n\t}\n\n\t/**\n\t * Perform a POST request to create multiple resources at once.\n\t * @param body The object or array of objects to send in the request body.\n\t * @param params Optional query or request parameters.\n\t * @param resolveFn Optional custom resolve handler to parse the response array.\n\t * @returns A promise resolving to an array of ElementType.\n\t */\n\tprotected doCreateArray(\n\t\tbody: object | object[] | null,\n\t\tparams: Keyable,\n\t\tresolveFn: ResolveHandler = this.populateArray,\n\t): Promise {\n\t\treturn this.createPromise(\"POST\", params, resolveFn, body);\n\t}\n\n\t/**\n\t * Perform an UPDATE (PUT/PATCH) request to modify an existing resource by its ID.\n\t * @param id The ID of the item to update.\n\t * @param body The updated fields to send in the request body.\n\t * @param params Optional query or request parameters.\n\t * @param resolveFn Optional custom resolve handler to parse the response object.\n\t * @param method The HTTP method to use, typically PUT or PATCH.\n\t * @returns A promise resolving to the updated ElementType instance.\n\t */\n\tprotected doUpdate(\n\t\tid: string | number,\n\t\tbody: Keyable | null,\n\t\tparams: Keyable,\n\t\tresolveFn = this.populateObjectFromJsonRoot,\n\t\tmethod: HttpMethod = \"PUT\",\n\t): Promise {\n\t\treturn this.createPromise(method, { ...params, id }, resolveFn, body);\n\t}\n\n\t/**\n\t * Parse a JSON response that contains a single item under a known root element name.\n\t * @param json The raw JSON object returned by the API.\n\t * @param headers The response headers.\n\t * @returns The parsed ElementType instance.\n\t * @throws Error if the expected root element name is missing.\n\t */\n\tprotected populateObjectFromJsonRoot(\n\t\tjson: Keyable,\n\t\theaders: Headers,\n\t): ElementType {\n\t\tlet jsonData = json;\n\n\t\tconst rootElementName = this.rootElementNameSingular;\n\t\tif (this.rootElementNameSingular && rootElementName) {\n\t\t\tconst dataRecord = jsonData as Record;\n\t\t\tjsonData = dataRecord[rootElementName];\n\t\t\tif (!jsonData) {\n\t\t\t\tthrow new Error(`Missing property '${rootElementName}' in JSON object`);\n\t\t\t}\n\t\t}\n\n\t\treturn this.populateObjectFromJson(jsonData, headers) as ElementType;\n\t}\n\n\t/**\n\t * Parse a JSON response that contains a secondary item under a known secondary root element name.\n\t * @param json The raw JSON object returned by the API.\n\t * @param headers The response headers.\n\t * @returns The parsed SecondaryType instance.\n\t * @throws Error if the expected secondary element name is missing.\n\t */\n\tprotected populateSecondaryObjectFromJsonRoot(\n\t\tjson: Keyable,\n\t\theaders: Headers,\n\t): SecondaryType {\n\t\tconst root = this.secondaryElementNameSingular;\n\t\tconst record = json as Record;\n\n\t\tconst itemJson = record[root];\n\t\tif (!itemJson) {\n\t\t\tthrow new Error(\n\t\t\t\t`Missing expected secondary property '${root}' in JSON response.`,\n\t\t\t);\n\t\t}\n\n\t\treturn this.populateObjectFromJson(\n\t\t\titemJson,\n\t\t\theaders,\n\t\t\ttrue,\n\t\t) as SecondaryType;\n\t}\n\n\t/**\n\t * Parse a JSON response that contains a secondary item.\n\t * @param json The raw JSON object returned by the API.\n\t * @param headers The response headers.\n\t * @returns The parsed SecondaryType instance.\n\t */\n\tprotected populateSecondaryObjectFromJson(\n\t\tjson: Keyable,\n\t\theaders: Headers,\n\t): SecondaryType {\n\t\treturn this.populateObjectFromJson(json, headers, true) as SecondaryType;\n\t}\n\n\t/**\n\t * Parse a JSON response that contains an array of items along with bulk result details.\n\t * @param json The raw JSON object returned by the API.\n\t * @param headers The response headers.\n\t * @returns A BulkResult object containing items and potential errors.\n\t * @throws Error if the expected root element is missing or not an array.\n\t */\n\tprotected populateArrayFromJsonBulk(\n\t\tjson: Keyable,\n\t\theaders: Headers,\n\t): BulkResult {\n\t\tconst root = this.rootElementName;\n\t\tconst jsonArray = json[root];\n\n\t\tif (!Array.isArray(jsonArray)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Expected an array under '${root}' but received: ${typeof jsonArray}`,\n\t\t\t);\n\t\t}\n\n\t\tconst items: ElementType[] = jsonArray.map(\n\t\t\t(obj) => this.populateObjectFromJson(obj, headers) as ElementType,\n\t\t);\n\n\t\treturn {\n\t\t\terrors: json.errors,\n\t\t\titems,\n\t\t};\n\t}\n\n\t/**\n\t * Parse a JSON response that contains an array of items.\n\t * If pagination headers are detected, returns a PaginatedResult.\n\t * Otherwise, returns a plain array of ElementType.\n\t * @param json The raw JSON object returned by the API.\n\t * @param headers The response headers.\n\t */\n\tprotected populateArrayFromJson(\n\t\tjson: Keyable,\n\t\theaders: Headers,\n\t): PaginatedResult | ElementType[] {\n\t\tconst array = this.populateArray(json, headers);\n\t\treturn this.isPaginated(headers)\n\t\t\t? new PaginatedResult(array, headers)\n\t\t\t: array;\n\t}\n\n\t/**\n\t * Parse a JSON response that contains an array of items.\n\t * This method returns a plain array and does not consider pagination.\n\t * @param json The raw JSON object returned by the API.\n\t * @param headers The response headers.\n\t */\n\tprotected populateArray(json: Keyable, headers: Headers): ElementType[] {\n\t\tconst root = this.rootElementName;\n\t\tconst jsonArray = json[root];\n\n\t\tif (!Array.isArray(jsonArray)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Expected an array under '${root}' but received: ${typeof jsonArray}`,\n\t\t\t);\n\t\t}\n\n\t\treturn jsonArray.map(\n\t\t\t(obj: Keyable) =>\n\t\t\t\tthis.populateObjectFromJson(obj, headers) as ElementType,\n\t\t);\n\t}\n\n\t/**\n\t * Parse a JSON response that contains a cursor-paginated array of items.\n\t * @param json The raw JSON object returned by the API.\n\t * @param headers The response headers.\n\t */\n\tprotected populateArrayFromJsonCursor(\n\t\tjson: Keyable,\n\t\theaders: Headers,\n\t): CursorPaginatedResult {\n\t\tconst root = this.rootElementName;\n\t\tconst jsonArray = json[root];\n\n\t\tif (!Array.isArray(jsonArray)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Expected an array under '${root}' for cursor pagination but received: ${typeof jsonArray}`,\n\t\t\t);\n\t\t}\n\n\t\tconst items = jsonArray.map(\n\t\t\t(obj: Keyable) =>\n\t\t\t\tthis.populateObjectFromJson(obj, headers) as ElementType,\n\t\t);\n\n\t\treturn new CursorPaginatedResult(items, headers);\n\t}\n\n\t/**\n\t * Parse a JSON object into either an ElementType or a SecondaryType instance.\n\t * @param json The raw JSON object returned by the API.\n\t * @param _headers The response headers (if needed).\n\t * @param secondary If true, use the secondaryElementClass instead of elementClass.\n\t */\n\tprotected populateObjectFromJson(\n\t\tjson: Keyable,\n\t\t_headers: Headers,\n\t\tsecondary = false,\n\t): ElementType | SecondaryType {\n\t\tconst cls = secondary ? this.secondaryElementClass : this.elementClass;\n\t\treturn new cls(json);\n\t}\n\n\t/**\n\t * Return the raw JSON as-is.\n\t * @param json The raw JSON object or array returned by the API.\n\t */\n\tprotected returnBareJSON(json: Keyable | Keyable[]): T {\n\t\treturn json as T;\n\t}\n\n\t/**\n\t * Convert a single object into an array if it's not already an array.\n\t * @param raw_body The raw request body.\n\t */\n\tprotected objToArray(raw_body: Keyable | Keyable[]): Keyable[] {\n\t\treturn Array.isArray(raw_body) ? raw_body : [raw_body];\n\t}\n\n\t/**\n\t * Create a Promise that sends an HTTP request and resolves with a parsed response.\n\t * @param method The HTTP method (GET, POST, PUT, DELETE, etc.).\n\t * @param params Query or request parameters.\n\t * @param resolveFn A function to resolve and parse the JSON response.\n\t * @param body The request body, if applicable.\n\t * @param uri An explicit URI to use for the request. If not provided, prefixURI is used.\n\t */\n\tprotected async createPromise(\n\t\tmethod: HttpMethod,\n\t\tparams: Keyable,\n\t\tresolveFn: ResolveHandler,\n\t\tbody: object | object[] | null,\n\t\turi: string | null = null,\n\t): Promise {\n\t\tconst request = await this.prepareRequest(method, body, params, uri);\n\t\treturn resolveFn.call(\n\t\t\tthis,\n\t\t\trequest.response.json,\n\t\t\trequest.response.headers,\n\t\t);\n\t}\n\n\t/**\n\t * Prepare the API request by creating a new ApiRequest instance using the static async factory method.\n\t * @param method The HTTP method.\n\t * @param body The request body.\n\t * @param params The request parameters.\n\t * @param uri An explicit URI for the request or null.\n\t */\n\tprotected async prepareRequest(\n\t\tmethod: HttpMethod,\n\t\tbody: object | object[] | null,\n\t\tparams: Keyable,\n\t\turi: string | null,\n\t): Promise {\n\t\treturn await ApiRequest.create(\n\t\t\tthis.getUri(uri),\n\t\t\tmethod,\n\t\t\tbody,\n\t\t\tparams,\n\t\t\tthis.clientData,\n\t\t);\n\t}\n\n\t/**\n\t * Determine the URI for the request. If uri is not provided, use prefixURI.\n\t * @param uri An explicit URI or null.\n\t * @throws Error if no URI or prefixURI is provided.\n\t */\n\tprotected getUri(uri: string | null): string {\n\t\tconst childClass = this.constructor as typeof BaseCollection;\n\t\tconst resolvedUri = uri ?? childClass.prefixURI;\n\t\tif (!resolvedUri) {\n\t\t\tthrow new Error(\n\t\t\t\t\"No URI or prefixURI provided. Ensure the subclass defines a static prefixURI or pass a URI explicitly.\",\n\t\t\t);\n\t\t}\n\t\treturn resolvedUri;\n\t}\n\n\t/**\n\t * Determine if the response headers indicate pagination.\n\t * @param headers The response headers.\n\t */\n\tprivate isPaginated(headers: Headers): boolean {\n\t\treturn (\n\t\t\t!!headers.get(\"x-pagination-total-count\") &&\n\t\t\t!!headers.get(\"x-pagination-page\")\n\t\t);\n\t}\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { Branch } from \"../models/branch.js\";\nimport type {\n\tBranchDeleted,\n\tBranchMerged,\n\tBranchParams,\n\tMergeBranchParams,\n} from \"../types/branches.js\";\nimport type {\n\tProjectOnly,\n\tProjectWithPagination,\n} from \"../types/common_get_params.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Branches extends BaseCollection {\n\tprotected static override prefixURI =\n\t\t\"projects/{!:project_id}/branches/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Branch {\n\t\treturn Branch;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"branches\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"branch\";\n\t}\n\n\tlist(\n\t\trequest_params: ProjectWithPagination,\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tcreate(\n\t\tbranch_params: BranchParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doCreate(\n\t\t\tbranch_params,\n\t\t\trequest_params,\n\t\t\tthis.populateObjectFromJsonRoot,\n\t\t);\n\t}\n\n\tget(\n\t\tbranch_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doGet(branch_id, request_params);\n\t}\n\n\tupdate(\n\t\tbranch_id: string | number,\n\t\tbranch_params: BranchParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doUpdate(branch_id, branch_params, request_params);\n\t}\n\n\tdelete(\n\t\tbranch_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doDelete(branch_id, request_params);\n\t}\n\n\tmerge(\n\t\tbranch_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t\tbody: MergeBranchParams = {},\n\t): Promise {\n\t\tconst params = {\n\t\t\t...request_params,\n\t\t\t...{ id: branch_id },\n\t\t};\n\n\t\treturn this.createPromise(\n\t\t\t\"POST\",\n\t\t\tparams,\n\t\t\tthis.returnBareJSON,\n\t\t\tbody,\n\t\t\t\"projects/{!:project_id}/branches/{:id}/merge\",\n\t\t);\n\t}\n}\n","import type { Comment as CommentInterface } from \"../interfaces/comment.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Comment extends BaseModel implements CommentInterface {\n\tdeclare comment_id: number;\n\tdeclare key_id: number;\n\tdeclare comment: string;\n\tdeclare added_by: number;\n\tdeclare added_by_email: string;\n\tdeclare added_at: string;\n\tdeclare added_at_timestamp: number;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { Comment } from \"../models/comment.js\";\nimport type {\n\tCommentData,\n\tCommentDeleted,\n\tKeyProjectPagination,\n\tProjectAndKey,\n} from \"../types/comments.js\";\nimport type { ProjectWithPagination } from \"../types/common_get_params.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Comments extends BaseCollection {\n\tprotected static override prefixURI =\n\t\t\"projects/{!:project_id}/keys/{!:key_id}/comments/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Comment {\n\t\treturn Comment;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"comments\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"comment\";\n\t}\n\n\tlist(\n\t\trequest_params: KeyProjectPagination,\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tcreate(\n\t\tcomment_params: CommentData | CommentData[],\n\t\trequest_params: ProjectAndKey,\n\t): Promise {\n\t\tconst body = { comments: this.objToArray(comment_params) };\n\n\t\treturn this.doCreateArray(body, request_params);\n\t}\n\n\tget(\n\t\tcomment_id: string | number,\n\t\trequest_params: ProjectAndKey,\n\t): Promise {\n\t\treturn this.doGet(comment_id, request_params);\n\t}\n\n\tdelete(\n\t\tcomment_id: string | number,\n\t\trequest_params: ProjectAndKey,\n\t): Promise {\n\t\treturn this.doDelete(comment_id, request_params);\n\t}\n\n\tlist_project_comments(\n\t\tparams: ProjectWithPagination,\n\t): Promise> {\n\t\treturn this.createPromise(\n\t\t\t\"GET\",\n\t\t\tparams,\n\t\t\tthis.populateArrayFromJson,\n\t\t\tnull,\n\t\t\t\"projects/{!:project_id}/comments\",\n\t\t) as Promise>;\n\t}\n}\n","import type { Contributor as ContributorInterface } from \"../interfaces/contributor.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Contributor extends BaseModel implements ContributorInterface {\n\tdeclare user_id: number;\n\tdeclare email: string;\n\tdeclare fullname: string;\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n\tdeclare is_admin: boolean; //deprecated\n\tdeclare is_reviewer: boolean; //deprecated\n\tdeclare languages: Array<{\n\t\tlang_id: number;\n\t\tlang_iso: string;\n\t\tlang_name: string;\n\t\tis_writable: boolean;\n\t}>;\n\tdeclare admin_rights: string[];\n\tdeclare role_id: number;\n\tdeclare uuid?: string;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { Contributor } from \"../models/contributor.js\";\nimport type {\n\tProjectOnly,\n\tProjectWithPagination,\n} from \"../types/common_get_params.js\";\nimport type {\n\tContributorCreateData,\n\tContributorDeleted,\n\tContributorUpdateData,\n} from \"../types/contributors.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Contributors extends BaseCollection {\n\tprotected static override prefixURI =\n\t\t\"projects/{!:project_id}/contributors/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Contributor {\n\t\treturn Contributor;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"contributors\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"contributor\";\n\t}\n\n\tlist(\n\t\trequest_params: ProjectWithPagination,\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tcreate(\n\t\tcontributor_params: ContributorCreateData | ContributorCreateData[],\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\tconst body = { contributors: this.objToArray(contributor_params) };\n\n\t\treturn this.doCreateArray(body, request_params);\n\t}\n\n\tget(\n\t\tcontributor_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doGet(contributor_id, request_params);\n\t}\n\n\tme(request_params: ProjectOnly): Promise {\n\t\treturn this.doGet(\"me\", request_params);\n\t}\n\n\tupdate(\n\t\tcontributor_id: string | number,\n\t\tcontributor_params: ContributorUpdateData,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doUpdate(contributor_id, contributor_params, request_params);\n\t}\n\n\tdelete(\n\t\tcontributor_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doDelete(contributor_id, request_params);\n\t}\n}\n","import type { File as FileInterface } from \"../interfaces/file.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class File extends BaseModel implements FileInterface {\n\tdeclare file_id: number;\n\tdeclare filename: string;\n\tdeclare key_count: number;\n}\n","import type { QueuedProcess as QueuedProcessInterface } from \"../interfaces/queued_process.js\";\nimport { BaseModel } from \"./base_model.js\";\n\ntype ProcessDetails = {\n\t[key: string]: any;\n};\n\nexport class QueuedProcess extends BaseModel implements QueuedProcessInterface {\n\tdeclare process_id: string;\n\tdeclare type: string;\n\tdeclare status: string;\n\tdeclare message: string;\n\tdeclare created_by: string;\n\tdeclare created_by_email: string;\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n\tdeclare details: ProcessDetails;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { File } from \"../models/file.js\";\nimport { QueuedProcess } from \"../models/queued_process.js\";\nimport type { ProjectOnly } from \"../types/common_get_params.js\";\nimport type {\n\tDownloadBundle,\n\tDownloadFileParams,\n\tFileDeleted,\n\tListFileParams,\n\tUploadFileParams,\n} from \"../types/files.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Files extends BaseCollection {\n\tprotected static override prefixURI = \"projects/{!:project_id}/files/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => File {\n\t\treturn File;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"files\";\n\t}\n\n\tprotected override get secondaryElementClass(): new (\n\t\tjson: Keyable,\n\t) => QueuedProcess {\n\t\treturn QueuedProcess;\n\t}\n\n\tprotected override get secondaryElementNameSingular(): string {\n\t\treturn \"process\";\n\t}\n\n\tlist(request_params: ListFileParams): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tupload(project_id: string, upload: UploadFileParams): Promise {\n\t\treturn this.createPromise(\n\t\t\t\"POST\",\n\t\t\t{ project_id },\n\t\t\tthis.populateSecondaryObjectFromJsonRoot,\n\t\t\tupload,\n\t\t\t\"projects/{!:project_id}/files/upload\",\n\t\t);\n\t}\n\n\tdownload(\n\t\tproject_id: string,\n\t\tdownload: DownloadFileParams,\n\t): Promise {\n\t\treturn this.createPromise(\n\t\t\t\"POST\",\n\t\t\t{ project_id },\n\t\t\tthis.returnBareJSON,\n\t\t\tdownload,\n\t\t\t\"projects/{!:project_id}/files/download\",\n\t\t);\n\t}\n\n\tasync_download(\n\t\tproject_id: string,\n\t\tdownload: DownloadFileParams,\n\t): Promise {\n\t\treturn this.createPromise(\n\t\t\t\"POST\",\n\t\t\t{ project_id },\n\t\t\tthis.populateSecondaryObjectFromJson,\n\t\t\tdownload,\n\t\t\t\"projects/{!:project_id}/files/async-download\",\n\t\t);\n\t}\n\n\tdelete(\n\t\tfile_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doDelete(file_id, request_params);\n\t}\n}\n","import type { Jwt as JwtInterface } from \"../interfaces/jwt.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Jwt extends BaseModel implements JwtInterface {\n\tdeclare jwt: string;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport { Jwt as JwtModel } from \"../models/jwt.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Jwt extends BaseCollection {\n\tprotected static override prefixURI = \"projects/{!:project_id}/tokens\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => JwtModel {\n\t\treturn JwtModel;\n\t}\n\n\tcreate(project_id: string, body = { service: \"ota\" }): Promise {\n\t\tconst request_params = { project_id: project_id };\n\t\treturn this.doCreate(body, request_params, this.populateObjectFromJson);\n\t}\n}\n","import type { Comment } from \"../interfaces/comment.js\";\nimport type { Key as KeyInterface } from \"../interfaces/key.js\";\nimport type { Screenshot } from \"../interfaces/screenshot.js\";\nimport type { Translation } from \"../interfaces/translation.js\";\nimport type { Filenames, Filenames as Keynames } from \"../types/filenames.js\";\nimport type { SupportedPlatforms } from \"../types/supported_platforms.js\";\nimport { BaseModel } from \"./base_model.js\";\n\ntype KeyComment = Omit;\n\nexport class Key extends BaseModel implements KeyInterface {\n\tdeclare key_id: number;\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n\tdeclare key_name: Keynames;\n\tdeclare filenames: Filenames;\n\tdeclare description: string;\n\tdeclare platforms: SupportedPlatforms[];\n\tdeclare tags: string[];\n\tdeclare comments: KeyComment[];\n\tdeclare screenshots: Screenshot[];\n\tdeclare translations: Translation[];\n\tdeclare is_plural: boolean;\n\tdeclare plural_name: string;\n\tdeclare is_hidden: boolean;\n\tdeclare is_archived: boolean;\n\tdeclare context: string;\n\tdeclare base_words: number;\n\tdeclare char_limit: number;\n\tdeclare custom_attributes: any[] | string;\n\tdeclare modified_at: string;\n\tdeclare modified_at_timestamp: number;\n\tdeclare translations_modified_at: string;\n\tdeclare translations_modified_at_timestamp: number;\n}\n","import type { BulkResult } from \"../interfaces/bulk_result.js\";\nimport type { CursorPaginatedResult } from \"../interfaces/cursor_paginated_result.js\";\nimport type { Keyable } from \"../interfaces/keyable.js\";\nimport { Key } from \"../models/key.js\";\nimport type { ProjectOnly } from \"../types/common_get_params.js\";\nimport type {\n\tBulkUpdateKeyParams,\n\tCreateKeyParams,\n\tGetKeyParams,\n\tKeyDeleted,\n\tKeyParamsWithPagination,\n\tKeysBulkDeleted,\n\tUpdateKeyData,\n} from \"../types/keys.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Keys extends BaseCollection {\n\tprotected static override prefixURI = \"projects/{!:project_id}/keys/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Key {\n\t\treturn Key;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"keys\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"key\";\n\t}\n\n\tlist(\n\t\trequest_params: KeyParamsWithPagination,\n\t): Promise> {\n\t\treturn this.doListCursor(request_params);\n\t}\n\n\tcreate(\n\t\tkey_params: CreateKeyParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise> {\n\t\treturn this.createPromise(\n\t\t\t\"POST\",\n\t\t\trequest_params,\n\t\t\tthis.populateArrayFromJsonBulk,\n\t\t\tkey_params,\n\t\t);\n\t}\n\n\tget(key_id: string | number, request_params: GetKeyParams): Promise {\n\t\treturn this.doGet(key_id, request_params);\n\t}\n\n\tupdate(\n\t\tkey_id: string | number,\n\t\tkey_params: UpdateKeyData,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doUpdate(key_id, key_params, request_params);\n\t}\n\n\tdelete(\n\t\tkey_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doDelete(key_id, request_params);\n\t}\n\n\tbulk_update(\n\t\tkey_params: BulkUpdateKeyParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise> {\n\t\treturn this.createPromise(\n\t\t\t\"PUT\",\n\t\t\trequest_params,\n\t\t\tthis.populateArrayFromJsonBulk,\n\t\t\tkey_params,\n\t\t\t\"projects/{!:project_id}/keys\",\n\t\t);\n\t}\n\n\tbulk_delete(\n\t\tkey_ids: number[] | string[],\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\tconst keys = { keys: this.objToArray(key_ids) };\n\n\t\treturn this.createPromise(\n\t\t\t\"DELETE\",\n\t\t\trequest_params,\n\t\t\tthis.returnBareJSON,\n\t\t\tkeys,\n\t\t\t\"projects/{!:project_id}/keys\",\n\t\t);\n\t}\n}\n","import type { Language as LanguageInterface } from \"../interfaces/language.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Language extends BaseModel implements LanguageInterface {\n\tdeclare lang_id: number;\n\tdeclare lang_iso: string;\n\tdeclare lang_name: string;\n\tdeclare is_rtl: boolean;\n\tdeclare plural_forms: string[];\n}\n","import type { BulkResult } from \"../interfaces/bulk_result.js\";\nimport type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { Language } from \"../models/language.js\";\nimport type {\n\tPaginationParams,\n\tProjectOnly,\n\tProjectWithPagination,\n} from \"../types/common_get_params.js\";\nimport type {\n\tCreateLanguageParams,\n\tLanguageDeleted,\n\tUpdateLanguageParams,\n} from \"../types/languages.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Languages extends BaseCollection {\n\tprotected static override prefixURI =\n\t\t\"projects/{!:project_id}/languages/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Language {\n\t\treturn Language;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"languages\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"language\";\n\t}\n\n\tsystem_languages(\n\t\tparams: PaginationParams = {},\n\t): Promise> {\n\t\treturn this.createPromise(\n\t\t\t\"GET\",\n\t\t\tparams,\n\t\t\tthis.populateArrayFromJson,\n\t\t\tnull,\n\t\t\t\"system/languages\",\n\t\t) as Promise>;\n\t}\n\n\tlist(\n\t\trequest_params: ProjectWithPagination,\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tcreate(\n\t\traw_body: CreateLanguageParams | CreateLanguageParams[],\n\t\trequest_params: ProjectOnly,\n\t): Promise> {\n\t\tconst body = { languages: this.objToArray(raw_body) };\n\n\t\treturn this.createPromise(\n\t\t\t\"POST\",\n\t\t\trequest_params,\n\t\t\tthis.populateArrayFromJsonBulk,\n\t\t\tbody,\n\t\t);\n\t}\n\n\tget(\n\t\tlang_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doGet(lang_id, request_params);\n\t}\n\n\tupdate(\n\t\tlang_id: string | number,\n\t\tlang_params: UpdateLanguageParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doUpdate(lang_id, lang_params, request_params);\n\t}\n\n\tdelete(\n\t\tlang_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn super.doDelete(lang_id, request_params);\n\t}\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { Order as OrderInterface } from \"../interfaces/order.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Order extends BaseModel implements OrderInterface {\n\tdeclare order_id: string;\n\tdeclare project_id: string;\n\tdeclare branch: string;\n\tdeclare card_id: number | string;\n\tdeclare status: string;\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n\tdeclare created_by: number;\n\tdeclare created_by_email: string;\n\tdeclare source_language_iso: string;\n\tdeclare target_language_isos: string[];\n\tdeclare keys: number[] | string[];\n\tdeclare source_words: Keyable;\n\tdeclare provider_slug: string;\n\tdeclare translation_style: string;\n\tdeclare translation_tier: number;\n\tdeclare translation_tier_name: string;\n\tdeclare briefing: string;\n\tdeclare total: number;\n\tdeclare payment_method: string | null;\n\tdeclare is_saved_to_translation_memory: boolean;\n\tdeclare dry_run: boolean;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { Order } from \"../models/order.js\";\nimport type { TeamOnly } from \"../types/common_get_params.js\";\nimport type { CreateOrderParams } from \"../types/orders.js\";\nimport type { TeamWithPagination } from \"../types/teams.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Orders extends BaseCollection {\n\tprotected static override prefixURI = \"teams/{!:team_id}/orders/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Order {\n\t\treturn Order;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"orders\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn null;\n\t}\n\n\tlist(request_params: TeamWithPagination): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tcreate(\n\t\torder_params: CreateOrderParams,\n\t\trequest_params: TeamOnly,\n\t): Promise {\n\t\treturn this.doCreate(\n\t\t\torder_params,\n\t\t\trequest_params,\n\t\t\tthis.populateObjectFromJsonRoot,\n\t\t);\n\t}\n\n\tget(order_id: string | number, request_params: TeamOnly): Promise {\n\t\treturn this.doGet(order_id, request_params);\n\t}\n}\n","import type { PaymentCard as PaymentCardInterface } from \"../interfaces/payment_card.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class PaymentCard extends BaseModel implements PaymentCardInterface {\n\tdeclare card_id: number;\n\tdeclare last4: string;\n\tdeclare brand: string;\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { PaymentCard } from \"../models/payment_card.js\";\nimport type { CardDeleted, CreateCardParams } from \"../types/cards.js\";\nimport type { PaginationParams } from \"../types/common_get_params.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class PaymentCards extends BaseCollection {\n\tprotected static override prefixURI = \"payment_cards/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => PaymentCard {\n\t\treturn PaymentCard;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"payment_cards\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"payment_card\";\n\t}\n\n\tlist(\n\t\trequest_params: PaginationParams = {},\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tcreate(card_params: CreateCardParams): Promise {\n\t\treturn this.doCreate(card_params);\n\t}\n\n\tget(card_id: string | number): Promise {\n\t\treturn this.doGet(card_id);\n\t}\n\n\tdelete(card_id: string | number): Promise {\n\t\treturn this.doDelete(card_id);\n\t}\n}\n","import type { PermissionTemplate as PermissionTemplateInterface } from \"../interfaces/permission_template.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class PermissionTemplate\n\textends BaseModel\n\timplements PermissionTemplateInterface\n{\n\tdeclare id: number;\n\tdeclare role: string;\n\tdeclare permissions: string[];\n\tdeclare description: string;\n\tdeclare tag: string;\n\tdeclare tagColor: string;\n\tdeclare tagInfo: string | null;\n\tdeclare doesEnableAllReadOnlyLanguages: boolean;\n}\n","import type { PaginatedResult } from \"../interfaces/index.js\";\nimport type { Keyable } from \"../interfaces/keyable.js\";\nimport { PermissionTemplate } from \"../models/permission_template.js\";\nimport type { TeamOnly } from \"../types/index.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class PermissionTemplates extends BaseCollection {\n\tprotected static override prefixURI = \"teams/{!:team_id}/roles\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => PermissionTemplate {\n\t\treturn PermissionTemplate;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"roles\";\n\t}\n\n\tlist(request_params: TeamOnly): Promise> {\n\t\treturn this.doList(request_params) as Promise<\n\t\t\tPaginatedResult\n\t\t>;\n\t}\n}\n","import type { Project as ProjectInterface } from \"../interfaces/project.js\";\nimport type { ProjectSettings } from \"../interfaces/project_settings.js\";\nimport type { ProjectStatistics } from \"../interfaces/project_statistics.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Project extends BaseModel implements ProjectInterface {\n\tdeclare project_id: string;\n\tdeclare project_type: string;\n\tdeclare uuid?: string;\n\tdeclare name: string;\n\tdeclare description: string;\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n\tdeclare created_by: number;\n\tdeclare created_by_email: string;\n\tdeclare team_id: number;\n\tdeclare base_language_id: number;\n\tdeclare base_language_iso: string;\n\tdeclare settings: ProjectSettings;\n\tdeclare statistics: ProjectStatistics;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { Project } from \"../models/project.js\";\nimport type {\n\tCreateProjectParams,\n\tProjectDeleted,\n\tProjectEmptied,\n\tProjectListParams,\n\tUpdateProjectParams,\n} from \"../types/projects.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Projects extends BaseCollection {\n\tprotected static override prefixURI = \"projects/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Project {\n\t\treturn Project;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"projects\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn null;\n\t}\n\n\tlist(\n\t\trequest_params: ProjectListParams = {},\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tcreate(project_params: CreateProjectParams): Promise {\n\t\treturn this.doCreate(project_params);\n\t}\n\n\tget(project_id: string | number): Promise {\n\t\treturn this.doGet(project_id);\n\t}\n\n\tupdate(\n\t\tproject_id: string | number,\n\t\tproject_params: UpdateProjectParams,\n\t): Promise {\n\t\treturn this.doUpdate(\n\t\t\tproject_id,\n\t\t\tproject_params,\n\t\t\t{},\n\t\t\tthis.populateObjectFromJson,\n\t\t);\n\t}\n\n\tdelete(project_id: string | number): Promise {\n\t\treturn this.doDelete(project_id);\n\t}\n\n\tempty(project_id: any): Promise {\n\t\treturn this.createPromise(\n\t\t\t\"PUT\",\n\t\t\t{ project_id: project_id },\n\t\t\tthis.returnBareJSON,\n\t\t\tnull,\n\t\t\t\"projects/{!:project_id}/empty\",\n\t\t);\n\t}\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { QueuedProcess } from \"../models/queued_process.js\";\nimport type {\n\tProjectOnly,\n\tProjectWithPagination,\n} from \"../types/common_get_params.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class QueuedProcesses extends BaseCollection {\n\tprotected static override prefixURI =\n\t\t\"projects/{!:project_id}/processes/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => QueuedProcess {\n\t\treturn QueuedProcess;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"processes\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"process\";\n\t}\n\n\tlist(\n\t\trequest_params: ProjectWithPagination,\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise<\n\t\t\tPaginatedResult\n\t\t>;\n\t}\n\n\tget(\n\t\tprocess_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doGet(process_id, request_params);\n\t}\n}\n","import type { Screenshot as ScreenshotInterface } from \"../interfaces/screenshot.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Screenshot extends BaseModel implements ScreenshotInterface {\n\tdeclare screenshot_id: number;\n\tdeclare key_ids: number[];\n\tdeclare keys: Array<{\n\t\tkey_id: number;\n\t\tcoordinates: {\n\t\t\tleft: number;\n\t\t\ttop: number;\n\t\t\twidth: number;\n\t\t\theight: number;\n\t\t};\n\t}>;\n\tdeclare url: string;\n\tdeclare title: string;\n\tdeclare description: string;\n\tdeclare screenshot_tags: string[];\n\tdeclare width: number;\n\tdeclare height: number;\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n}\n","import type { BulkResult } from \"../interfaces/bulk_result.js\";\nimport type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { Screenshot } from \"../models/screenshot.js\";\nimport type {\n\tProjectOnly,\n\tProjectWithPagination,\n} from \"../types/common_get_params.js\";\nimport type {\n\tCreateScreenshotParams,\n\tScreenshotDeleted,\n\tUpdateScreenshotParams,\n} from \"../types/screenshots.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Screenshots extends BaseCollection {\n\tprotected static override prefixURI =\n\t\t\"projects/{!:project_id}/screenshots/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Screenshot {\n\t\treturn Screenshot;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"screenshots\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"screenshot\";\n\t}\n\n\tlist(\n\t\trequest_params: ProjectWithPagination,\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tcreate(\n\t\traw_body: CreateScreenshotParams | CreateScreenshotParams[],\n\t\trequest_params: ProjectOnly,\n\t): Promise> {\n\t\tconst body = { screenshots: this.objToArray(raw_body) };\n\n\t\treturn this.createPromise(\n\t\t\t\"POST\",\n\t\t\trequest_params,\n\t\t\tthis.populateArrayFromJsonBulk,\n\t\t\tbody,\n\t\t);\n\t}\n\n\tget(\n\t\tscrenshot_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doGet(screnshot_id, request_params);\n\t}\n\n\tupdate(\n\t\tscreenshot_id: string | number,\n\t\tscreenshot_params: UpdateScreenshotParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doUpdate(screenshot_id, screenshot_params, request_params);\n\t}\n\n\tdelete(\n\t\tscreenshot_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doDelete(screenshot_id, request_params);\n\t}\n}\n","import type { Segment as SegmentInterface } from \"../interfaces/segment.js\";\nimport { BaseModel } from \"./base_model.js\";\nimport type { TranslationStatus } from \"./translation_status.js\";\n\nexport class Segment extends BaseModel implements SegmentInterface {\n\tdeclare segment_number: number;\n\tdeclare language_iso: string;\n\tdeclare modified_at: string;\n\tdeclare modified_at_timestamp: number;\n\tdeclare modified_by: number;\n\tdeclare modified_by_email: string;\n\tdeclare value: string;\n\tdeclare is_fuzzy: boolean;\n\tdeclare is_reviewed: boolean;\n\tdeclare reviewed_by: number;\n\tdeclare words: number;\n\tdeclare custom_translation_statuses: TranslationStatus[];\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport { Segment } from \"../models/segment.js\";\nimport type {\n\tGetSegmentParams,\n\tListSegmentParams,\n\tUpdateSegmentBodyParams,\n\tUpdateSegmentReqParams,\n} from \"../types/segments.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Segments extends BaseCollection {\n\tprotected static override prefixURI =\n\t\t\"projects/{!:project_id}/keys/{!:key_id}/segments/{!:language_iso}/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Segment {\n\t\treturn Segment;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"segments\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"segment\";\n\t}\n\n\tlist(request_params: ListSegmentParams): Promise {\n\t\treturn this.doList(request_params) as Promise;\n\t}\n\n\tget(\n\t\tsegment_number: string | number,\n\t\trequest_params: GetSegmentParams,\n\t): Promise {\n\t\treturn this.doGet(segment_number, request_params);\n\t}\n\n\tupdate(\n\t\tsegment_number: string | number,\n\t\tsegment_params: UpdateSegmentBodyParams,\n\t\trequest_params: UpdateSegmentReqParams,\n\t): Promise {\n\t\treturn this.doUpdate(segment_number, segment_params, request_params);\n\t}\n}\n","import type { Snapshot as SnapshotInterface } from \"../interfaces/snapshot.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Snapshot extends BaseModel implements SnapshotInterface {\n\tdeclare snapshot_id: number;\n\tdeclare title: string;\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n\tdeclare created_by: number;\n\tdeclare created_by_email: string;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport type { Project } from \"../models/project.js\";\nimport { Snapshot } from \"../models/snapshot.js\";\nimport type {\n\tProjectOnly,\n\tProjectWithPagination,\n} from \"../types/common_get_params.js\";\nimport type {\n\tCreateSnapshotParams,\n\tSnapshotDeleted,\n} from \"../types/snapshots.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Snapshots extends BaseCollection {\n\tprotected static override prefixURI =\n\t\t\"projects/{!:project_id}/snapshots/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Snapshot {\n\t\treturn Snapshot;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"snapshots\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"snapshot\";\n\t}\n\n\tlist(\n\t\trequest_params: ProjectWithPagination,\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tcreate(\n\t\tsnapshot_params: CreateSnapshotParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doCreate(\n\t\t\tsnapshot_params,\n\t\t\trequest_params,\n\t\t\tthis.populateObjectFromJsonRoot,\n\t\t);\n\t}\n\n\trestore(\n\t\tsnapshot_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\tconst params = {\n\t\t\t...request_params,\n\t\t\t...{ id: snapshot_id },\n\t\t};\n\n\t\treturn this.createPromise(\"POST\", params, this.returnBareJSON, {});\n\t}\n\n\tdelete(\n\t\tsnapshot_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doDelete(snapshot_id, request_params);\n\t}\n}\n","import type { Task as TaskInterface } from \"../interfaces/task.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Task extends BaseModel implements TaskInterface {\n\tdeclare task_id: number;\n\tdeclare title: string;\n\tdeclare description: string;\n\tdeclare status: string;\n\tdeclare progress: number;\n\tdeclare due_date: string;\n\tdeclare due_date_timestamp: number;\n\tdeclare keys_count: number;\n\tdeclare words_count: number;\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n\tdeclare created_by: number;\n\tdeclare created_by_email: string;\n\tdeclare can_be_parent: boolean;\n\tdeclare task_type: string;\n\tdeclare parent_task_id: number;\n\tdeclare closing_tags: string[];\n\tdeclare do_lock_translations: boolean;\n\tdeclare languages: Array<{\n\t\tlanguage_iso: string;\n\t\tusers: Array<{\n\t\t\tuser_id: string | number;\n\t\t\temail: string;\n\t\t\tfullname: string;\n\t\t}>;\n\t\tgroups: Array<{\n\t\t\tid: string | number;\n\t\t\tname: string;\n\t\t}>;\n\t\tkeys: string[] | number[];\n\t\tstatus: string;\n\t\tprogress: number;\n\t\tinitial_tm_leverage: {\n\t\t\t\"0%+\": number;\n\t\t\t\"60%+\": number;\n\t\t\t\"75%+\": number;\n\t\t\t\"95%+\": number;\n\t\t\t\"100%\": number;\n\t\t};\n\t\ttm_leverage: {\n\t\t\tstatus: string;\n\t\t\tvalue: {\n\t\t\t\t\"0%+\": number;\n\t\t\t\t\"50%+\": number;\n\t\t\t\t\"75%+\": number;\n\t\t\t\t\"85%+\": number;\n\t\t\t\t\"95%+\": number;\n\t\t\t\t\"100%\": number;\n\t\t\t};\n\t\t};\n\t\tkeys_count: number;\n\t\twords_count: number;\n\t\tcompleted_at: string;\n\t\tcompleted_at_timestamp: number;\n\t\tcompleted_by: number;\n\t\tcompleted_by_email: string;\n\t}>;\n\tdeclare source_language_iso: string;\n\tdeclare auto_close_languages: boolean;\n\tdeclare auto_close_task: boolean;\n\tdeclare auto_close_items: boolean;\n\tdeclare completed_at: string;\n\tdeclare completed_at_timestamp: number;\n\tdeclare completed_by: number;\n\tdeclare completed_by_email: string;\n\tdeclare custom_translation_status_ids: number[];\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { Task } from \"../models/task.js\";\nimport type { ProjectOnly } from \"../types/common_get_params.js\";\nimport type {\n\tCreateTaskParams,\n\tListTaskParams,\n\tTaskDeleted,\n\tUpdateTaskParams,\n} from \"../types/tasks.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Tasks extends BaseCollection {\n\tprotected static override prefixURI = \"projects/{!:project_id}/tasks/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Task {\n\t\treturn Task;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"tasks\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"task\";\n\t}\n\n\tlist(request_params: ListTaskParams): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tcreate(\n\t\ttask_params: CreateTaskParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doCreate(\n\t\t\ttask_params,\n\t\t\trequest_params,\n\t\t\tthis.populateObjectFromJsonRoot,\n\t\t);\n\t}\n\n\tget(task_id: string | number, request_params: ProjectOnly): Promise {\n\t\treturn this.doGet(task_id, request_params);\n\t}\n\n\tupdate(\n\t\ttask_id: string | number,\n\t\ttask_params: UpdateTaskParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doUpdate(task_id, task_params, request_params);\n\t}\n\n\tdelete(\n\t\ttask_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doDelete(task_id, request_params);\n\t}\n}\n","import type { TeamUserBillingDetails as TeamUserBillingDetailsInterface } from \"../interfaces/team_user_billing_details.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class TeamUserBillingDetails\n\textends BaseModel\n\timplements TeamUserBillingDetailsInterface\n{\n\tdeclare billing_email: string;\n\tdeclare country_code: string;\n\tdeclare zip: string;\n\tdeclare state_code: string;\n\tdeclare address1: string;\n\tdeclare address2: string;\n\tdeclare city: string;\n\tdeclare phone: string;\n\tdeclare company: string;\n\tdeclare vatnumber: string;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport { TeamUserBillingDetails as BillingDetailsModel } from \"../models/team_user_billing_details.js\";\nimport type { BillingDetailsParams } from \"../types/billing_details.js\";\nimport type { TeamOnly } from \"../types/common_get_params.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class TeamUserBillingDetails extends BaseCollection {\n\tprotected static override prefixURI = \"teams/{!:team_id}/billing_details\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => BillingDetailsModel {\n\t\treturn BillingDetailsModel;\n\t}\n\n\tget(team_id: string | number): Promise {\n\t\tconst params = { team_id: team_id };\n\t\treturn this.createPromise(\"GET\", params, this.populateObjectFromJson, null);\n\t}\n\n\tcreate(\n\t\tbilling_details_params: BillingDetailsParams,\n\t\trequest_params: TeamOnly,\n\t): Promise {\n\t\treturn this.doCreate(billing_details_params, request_params);\n\t}\n\n\tupdate(\n\t\tteam_id: string | number,\n\t\tbilling_details_params: BillingDetailsParams,\n\t): Promise {\n\t\tconst params = { team_id: team_id };\n\t\treturn this.createPromise(\n\t\t\t\"PUT\",\n\t\t\tparams,\n\t\t\tthis.populateObjectFromJson,\n\t\t\tbilling_details_params,\n\t\t);\n\t}\n}\n","import type { TeamUser as TeamUserInterface } from \"../interfaces/team_user.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class TeamUser extends BaseModel implements TeamUserInterface {\n\tdeclare user_id: number;\n\tdeclare email: string;\n\tdeclare fullname: string;\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n\tdeclare role: string;\n\tdeclare uuid?: string;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { TeamUser } from \"../models/team_user.js\";\nimport type { TeamOnly } from \"../types/common_get_params.js\";\nimport type { TeamUserDeleted, TeamUserParams } from \"../types/team_users.js\";\nimport type { TeamWithPagination } from \"../types/teams.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class TeamUsers extends BaseCollection {\n\tprotected static override prefixURI = \"teams/{!:team_id}/users/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => TeamUser {\n\t\treturn TeamUser;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"team_users\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"team_user\";\n\t}\n\n\tlist(request_params: TeamWithPagination): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tget(\n\t\tteam_user_id: string | number,\n\t\trequest_params: TeamOnly,\n\t): Promise {\n\t\treturn this.doGet(team_user_id, request_params);\n\t}\n\n\tupdate(\n\t\tteam_user_id: string | number,\n\t\tteam_user_params: TeamUserParams,\n\t\trequest_params: TeamOnly,\n\t): Promise {\n\t\treturn this.doUpdate(team_user_id, team_user_params, request_params);\n\t}\n\n\tdelete(\n\t\tteam_user_id: string | number,\n\t\trequest_params: TeamOnly,\n\t): Promise {\n\t\treturn this.doDelete(team_user_id, request_params);\n\t}\n}\n","import type { Team as TeamInterface } from \"../interfaces/team.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Team extends BaseModel implements TeamInterface {\n\tdeclare team_id: number;\n\tdeclare name: string;\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n\tdeclare plan: string;\n\tdeclare quota_usage: {\n\t\tusers: number;\n\t\tkeys: number;\n\t\tprojects: number;\n\t\tmau: number;\n\t\tai_words: number;\n\t};\n\tdeclare quota_allowed: {\n\t\tusers: number;\n\t\tkeys: number;\n\t\tprojects: number;\n\t\tmau: number;\n\t\tai_words: number;\n\t};\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { Team } from \"../models/team.js\";\nimport type { PaginationParams } from \"../types/common_get_params.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Teams extends BaseCollection {\n\tprotected static override prefixURI = \"teams\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Team {\n\t\treturn Team;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"teams\";\n\t}\n\n\tlist(request_params: PaginationParams = {}): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n}\n","import type { TranslationProvider as TranslationProviderInterface } from \"../interfaces/translation_provider.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class TranslationProvider\n\textends BaseModel\n\timplements TranslationProviderInterface\n{\n\tdeclare provider_id: number;\n\tdeclare name: string;\n\tdeclare slug: string;\n\tdeclare price_pair_min: number;\n\tdeclare website_url: string;\n\tdeclare description: string;\n\tdeclare tiers: Array<{\n\t\ttier_id: number;\n\t\ttitle: string;\n\t}>;\n\tdeclare pairs: Array<{\n\t\ttier_id: number;\n\t\tfrom_lang_iso: string;\n\t\tfrom_lang_name: string;\n\t\tto_lang_iso: string;\n\t\tto_lang_name: string;\n\t\tprice_per_word: number;\n\t}>;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { TranslationProvider } from \"../models/translation_provider.js\";\nimport type { TeamOnly } from \"../types/common_get_params.js\";\nimport type { TeamWithPagination } from \"../types/teams.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class TranslationProviders extends BaseCollection {\n\tprotected static override prefixURI =\n\t\t\"teams/{!:team_id}/translation_providers/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => TranslationProvider {\n\t\treturn TranslationProvider;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"translation_providers\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn null;\n\t}\n\n\tlist(\n\t\trequest_params: TeamWithPagination,\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise<\n\t\t\tPaginatedResult\n\t\t>;\n\t}\n\n\tget(\n\t\tprovider_id: string | number,\n\t\trequest_params: TeamOnly,\n\t): Promise {\n\t\treturn this.doGet(provider_id, request_params);\n\t}\n}\n","import type { TranslationStatus as TranslationStatusInterface } from \"../interfaces/translation_status.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class TranslationStatus\n\textends BaseModel\n\timplements TranslationStatusInterface\n{\n\tdeclare status_id: number;\n\tdeclare title: string;\n\tdeclare color: string;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { TranslationStatus } from \"../models/translation_status.js\";\nimport type {\n\tProjectOnly,\n\tProjectWithPagination,\n} from \"../types/common_get_params.js\";\nimport type {\n\tCreateTranslationStatusParams,\n\tTranslationStatusColors,\n\tTranslationStatusDeleted,\n\tUpdateTranslationStatusParams,\n} from \"../types/translation_statuses.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class TranslationStatuses extends BaseCollection {\n\tprotected static override prefixURI =\n\t\t\"projects/{!:project_id}/custom_translation_statuses/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => TranslationStatus {\n\t\treturn TranslationStatus;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"custom_translation_statuses\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"custom_translation_status\";\n\t}\n\n\tlist(\n\t\trequest_params: ProjectWithPagination,\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise<\n\t\t\tPaginatedResult\n\t\t>;\n\t}\n\n\tcreate(\n\t\ttranslation_status_params: CreateTranslationStatusParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doCreate(\n\t\t\ttranslation_status_params,\n\t\t\trequest_params,\n\t\t\tthis.populateObjectFromJsonRoot,\n\t\t);\n\t}\n\n\tget(\n\t\ttranslation_status_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doGet(translation_status_id, request_params);\n\t}\n\n\tupdate(\n\t\ttranslation_status_id: string | number,\n\t\ttranslation_status_params: UpdateTranslationStatusParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doUpdate(\n\t\t\ttranslation_status_id,\n\t\t\ttranslation_status_params,\n\t\t\trequest_params,\n\t\t);\n\t}\n\n\tdelete(\n\t\ttranslation_status_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doDelete(translation_status_id, request_params);\n\t}\n\n\tavailable_colors(\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.createPromise(\n\t\t\t\"GET\",\n\t\t\trequest_params,\n\t\t\tthis.returnBareJSON,\n\t\t\t{},\n\t\t\t\"projects/{!:project_id}/custom_translation_statuses/colors\",\n\t\t);\n\t}\n}\n","import type { Translation as TranslationInterface } from \"../interfaces/translation.js\";\nimport type { TranslationStatus } from \"../interfaces/translation_status.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Translation extends BaseModel implements TranslationInterface {\n\tdeclare translation_id: number;\n\tdeclare key_id: number;\n\tdeclare language_iso: string;\n\tdeclare modified_at: string;\n\tdeclare modified_at_timestamp: number;\n\tdeclare modified_by: number;\n\tdeclare modified_by_email: string;\n\tdeclare translation: string;\n\tdeclare is_unverified: boolean;\n\tdeclare is_reviewed: boolean;\n\tdeclare reviewed_by: number;\n\tdeclare is_fuzzy: boolean;\n\tdeclare words: number;\n\tdeclare custom_translation_statuses: TranslationStatus[];\n\tdeclare task_id: number;\n\tdeclare segment_number: number;\n}\n","import type { CursorPaginatedResult } from \"../interfaces/cursor_paginated_result.js\";\nimport type { Keyable } from \"../interfaces/keyable.js\";\nimport { Translation } from \"../models/translation.js\";\nimport type { ProjectOnly } from \"../types/common_get_params.js\";\nimport type {\n\tGetTranslationParams,\n\tListTranslationParams,\n\tUpdateTranslationParams,\n} from \"../types/translations.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Translations extends BaseCollection {\n\tprotected static override prefixURI =\n\t\t\"projects/{!:project_id}/translations/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Translation {\n\t\treturn Translation;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"translations\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"translation\";\n\t}\n\n\tlist(\n\t\trequest_params: ListTranslationParams,\n\t): Promise> {\n\t\treturn this.doListCursor(request_params);\n\t}\n\n\tget(\n\t\ttranslation_id: string | number,\n\t\trequest_params: GetTranslationParams,\n\t): Promise {\n\t\treturn this.doGet(translation_id, request_params);\n\t}\n\n\tupdate(\n\t\ttranslation_id: string | number,\n\t\ttranslation_params: UpdateTranslationParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doUpdate(translation_id, translation_params, request_params);\n\t}\n}\n","import type { UserGroup as UserGroupInterface } from \"../interfaces/user_group.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class UserGroup extends BaseModel implements UserGroupInterface {\n\tdeclare group_id: number;\n\tdeclare name: string;\n\tdeclare permissions: {\n\t\tis_admin: boolean; // deprecated\n\t\tis_reviewer: boolean; // deprecated\n\t\tadmin_rights: string[];\n\t\tlanguages: Array<{\n\t\t\tlang_id: number;\n\t\t\tlang_iso: string;\n\t\t\tlang_name: string;\n\t\t\tis_writable: boolean;\n\t\t}>;\n\t};\n\tdeclare created_at: string;\n\tdeclare created_at_timestamp: number;\n\tdeclare team_id: number;\n\tdeclare projects: string[] | number[];\n\tdeclare members: number[] | string[];\n\tdeclare role_id: number | null;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { UserGroup } from \"../models/user_group.js\";\nimport type { TeamOnly } from \"../types/common_get_params.js\";\nimport type { TeamWithPagination } from \"../types/teams.js\";\nimport type {\n\tUserGroupDeleted,\n\tUserGroupParams,\n} from \"../types/user_groups.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class UserGroups extends BaseCollection {\n\tprotected static override prefixURI = \"teams/{!:team_id}/groups/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => UserGroup {\n\t\treturn UserGroup;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"user_groups\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn null;\n\t}\n\n\tlist(\n\t\trequest_params: TeamWithPagination,\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tcreate(\n\t\tuser_group_params: UserGroupParams,\n\t\trequest_params: TeamOnly,\n\t): Promise {\n\t\treturn this.doCreate(\n\t\t\tuser_group_params,\n\t\t\trequest_params,\n\t\t\tthis.populateGroupFromJsonRoot,\n\t\t);\n\t}\n\n\tget(\n\t\tuser_group_id: string | number,\n\t\trequest_params: TeamOnly,\n\t): Promise {\n\t\treturn this.doGet(user_group_id, request_params);\n\t}\n\n\tupdate(\n\t\tuser_group_id: string | number,\n\t\tuser_group_params: UserGroupParams,\n\t\trequest_params: TeamOnly,\n\t): Promise {\n\t\treturn this.doUpdate(\n\t\t\tuser_group_id,\n\t\t\tuser_group_params,\n\t\t\trequest_params,\n\t\t\tthis.populateGroupFromJsonRoot,\n\t\t);\n\t}\n\n\tdelete(\n\t\tuser_group_id: string | number,\n\t\trequest_params: TeamOnly,\n\t): Promise {\n\t\treturn this.doDelete(user_group_id, request_params);\n\t}\n\n\tadd_members_to_group(\n\t\tteam_id: string | number,\n\t\tgroup_id: string | number,\n\t\tuser_ids: string[] | number[],\n\t): Promise {\n\t\tconst params = {\n\t\t\tteam_id: team_id,\n\t\t\tgroup_id: group_id,\n\t\t};\n\t\tconst body = { users: user_ids };\n\t\treturn this.createPromise(\n\t\t\t\"PUT\",\n\t\t\tparams,\n\t\t\tthis.populateGroupFromJsonRoot,\n\t\t\tbody,\n\t\t\t\"teams/{!:team_id}/groups/{!:group_id}/members/add\",\n\t\t);\n\t}\n\n\tremove_members_from_group(\n\t\tteam_id: string | number,\n\t\tgroup_id: string | number,\n\t\tuser_ids: string[] | number[],\n\t): Promise {\n\t\tconst params = {\n\t\t\tteam_id: team_id,\n\t\t\tgroup_id: group_id,\n\t\t};\n\t\tconst body = { users: user_ids };\n\t\treturn this.createPromise(\n\t\t\t\"PUT\",\n\t\t\tparams,\n\t\t\tthis.populateGroupFromJsonRoot,\n\t\t\tbody,\n\t\t\t\"teams/{!:team_id}/groups/{!:group_id}/members/remove\",\n\t\t);\n\t}\n\n\tadd_projects_to_group(\n\t\tteam_id: string | number,\n\t\tgroup_id: string | number,\n\t\tproject_ids: string[] | number[],\n\t): Promise {\n\t\tconst params = {\n\t\t\tteam_id: team_id,\n\t\t\tgroup_id: group_id,\n\t\t};\n\t\tconst body = { projects: project_ids };\n\t\treturn this.createPromise(\n\t\t\t\"PUT\",\n\t\t\tparams,\n\t\t\tthis.populateGroupFromJsonRoot,\n\t\t\tbody,\n\t\t\t\"teams/{!:team_id}/groups/{!:group_id}/projects/add\",\n\t\t);\n\t}\n\n\tremove_projects_from_group(\n\t\tteam_id: string | number,\n\t\tgroup_id: string | number,\n\t\tproject_ids: string[] | number[],\n\t): Promise {\n\t\tconst params = {\n\t\t\tteam_id: team_id,\n\t\t\tgroup_id: group_id,\n\t\t};\n\t\tconst body = { projects: project_ids };\n\t\treturn this.createPromise(\n\t\t\t\"PUT\",\n\t\t\tparams,\n\t\t\tthis.populateGroupFromJsonRoot,\n\t\t\tbody,\n\t\t\t\"teams/{!:team_id}/groups/{!:group_id}/projects/remove\",\n\t\t);\n\t}\n\n\tprotected populateGroupFromJsonRoot(\n\t\tjson: Keyable,\n\t\theaders: Headers,\n\t): UserGroup {\n\t\tconst formatted_json = json.group;\n\t\treturn this.populateObjectFromJson(formatted_json, headers);\n\t}\n}\n","import type { Webhook as WebhookInterface } from \"../interfaces/webhook.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class Webhook extends BaseModel implements WebhookInterface {\n\tdeclare webhook_id: string;\n\tdeclare branch: string;\n\tdeclare url: string;\n\tdeclare secret: string;\n\tdeclare events: string[];\n\tdeclare event_lang_map: Array<{\n\t\tevent: string;\n\t\tlang_iso_codes: string[];\n\t}>;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport type { PaginatedResult } from \"../interfaces/paginated_result.js\";\nimport { Webhook } from \"../models/webhook.js\";\nimport type {\n\tProjectOnly,\n\tProjectWithPagination,\n} from \"../types/common_get_params.js\";\nimport type {\n\tCreateWebhookParams,\n\tUpdateWebhookParams,\n\tWebhookDeleted,\n\tWebhookRegenerated,\n} from \"../types/webhooks.js\";\nimport { BaseCollection } from \"./base_collection.js\";\n\nexport class Webhooks extends BaseCollection {\n\tprotected static override prefixURI =\n\t\t\"projects/{!:project_id}/webhooks/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Webhook {\n\t\treturn Webhook;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"webhooks\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"webhook\";\n\t}\n\n\tlist(\n\t\trequest_params: ProjectWithPagination,\n\t): Promise> {\n\t\treturn this.doList(request_params) as Promise>;\n\t}\n\n\tcreate(\n\t\twebhook_params: CreateWebhookParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doCreate(\n\t\t\twebhook_params,\n\t\t\trequest_params,\n\t\t\tthis.populateObjectFromJsonRoot,\n\t\t);\n\t}\n\n\tget(\n\t\twebhook_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doGet(webhook_id, request_params);\n\t}\n\n\tupdate(\n\t\twebhook_id: string | number,\n\t\twebhook_params: UpdateWebhookParams,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doUpdate(webhook_id, webhook_params, request_params);\n\t}\n\n\tdelete(\n\t\twebhook_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\treturn this.doDelete(webhook_id, request_params);\n\t}\n\n\tregenerate_secret(\n\t\twebhook_id: string | number,\n\t\trequest_params: ProjectOnly,\n\t): Promise {\n\t\tconst params = {\n\t\t\t...request_params,\n\t\t\t...{ id: webhook_id },\n\t\t};\n\t\treturn this.createPromise(\n\t\t\t\"PATCH\",\n\t\t\tparams,\n\t\t\tthis.returnBareJSON,\n\t\t\tnull,\n\t\t\t\"projects/{!:project_id}/webhooks/{:id}/secret/regenerate\",\n\t\t);\n\t}\n}\n","import type { ClientData } from \"../interfaces/client_data.js\";\nimport type { ClientParams } from \"../interfaces/client_params.js\";\n/**\n * A foundational client class that establishes authentication and configuration data.\n * Other specialized clients can inherit from this class to leverage the configured\n * authentication, compression, host, and timeout settings.\n */\nexport class BaseClient {\n\t/**\n\t * Internal client data including token, token type, host, compression, and timeouts.\n\t */\n\treadonly clientData: ClientData = {\n\t\ttoken: \"\",\n\t\ttokenType: \"\",\n\t\tauthHeader: \"x-api-token\",\n\t\tenableCompression: false,\n\t\trequestTimeout: undefined,\n\t};\n\n\t/**\n\t * Constructs a new BaseClient instance.\n\t * @param params - Configuration parameters including API key and optional features.\n\t * @throws Error if the API key is not provided or is empty.\n\t */\n\tconstructor(params: ClientParams) {\n\t\tconst { apiKey } = params;\n\t\tif (!apiKey || apiKey.trim().length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Instantiation failed: A non-empty API key or JWT must be provided.\",\n\t\t\t);\n\t\t}\n\n\t\tthis.clientData.token = apiKey;\n\t\tthis.clientData.enableCompression = params.enableCompression ?? false;\n\t\tthis.clientData.tokenType = params.tokenType ?? \"\";\n\t\tthis.clientData.host = params.host;\n\t\tthis.clientData.requestTimeout = params.requestTimeout;\n\t}\n}\n","import {\n\tBranches,\n\tComments,\n\tContributors,\n\tFiles,\n\tJwt,\n\tKeys,\n\tLanguages,\n\tOrders,\n\tPaymentCards,\n\tPermissionTemplates,\n\tProjects,\n\tQueuedProcesses,\n\tScreenshots,\n\tSegments,\n\tSnapshots,\n\tTasks,\n\tTeamUserBillingDetails,\n\tTeamUsers,\n\tTeams,\n\tTranslationProviders,\n\tTranslationStatuses,\n\tTranslations,\n\tUserGroups,\n\tWebhooks,\n} from \"../collections/index.js\";\n\nimport type { ClientParams } from \"../interfaces/client_params.js\";\nimport { BaseClient } from \"./base_client.js\";\n\n/**\n * A main entry point for interacting with the Lokalise API.\n * Provides easy access to various resource collections (Branches, Comments, Projects, etc.)\n * through dedicated methods.\n */\nexport class LokaliseApi extends BaseClient {\n\t/**\n\t * Creates a new instance of the LokaliseApi client.\n\t * @param params - Configuration parameters including `apiKey` and optional `version`, `host`, etc.\n\t */\n\tconstructor(params: ClientParams) {\n\t\tsuper(params);\n\n\t\t// Default to \"api2\" version if not explicitly provided\n\t\tthis.clientData.version = params.version ?? \"api2\";\n\t\tthis.clientData.authHeader = params.header ?? this.clientData.authHeader;\n\t}\n\n\t/**\n\t * Access Branch-related endpoints.\n\t */\n\tbranches(): Branches {\n\t\treturn new Branches(this.clientData);\n\t}\n\n\t/**\n\t * Access Comment-related endpoints.\n\t */\n\tcomments(): Comments {\n\t\treturn new Comments(this.clientData);\n\t}\n\n\t/**\n\t * Access Contributor-related endpoints.\n\t */\n\tcontributors(): Contributors {\n\t\treturn new Contributors(this.clientData);\n\t}\n\n\t/**\n\t * Access File-related endpoints.\n\t */\n\tfiles(): Files {\n\t\treturn new Files(this.clientData);\n\t}\n\n\t/**\n\t * Access JWT-related endpoints.\n\t */\n\tjwt(): Jwt {\n\t\treturn new Jwt(this.clientData);\n\t}\n\n\t/**\n\t * Access Key-related endpoints.\n\t */\n\tkeys(): Keys {\n\t\treturn new Keys(this.clientData);\n\t}\n\n\t/**\n\t * Access Language-related endpoints.\n\t */\n\tlanguages(): Languages {\n\t\treturn new Languages(this.clientData);\n\t}\n\n\t/**\n\t * Access Order-related endpoints.\n\t */\n\torders(): Orders {\n\t\treturn new Orders(this.clientData);\n\t}\n\n\t/**\n\t * Access Payment Card-related endpoints.\n\t */\n\tpaymentCards(): PaymentCards {\n\t\treturn new PaymentCards(this.clientData);\n\t}\n\n\t/**\n\t * Access Permission Template-related endpoints.\n\t */\n\tpermissionTemplates(): PermissionTemplates {\n\t\treturn new PermissionTemplates(this.clientData);\n\t}\n\n\t/**\n\t * Access Project-related endpoints.\n\t */\n\tprojects(): Projects {\n\t\treturn new Projects(this.clientData);\n\t}\n\n\t/**\n\t * Access Queued Process-related endpoints.\n\t */\n\tqueuedProcesses(): QueuedProcesses {\n\t\treturn new QueuedProcesses(this.clientData);\n\t}\n\n\t/**\n\t * Access Screenshot-related endpoints.\n\t */\n\tscreenshots(): Screenshots {\n\t\treturn new Screenshots(this.clientData);\n\t}\n\n\t/**\n\t * Access Segment-related endpoints.\n\t */\n\tsegments(): Segments {\n\t\treturn new Segments(this.clientData);\n\t}\n\n\t/**\n\t * Access Snapshot-related endpoints.\n\t */\n\tsnapshots(): Snapshots {\n\t\treturn new Snapshots(this.clientData);\n\t}\n\n\t/**\n\t * Access Task-related endpoints.\n\t */\n\ttasks(): Tasks {\n\t\treturn new Tasks(this.clientData);\n\t}\n\n\t/**\n\t * Access Team-related endpoints.\n\t */\n\tteams(): Teams {\n\t\treturn new Teams(this.clientData);\n\t}\n\n\t/**\n\t * Access Team User-related endpoints.\n\t */\n\tteamUsers(): TeamUsers {\n\t\treturn new TeamUsers(this.clientData);\n\t}\n\n\t/**\n\t * Access Team User Billing Detail-related endpoints.\n\t */\n\tteamUserBillingDetails(): TeamUserBillingDetails {\n\t\treturn new TeamUserBillingDetails(this.clientData);\n\t}\n\n\t/**\n\t * Access Translation-related endpoints.\n\t */\n\ttranslations(): Translations {\n\t\treturn new Translations(this.clientData);\n\t}\n\n\t/**\n\t * Access Translation Provider-related endpoints.\n\t */\n\ttranslationProviders(): TranslationProviders {\n\t\treturn new TranslationProviders(this.clientData);\n\t}\n\n\t/**\n\t * Access Translation Status-related endpoints.\n\t */\n\ttranslationStatuses(): TranslationStatuses {\n\t\treturn new TranslationStatuses(this.clientData);\n\t}\n\n\t/**\n\t * Access User Group-related endpoints.\n\t */\n\tuserGroups(): UserGroups {\n\t\treturn new UserGroups(this.clientData);\n\t}\n\n\t/**\n\t * Access Webhook-related endpoints.\n\t */\n\twebhooks(): Webhooks {\n\t\treturn new Webhooks(this.clientData);\n\t}\n}\n","import type { ClientParams } from \"../interfaces/client_params.js\";\nimport { LokaliseApi } from \"./lokalise_api.js\";\n\n/**\n * A specialized client for interacting with the Lokalise API using OAuth authentication.\n * Extends `LokaliseApi` and configures the token type and authorization header to use Bearer tokens.\n */\nexport class LokaliseApiOAuth extends LokaliseApi {\n\t/**\n\t * Constructs a new LokaliseApiOAuth client instance.\n\t * @param params - Configuration parameters including `apiKey` (OAuth token)\n\t * and optionally `tokenType` (defaults to \"Bearer\").\n\t * @throws Error If `apiKey` is missing or empty.\n\t */\n\tconstructor(params: ClientParams) {\n\t\tsuper(params);\n\n\t\t// Default to \"Bearer\" if tokenType not provided.\n\t\tthis.clientData.tokenType = params.tokenType ?? \"Bearer\";\n\n\t\t// For OAuth, the header should be `Authorization`.\n\t\tthis.clientData.authHeader = \"Authorization\";\n\t}\n}\n","import type { OtaBundle as OtaBundleInterface } from \"../../interfaces/ota/ota_bundle.js\";\nimport { BaseModel } from \"./../base_model.js\";\n\nexport class OtaBundle extends BaseModel implements OtaBundleInterface {\n\tdeclare id: number;\n\tdeclare projectId: string;\n\tdeclare isPrerelease: boolean;\n\tdeclare isProduction: boolean;\n\tdeclare createdAt: string;\n\tdeclare createdBy: string;\n\tdeclare framework: string;\n\tdeclare description: string;\n\tdeclare isFrozen: boolean;\n\tdeclare lokaliseId: number;\n\tdeclare fileId: string;\n\tdeclare fileUrl: string;\n\tdeclare modifiedAt: string;\n}\n","import { BaseCollection } from \"../collections/base_collection.js\";\nimport type { Keyable } from \"../interfaces/keyable.js\";\nimport type { HttpMethod } from \"../types/http_method.js\";\n\nexport abstract class OtaCollection<\n\tElementType,\n\tSecondaryType = ElementType,\n> extends BaseCollection {\n\tprotected override doDelete(\n\t\tid: string | number,\n\t\treq_params: Keyable,\n\t): Promise {\n\t\tconst params = { ...req_params, id };\n\t\treturn this.createPromise(\n\t\t\t\"DELETE\",\n\t\t\tparams,\n\t\t\tthis.returnJSONFromData,\n\t\t\tnull,\n\t\t) as Promise;\n\t}\n\n\tprotected returnJSONFromData(json: Keyable): Keyable | Array {\n\t\treturn json.data;\n\t}\n\n\tprotected async createVoidPromise(\n\t\tmethod: HttpMethod,\n\t\tparams: Keyable,\n\t\tbody: object | object[] | null,\n\t\turi: string | null = null,\n\t): Promise {\n\t\tawait this.prepareRequest(method, body, params, uri);\n\t\treturn null;\n\t}\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport { OtaBundle } from \"../models/ota/ota_bundle.js\";\nimport type {\n\tOtaBundleUpdateData,\n\tOtaResourceDeleted,\n\tOtaTeamProject,\n} from \"../types/ota.js\";\nimport { OtaCollection } from \"./ota_collection.js\";\n\nexport class OtaBundleManagement extends OtaCollection {\n\tprotected static override prefixURI =\n\t\t\"teams/{!:teamId}/projects/{!:lokaliseProjectId}/bundles/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => OtaBundle {\n\t\treturn OtaBundle;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"data\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"data\";\n\t}\n\n\tlist(request_params: OtaTeamProject): Promise {\n\t\treturn this.doList(request_params) as Promise;\n\t}\n\n\tget(\n\t\tbundleId: string | number,\n\t\trequestParams: OtaTeamProject,\n\t): Promise {\n\t\treturn this.doGet(bundleId, requestParams);\n\t}\n\n\tupdate(\n\t\tbundleId: string | number,\n\t\tbundleParams: OtaBundleUpdateData,\n\t\trequestParams: OtaTeamProject,\n\t): Promise {\n\t\treturn this.doUpdate(\n\t\t\tbundleId,\n\t\t\tbundleParams,\n\t\t\trequestParams,\n\t\t\tthis.populateObjectFromJsonRoot,\n\t\t\t\"PATCH\",\n\t\t);\n\t}\n\n\tdelete(\n\t\tbundleId: string | number,\n\t\trequestParams: OtaTeamProject,\n\t): Promise {\n\t\treturn this.doDelete(bundleId, requestParams);\n\t}\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport { Branch } from \"../models/branch.js\";\nimport type { OtaTeamProjectFramework } from \"../types/ota.js\";\nimport { OtaCollection } from \"./ota_collection.js\";\n\nexport class OtaBundlePublishing extends OtaCollection {\n\tprotected static override prefixURI =\n\t\t\"teams/{!:teamId}/projects/{!:lokaliseProjectId}/frameworks/{!:framework}/{!:action}\";\n\n\t// This is just a dummy implementation to keep linter happy\n\t// It's not used in this class\n\t// istanbul ignore next\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => Branch {\n\t\t// istanbul ignore next\n\t\treturn Branch;\n\t}\n\n\tpublish(\n\t\tbundleId: number | string,\n\t\trequest_params: OtaTeamProjectFramework,\n\t): Promise {\n\t\tconst params = {\n\t\t\t...request_params,\n\t\t\t...{ action: \"publish\" },\n\t\t};\n\t\treturn this.createVoidPromise(\"POST\", params, {\n\t\t\tbundleId,\n\t\t});\n\t}\n\n\tstage(\n\t\tbundleId: number | string,\n\t\trequest_params: OtaTeamProjectFramework,\n\t): Promise {\n\t\tconst params = {\n\t\t\t...request_params,\n\t\t\t...{ action: \"stage\" },\n\t\t};\n\t\treturn this.createVoidPromise(\"POST\", params, {\n\t\t\tbundleId,\n\t\t});\n\t}\n}\n","import type { OtaBundleArchive as OtaBundleArchiveInterface } from \"../../interfaces/ota/ota_bundle_archive.js\";\nimport { BaseModel } from \"./../base_model.js\";\n\nexport class OtaBundleArchive\n\textends BaseModel\n\timplements OtaBundleArchiveInterface\n{\n\tdeclare url: string;\n\tdeclare version: number;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport { OtaBundleArchive } from \"../models/ota/ota_bundle_archive.js\";\nimport type {\n\tOtaProjectFramework,\n\tOtaRequestBundleParams,\n} from \"../types/ota.js\";\nimport { OtaCollection } from \"./ota_collection.js\";\n\nexport class OtaBundles extends OtaCollection {\n\tprotected static rootElementNameSingular = \"data\";\n\tprotected static override prefixURI =\n\t\t\"lokalise/projects/{!:lokaliseProjectId}/frameworks/{!:framework}\";\n\tprotected static elementClass = OtaBundleArchive;\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => OtaBundleArchive {\n\t\treturn OtaBundleArchive;\n\t}\n\n\tprotected override get rootElementNameSingular(): string {\n\t\treturn \"data\";\n\t}\n\n\tget(\n\t\tbundle_params: OtaRequestBundleParams,\n\t\trequest_params: OtaProjectFramework,\n\t): Promise {\n\t\tconst params = {\n\t\t\t...request_params,\n\t\t\t...bundle_params,\n\t\t};\n\n\t\treturn this.createPromise(\n\t\t\t\"GET\",\n\t\t\tparams,\n\t\t\tthis.populateObjectFromJsonRoot,\n\t\t\tnull,\n\t\t);\n\t}\n}\n","import type { OtaFreezePeriod as OtaFreezePeriodInterface } from \"../../interfaces/ota/ota_freeze_period.js\";\nimport { BaseModel } from \"./../base_model.js\";\n\nexport class OtaFreezePeriod\n\textends BaseModel\n\timplements OtaFreezePeriodInterface\n{\n\tdeclare id: number;\n\tdeclare projectId: number;\n\tdeclare bundleId: number;\n\tdeclare framework: string;\n\tdeclare from: string;\n\tdeclare to: string;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport { OtaFreezePeriod } from \"../models/ota/ota_freeze_period.js\";\nimport type {\n\tOtaFreezePeriodParams,\n\tOtaResourceDeleted,\n\tOtaTeamProject,\n\tOtaTeamProjectFramework,\n} from \"../types/ota.js\";\nimport { OtaCollection } from \"./ota_collection.js\";\n\nexport class OtaFreezePeriods extends OtaCollection {\n\tprotected static override prefixURI =\n\t\t\"teams/{!:teamId}/projects/{!:lokaliseProjectId}/bundle-freezes/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => OtaFreezePeriod {\n\t\treturn OtaFreezePeriod;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"data\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"data\";\n\t}\n\n\tlist(requestParams: OtaTeamProjectFramework): Promise {\n\t\treturn this.doList(requestParams) as Promise;\n\t}\n\n\tcreate(\n\t\tfreezeParams: OtaFreezePeriodParams,\n\t\trequestParams: OtaTeamProject,\n\t): Promise {\n\t\treturn this.doCreate(\n\t\t\tfreezeParams,\n\t\t\trequestParams,\n\t\t\tthis.populateObjectFromJsonRoot,\n\t\t);\n\t}\n\n\tupdate(\n\t\tfreezeId: string | number,\n\t\tfreezeParams: OtaFreezePeriodParams,\n\t\trequestParams: OtaTeamProject,\n\t): Promise {\n\t\treturn this.doUpdate(freezeId, freezeParams, requestParams);\n\t}\n\n\tdelete(\n\t\tfreezeId: string | number,\n\t\trequestParams: OtaTeamProject,\n\t): Promise {\n\t\treturn this.doDelete(freezeId, requestParams);\n\t}\n}\n","import type { OtaSdkToken as OtaSdkTokenInterface } from \"../../interfaces/ota/ota_sdk_token.js\";\nimport { BaseModel } from \"./../base_model.js\";\n\nexport class OtaSdkToken extends BaseModel implements OtaSdkTokenInterface {\n\tdeclare id: number;\n\tdeclare token: string;\n\tdeclare projectId: number;\n\tdeclare lokaliseId: number;\n\tdeclare createdAt: string;\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport { OtaSdkToken } from \"../models/ota/ota_sdk_token.js\";\nimport type { OtaResourceDeleted, OtaTeamProject } from \"../types/ota.js\";\nimport { OtaCollection } from \"./ota_collection.js\";\n\nexport class OtaSdkTokens extends OtaCollection {\n\tprotected static override prefixURI =\n\t\t\"teams/{!:teamId}/projects/{!:lokaliseProjectId}/tokens/{:id}\";\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => OtaSdkToken {\n\t\treturn OtaSdkToken;\n\t}\n\n\tprotected override get rootElementName(): string {\n\t\treturn \"data\";\n\t}\n\n\tprotected override get rootElementNameSingular(): string | null {\n\t\treturn \"data\";\n\t}\n\n\tlist(request_params: OtaTeamProject): Promise {\n\t\treturn this.doList(request_params) as Promise;\n\t}\n\n\tcreate(request_params: OtaTeamProject): Promise {\n\t\treturn this.doCreate(null, request_params, this.populateObjectFromJsonRoot);\n\t}\n\n\tdelete(\n\t\ttokenId: string | number,\n\t\trequest_params: OtaTeamProject,\n\t): Promise {\n\t\treturn this.doDelete(tokenId, request_params);\n\t}\n}\n","import type { OtaStatistics as OtaStatisticsInterface } from \"../../interfaces/ota/ota_statistics.js\";\nimport { BaseModel } from \"./../base_model.js\";\n\nexport class OtaStatistics extends BaseModel implements OtaStatisticsInterface {\n\tdeclare lokaliseProjectId: string;\n\tdeclare from: string;\n\tdeclare to: string;\n\tdeclare sdk: string;\n\tdeclare daily: Array<{\n\t\tdate: string;\n\t\tdownloads: number;\n\t\ttrafficMb: number;\n\t\ttrafficBytes: string;\n\t\tframework: string;\n\t}>;\n\tdeclare monthly: Array<{\n\t\tdate: string;\n\t\tdownloads: number;\n\t\ttrafficMb: number;\n\t\ttrafficBytes: string;\n\t\tframework: string;\n\t}>;\n\tdeclare totals: {\n\t\tdownloads: number;\n\t\ttrafficMb: number;\n\t\ttrafficBytes: string;\n\t};\n}\n","import type { Keyable } from \"../interfaces/keyable.js\";\nimport { OtaStatistics } from \"../models/ota/ota_statistics.js\";\nimport type { OtaTeamProject, OtaUsageParams } from \"../types/ota.js\";\nimport { OtaCollection } from \"./ota_collection.js\";\n\nexport class OtaUsageStatistics extends OtaCollection {\n\tprotected static override prefixURI =\n\t\t\"teams/{!:teamId}/projects/{!:lokaliseProjectId}/stats\";\n\tprotected static elementClass = OtaStatistics;\n\n\tprotected get elementClass(): new (\n\t\tjson: Keyable,\n\t) => OtaStatistics {\n\t\treturn OtaStatistics;\n\t}\n\n\tget(\n\t\tbundle_params: OtaUsageParams,\n\t\trequest_params: OtaTeamProject,\n\t): Promise {\n\t\tconst params = {\n\t\t\t...request_params,\n\t\t\t...bundle_params,\n\t\t};\n\n\t\treturn this.createPromise(\"GET\", params, this.populateObjectFromJson, null);\n\t}\n}\n","import type { ClientParams } from \"../interfaces/client_params.js\";\nimport {\n\tOtaBundleManagement,\n\tOtaBundlePublishing,\n\tOtaFreezePeriods,\n\tOtaSdkTokens,\n\tOtaUsageStatistics,\n} from \"../ota_collections/index.js\";\nimport { BaseClient } from \"./base_client.js\";\n\n/**\n * A specialized client configured for interacting with Lokalise OTA endpoints.\n * Extends `BaseClient` and sets defaults suitable for OTA requests:\n * - `tokenType` defaults to \"Bearer\"\n * - `authHeader` set to \"Authorization\"\n * - `host` defaults to \"https://ota.lokalise.com\"\n * - `version` defaults to \"v3\"\n */\nexport class LokaliseApiOta extends BaseClient {\n\t/**\n\t * Creates a new LokaliseApiOta client instance.\n\t * @param params - Configuration parameters including `apiKey` and optional overrides for tokenType, host, version, etc.\n\t * @throws Error If `apiKey` is missing or empty.\n\t */\n\tconstructor(params: ClientParams) {\n\t\tsuper(params);\n\n\t\tthis.clientData.tokenType = params.tokenType ?? \"Bearer\";\n\t\tthis.clientData.authHeader = \"Authorization\";\n\t\tthis.clientData.host = this.clientData.host ?? \"https://ota.lokalise.com\";\n\t\tthis.clientData.version = params.version ?? \"v3\";\n\t}\n\n\t/**\n\t * Provides access to the OtaBundleManagement collection.\n\t */\n\totaBundleManagement(): OtaBundleManagement {\n\t\treturn new OtaBundleManagement(this.clientData);\n\t}\n\n\t/**\n\t * Provides access to the OtaBundlePublishing collection.\n\t */\n\totaBundlePublishing(): OtaBundlePublishing {\n\t\treturn new OtaBundlePublishing(this.clientData);\n\t}\n\n\t/**\n\t * Provides access to the OtaUsageStatistics collection.\n\t */\n\totaUsageStatistics(): OtaUsageStatistics {\n\t\treturn new OtaUsageStatistics(this.clientData);\n\t}\n\n\t/**\n\t * Provides access to the OtaFreezePeriods collection.\n\t */\n\totaFreezePeriods(): OtaFreezePeriods {\n\t\treturn new OtaFreezePeriods(this.clientData);\n\t}\n\n\t/**\n\t * Provides access to the OtaSdkTokens collection.\n\t */\n\totaSdkTokens(): OtaSdkTokens {\n\t\treturn new OtaSdkTokens(this.clientData);\n\t}\n}\n","import type { ClientParams } from \"../interfaces/client_params.js\";\nimport { OtaBundles } from \"../ota_collections/ota_bundles.js\";\nimport { BaseClient } from \"./base_client.js\";\n\n/**\n * A specialized client for interacting with Lokalise OTA (Over-The-Air) bundle resources.\n * Extends the BaseClient to configure authentication and endpoint specifics for OTA bundles.\n */\nexport class LokaliseOtaBundles extends BaseClient {\n\t/**\n\t * Constructs a new LokaliseOtaBundles client instance.\n\t * @param params - Configuration parameters, including the required `apiKey`.\n\t * Optional parameters include `version`, `host`, etc.\n\t * Defaults: `host` = \"https://ota.lokalise.com\", `version` = \"v3\".\n\t * @throws Error If no valid API key is provided.\n\t */\n\tconstructor(params: ClientParams) {\n\t\tsuper(params);\n\n\t\t// Use the OTA-specific auth header and default host.\n\t\tthis.clientData.authHeader = \"x-ota-api-token\";\n\t\tthis.clientData.host = this.clientData.host ?? \"https://ota.lokalise.com\";\n\n\t\t// Default OTA API version if not provided.\n\t\tthis.clientData.version = params.version ?? \"v3\";\n\t}\n\n\t/**\n\t * Provides access to the OtaBundles collection.\n\t * @returns An OtaBundles instance.\n\t */\n\totaBundles(): OtaBundles {\n\t\treturn new OtaBundles(this.clientData);\n\t}\n}\n","import type { AuthData as AuthDataInterface } from \"../interfaces/auth_data.js\";\nimport { getVersion } from \"../lokalise/pkg.js\";\nimport type { AuthError } from \"../models/auth_error.js\";\nimport type { HttpMethod } from \"../types/http_method.js\";\n\ninterface ResolvedResponse {\n\tjson: T;\n\theaders: Headers;\n}\n\n/**\n * Builds and returns headers for the request.\n */\nasync function buildHeaders(): Promise {\n\tconst headers = new Headers({\n\t\tAccept: \"application/json\",\n\t\t\"User-Agent\": `node-lokalise-api/${await getVersion()}`,\n\t\t\"Content-type\": \"application/json\",\n\t});\n\n\treturn headers;\n}\n\n/**\n * Fetches the response from the API and handles response validation.\n */\nasync function fetchAndHandleResponse(\n\ttarget: URL,\n\toptions: RequestInit,\n): Promise> {\n\ttry {\n\t\tconst response = await fetch(target, options);\n\t\tconst responseJSON = await response.json();\n\n\t\tif (response.ok) {\n\t\t\treturn {\n\t\t\t\tjson: responseJSON,\n\t\t\t\theaders: response.headers,\n\t\t\t};\n\t\t}\n\n\t\tconst error: AuthError = {\n\t\t\tcode: response.status,\n\t\t\t...responseJSON,\n\t\t};\n\t\treturn Promise.reject(error);\n\t} catch (err) {\n\t\tconst error: AuthError = {\n\t\t\terror: (err as Error).message,\n\t\t\tcode: 500,\n\t\t\terror_description: \"\",\n\t\t};\n\t\treturn Promise.reject(error);\n\t}\n}\n\n/**\n * Creates and sends an HTTP request, returning the parsed response.\n */\nexport async function createPromise(\n\turi: string,\n\tmethod: HttpMethod,\n\tbody: object | object[],\n\t{ host, version }: AuthDataInterface,\n): Promise> {\n\tconst fullUri = `/${version}/${uri}`;\n\tconst target = new URL(fullUri, host);\n\n\tconst options: RequestInit = {\n\t\tmethod,\n\t\theaders: await buildHeaders(),\n\t\tbody: JSON.stringify(body),\n\t};\n\n\treturn fetchAndHandleResponse(target, options);\n}\n","import type { AuthData as AuthDataInterface } from \"../interfaces/auth_data.js\";\nimport type { AuthError } from \"../models/auth_error.js\";\nimport type { RefreshTokenResponse } from \"../models/refresh_token_response.js\";\nimport type { RequestTokenResponse } from \"../models/request_token_response.js\";\nimport { createPromise } from \"./auth_request.js\";\n\nexport class LokaliseAuth {\n\tpublic authData: AuthDataInterface;\n\n\t/**\n\t * Instantiate LokaliseAuth to work with OAuth 2 tokens\n\t *\n\t * @param clientId - The client ID (mandatory)\n\t * @param clientSecret - The client secret (mandatory)\n\t * @param host - Optional host, defaults to \"https://app.lokalise.com\"\n\t * @param version - Optional API version, defaults to \"oauth2\"\n\t */\n\tconstructor(\n\t\tclientId: string,\n\t\tclientSecret: string,\n\t\thost = \"https://app.lokalise.com\",\n\t\tversion = \"oauth2\",\n\t) {\n\t\tif (!clientId || !clientSecret) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Error: Instantiation failed: Please pass client ID and client secret\",\n\t\t\t);\n\t\t}\n\n\t\tthis.authData = {\n\t\t\tclient_id: clientId,\n\t\t\tclient_secret: clientSecret,\n\t\t\thost,\n\t\t\tversion,\n\t\t};\n\t}\n\n\t/**\n\t * Generate the authorization URL\n\t *\n\t * @param scope - The scope(s) for the authorization\n\t * @param redirectUri - Optional redirect URI\n\t * @param state - Optional state parameter\n\t * @returns The authorization URL as a string\n\t */\n\tauth(scope: string | string[], redirectUri?: string, state?: string): string {\n\t\tconst scopeString = Array.isArray(scope) ? scope.join(\" \") : scope;\n\n\t\tconst params: Record = {\n\t\t\tclient_id: this.authData.client_id,\n\t\t\tscope: scopeString,\n\t\t\t...(state && { state }),\n\t\t\t...(redirectUri && { redirect_uri: redirectUri }),\n\t\t};\n\n\t\treturn this.buildUrl(params);\n\t}\n\n\t/**\n\t * Exchange an authorization code for an access token\n\t *\n\t * @param code - The authorization code\n\t * @returns A promise resolving to the token response\n\t */\n\ttoken(code: string): Promise {\n\t\tconst params = {\n\t\t\t...this.baseParams(),\n\t\t\tcode,\n\t\t\tgrant_type: \"authorization_code\",\n\t\t};\n\n\t\treturn this.doRequest(params);\n\t}\n\n\t/**\n\t * Refresh an access token using a refresh token\n\t *\n\t * @param refreshToken - The refresh token\n\t * @returns A promise resolving to the token response\n\t */\n\trefresh(refreshToken: string): Promise {\n\t\tconst params = {\n\t\t\t...this.baseParams(),\n\t\t\trefresh_token: refreshToken,\n\t\t\tgrant_type: \"refresh_token\",\n\t\t};\n\n\t\treturn this.doRequest(params);\n\t}\n\n\t/**\n\t * Internal method to perform the API request\n\t *\n\t * @param params - Request parameters\n\t * @returns A promise resolving to the API response\n\t */\n\tprivate async doRequest(params: Record): Promise {\n\t\ttry {\n\t\t\tconst data = await createPromise(\"token\", \"POST\", params, this.authData);\n\n\t\t\treturn data.json as T;\n\t\t} catch (err) {\n\t\t\tthrow this.handleReject(err);\n\t\t}\n\t}\n\n\t/**\n\t * Build the authorization URL\n\t *\n\t * @param params - URL parameters\n\t * @returns The complete URL as a string\n\t */\n\tprivate buildUrl(params: Record): string {\n\t\tconst url = new URL(\"auth\", this.authData.host);\n\t\turl.search = new URLSearchParams(params).toString();\n\t\treturn url.toString();\n\t}\n\n\t/**\n\t * Get the base parameters for authentication requests\n\t *\n\t * @returns A record containing the client ID and client secret\n\t */\n\tprivate baseParams(): Record {\n\t\treturn {\n\t\t\tclient_id: this.authData.client_id,\n\t\t\tclient_secret: this.authData.client_secret,\n\t\t};\n\t}\n\n\t/**\n\t * Handle API request errors and transform them into an `AuthError`\n\t *\n\t * @param error - The error object\n\t * @returns An `AuthError` instance\n\t */\n\tprivate handleReject(error: unknown): AuthError {\n\t\treturn error as AuthError;\n\t}\n}\n","import type { IAuthError } from \"../interfaces/auth_error.js\";\nimport { BaseModel } from \"./base_model.js\";\n\nexport class AuthError extends BaseModel implements IAuthError {\n\tdeclare code: number;\n\tdeclare error: string;\n\tdeclare error_description: string;\n\tdeclare error_uri?: string;\n}\n"],"mappings":"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","names":["Jwt","TeamUserBillingDetails","Jwt","TeamUserBillingDetails"]} \ No newline at end of file diff --git a/docs/additional_info/changelog.md b/docs/additional_info/changelog.md index 99b75504..e68b63d9 100644 --- a/docs/additional_info/changelog.md +++ b/docs/additional_info/changelog.md @@ -1,5 +1,10 @@ # Changelog +## 14.1.0 (11-Mar-2025) + +* Added `uuid` fields to contrbiturs and projects for internal purposes +* Added `/me` endpoint (contributors) for internal purposes + ## 14.0.0 (04-Mar-2025) * Compile with Typescript 5.8.0 diff --git a/package-lock.json b/package-lock.json index 6e0bbd4b..90b522d3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lokalise/node-api", - "version": "14.0.0", + "version": "14.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@lokalise/node-api", - "version": "14.0.0", + "version": "14.1.0", "license": "BSD-3-Clause", "devDependencies": { "@biomejs/biome": "^1.9.0", @@ -63,22 +63,22 @@ } }, "node_modules/@babel/core": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz", - "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.9", + "@babel/generator": "^7.26.10", "@babel/helper-compilation-targets": "^7.26.5", "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.9", - "@babel/parser": "^7.26.9", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", "@babel/template": "^7.26.9", - "@babel/traverse": "^7.26.9", - "@babel/types": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -104,14 +104,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz", - "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.10.tgz", + "integrity": "sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9", + "@babel/parser": "^7.26.10", + "@babel/types": "^7.26.10", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -210,27 +210,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz", - "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz", + "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==", "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.26.9", - "@babel/types": "^7.26.9" + "@babel/types": "^7.26.10" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", - "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz", + "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.26.9" + "@babel/types": "^7.26.10" }, "bin": { "parser": "bin/babel-parser.js" @@ -255,17 +255,17 @@ } }, "node_modules/@babel/traverse": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz", - "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.10.tgz", + "integrity": "sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.9", - "@babel/parser": "^7.26.9", + "@babel/generator": "^7.26.10", + "@babel/parser": "^7.26.10", "@babel/template": "^7.26.9", - "@babel/types": "^7.26.9", + "@babel/types": "^7.26.10", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -274,9 +274,9 @@ } }, "node_modules/@babel/types": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", - "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz", + "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==", "dev": true, "license": "MIT", "dependencies": { @@ -452,9 +452,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", - "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz", + "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==", "cpu": [ "ppc64" ], @@ -469,9 +469,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", - "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz", + "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==", "cpu": [ "arm" ], @@ -486,9 +486,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", - "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz", + "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==", "cpu": [ "arm64" ], @@ -503,9 +503,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", - "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz", + "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==", "cpu": [ "x64" ], @@ -520,9 +520,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", - "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz", + "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==", "cpu": [ "arm64" ], @@ -537,9 +537,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", - "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz", + "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==", "cpu": [ "x64" ], @@ -554,9 +554,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", - "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz", + "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==", "cpu": [ "arm64" ], @@ -571,9 +571,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", - "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz", + "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==", "cpu": [ "x64" ], @@ -588,9 +588,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", - "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz", + "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==", "cpu": [ "arm" ], @@ -605,9 +605,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", - "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz", + "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==", "cpu": [ "arm64" ], @@ -622,9 +622,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", - "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz", + "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==", "cpu": [ "ia32" ], @@ -639,9 +639,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", - "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz", + "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==", "cpu": [ "loong64" ], @@ -656,9 +656,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", - "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz", + "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==", "cpu": [ "mips64el" ], @@ -673,9 +673,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", - "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz", + "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==", "cpu": [ "ppc64" ], @@ -690,9 +690,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", - "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz", + "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==", "cpu": [ "riscv64" ], @@ -707,9 +707,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", - "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz", + "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==", "cpu": [ "s390x" ], @@ -724,9 +724,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", - "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz", + "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==", "cpu": [ "x64" ], @@ -741,9 +741,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", - "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz", + "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==", "cpu": [ "arm64" ], @@ -758,9 +758,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", - "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz", + "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==", "cpu": [ "x64" ], @@ -775,9 +775,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", - "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz", + "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==", "cpu": [ "arm64" ], @@ -792,9 +792,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", - "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz", + "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==", "cpu": [ "x64" ], @@ -809,9 +809,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", - "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz", + "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==", "cpu": [ "x64" ], @@ -826,9 +826,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", - "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz", + "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==", "cpu": [ "arm64" ], @@ -843,9 +843,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", - "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz", + "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==", "cpu": [ "ia32" ], @@ -860,9 +860,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", - "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz", + "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==", "cpu": [ "x64" ], @@ -969,9 +969,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.9.tgz", - "integrity": "sha512-qZdlImWXur0CFakn2BJ2znJOdqYZKiedEPEVNTBrpfPjc/YuTGcaYZcdmNFTkUj3DU0ZM/AElcM8Ybww3xVLzA==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.35.0.tgz", + "integrity": "sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ==", "cpu": [ "arm" ], @@ -983,9 +983,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.9.tgz", - "integrity": "sha512-4KW7P53h6HtJf5Y608T1ISKvNIYLWRKMvfnG0c44M6In4DQVU58HZFEVhWINDZKp7FZps98G3gxwC1sb0wXUUg==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.35.0.tgz", + "integrity": "sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA==", "cpu": [ "arm64" ], @@ -997,9 +997,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.9.tgz", - "integrity": "sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.35.0.tgz", + "integrity": "sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q==", "cpu": [ "arm64" ], @@ -1011,9 +1011,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.9.tgz", - "integrity": "sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.35.0.tgz", + "integrity": "sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q==", "cpu": [ "x64" ], @@ -1025,9 +1025,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.9.tgz", - "integrity": "sha512-2lzjQPJbN5UnHm7bHIUKFMulGTQwdvOkouJDpPysJS+QFBGDJqcfh+CxxtG23Ik/9tEvnebQiylYoazFMAgrYw==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.35.0.tgz", + "integrity": "sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ==", "cpu": [ "arm64" ], @@ -1039,9 +1039,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.9.tgz", - "integrity": "sha512-SLl0hi2Ah2H7xQYd6Qaiu01kFPzQ+hqvdYSoOtHYg/zCIFs6t8sV95kaoqjzjFwuYQLtOI0RZre/Ke0nPaQV+g==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.35.0.tgz", + "integrity": "sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw==", "cpu": [ "x64" ], @@ -1053,9 +1053,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.9.tgz", - "integrity": "sha512-88I+D3TeKItrw+Y/2ud4Tw0+3CxQ2kLgu3QvrogZ0OfkmX/DEppehus7L3TS2Q4lpB+hYyxhkQiYPJ6Mf5/dPg==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.35.0.tgz", + "integrity": "sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg==", "cpu": [ "arm" ], @@ -1067,9 +1067,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.9.tgz", - "integrity": "sha512-3qyfWljSFHi9zH0KgtEPG4cBXHDFhwD8kwg6xLfHQ0IWuH9crp005GfoUUh/6w9/FWGBwEHg3lxK1iHRN1MFlA==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.35.0.tgz", + "integrity": "sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A==", "cpu": [ "arm" ], @@ -1081,9 +1081,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.9.tgz", - "integrity": "sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.35.0.tgz", + "integrity": "sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A==", "cpu": [ "arm64" ], @@ -1095,9 +1095,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.9.tgz", - "integrity": "sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.35.0.tgz", + "integrity": "sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg==", "cpu": [ "arm64" ], @@ -1109,9 +1109,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.9.tgz", - "integrity": "sha512-dRAgTfDsn0TE0HI6cmo13hemKpVHOEyeciGtvlBTkpx/F65kTvShtY/EVyZEIfxFkV5JJTuQ9tP5HGBS0hfxIg==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.35.0.tgz", + "integrity": "sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g==", "cpu": [ "loong64" ], @@ -1123,9 +1123,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.9.tgz", - "integrity": "sha512-PHcNOAEhkoMSQtMf+rJofwisZqaU8iQ8EaSps58f5HYll9EAY5BSErCZ8qBDMVbq88h4UxaNPlbrKqfWP8RfJA==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.35.0.tgz", + "integrity": "sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA==", "cpu": [ "ppc64" ], @@ -1137,9 +1137,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.9.tgz", - "integrity": "sha512-Z2i0Uy5G96KBYKjeQFKbbsB54xFOL5/y1P5wNBsbXB8yE+At3oh0DVMjQVzCJRJSfReiB2tX8T6HUFZ2k8iaKg==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.35.0.tgz", + "integrity": "sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g==", "cpu": [ "riscv64" ], @@ -1151,9 +1151,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.9.tgz", - "integrity": "sha512-U+5SwTMoeYXoDzJX5dhDTxRltSrIax8KWwfaaYcynuJw8mT33W7oOgz0a+AaXtGuvhzTr2tVKh5UO8GVANTxyQ==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.35.0.tgz", + "integrity": "sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw==", "cpu": [ "s390x" ], @@ -1165,9 +1165,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.9.tgz", - "integrity": "sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.35.0.tgz", + "integrity": "sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA==", "cpu": [ "x64" ], @@ -1179,9 +1179,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.9.tgz", - "integrity": "sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.35.0.tgz", + "integrity": "sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg==", "cpu": [ "x64" ], @@ -1193,9 +1193,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.9.tgz", - "integrity": "sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.35.0.tgz", + "integrity": "sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg==", "cpu": [ "arm64" ], @@ -1207,9 +1207,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.9.tgz", - "integrity": "sha512-KB48mPtaoHy1AwDNkAJfHXvHp24H0ryZog28spEs0V48l3H1fr4i37tiyHsgKZJnCmvxsbATdZGBpbmxTE3a9w==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.35.0.tgz", + "integrity": "sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw==", "cpu": [ "ia32" ], @@ -1221,9 +1221,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.9.tgz", - "integrity": "sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.35.0.tgz", + "integrity": "sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw==", "cpu": [ "x64" ], @@ -1242,9 +1242,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.13.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.9.tgz", - "integrity": "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==", + "version": "22.13.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz", + "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==", "dev": true, "license": "MIT", "dependencies": { @@ -1252,9 +1252,9 @@ } }, "node_modules/@vitest/coverage-istanbul": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/coverage-istanbul/-/coverage-istanbul-3.0.7.tgz", - "integrity": "sha512-hkd7rlfnqQJFlg6IPv9aFNaxJNkWLasdfaMJR3MBsBkxddSYy5ax9sW6Vv1/3tmmyT9m/b0lHDNknybKJ33cXw==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@vitest/coverage-istanbul/-/coverage-istanbul-3.0.8.tgz", + "integrity": "sha512-v/frNs3RF//gQP/+AkXG2Bk51qiK1bGRubq/vgM7CxEw40Jl3N9rMpgAOAz8ELL9HAWvAZ9fswR8YyHhO1HxSQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1273,18 +1273,18 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "3.0.7" + "vitest": "3.0.8" } }, "node_modules/@vitest/expect": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.7.tgz", - "integrity": "sha512-QP25f+YJhzPfHrHfYHtvRn+uvkCFCqFtW9CktfBxmB+25QqWsx7VB2As6f4GmwllHLDhXNHvqedwhvMmSnNmjw==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.8.tgz", + "integrity": "sha512-Xu6TTIavTvSSS6LZaA3EebWFr6tsoXPetOWNMOlc7LO88QVVBwq2oQWBoDiLCN6YTvNYsGSjqOO8CAdjom5DCQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "3.0.7", - "@vitest/utils": "3.0.7", + "@vitest/spy": "3.0.8", + "@vitest/utils": "3.0.8", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" }, @@ -1293,13 +1293,13 @@ } }, "node_modules/@vitest/mocker": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.7.tgz", - "integrity": "sha512-qui+3BLz9Eonx4EAuR/i+QlCX6AUZ35taDQgwGkK/Tw6/WgwodSrjN1X2xf69IA/643ZX5zNKIn2svvtZDrs4w==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.8.tgz", + "integrity": "sha512-n3LjS7fcW1BCoF+zWZxG7/5XvuYH+lsFg+BDwwAz0arIwHQJFUEsKBQ0BLU49fCxuM/2HSeBPHQD8WjgrxMfow==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "3.0.7", + "@vitest/spy": "3.0.8", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, @@ -1320,9 +1320,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.7.tgz", - "integrity": "sha512-CiRY0BViD/V8uwuEzz9Yapyao+M9M008/9oMOSQydwbwb+CMokEq3XVaF3XK/VWaOK0Jm9z7ENhybg70Gtxsmg==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.8.tgz", + "integrity": "sha512-BNqwbEyitFhzYMYHUVbIvepOyeQOSFA/NeJMIP9enMntkkxLgOcgABH6fjyXG85ipTgvero6noreavGIqfJcIg==", "dev": true, "license": "MIT", "dependencies": { @@ -1333,13 +1333,13 @@ } }, "node_modules/@vitest/runner": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.7.tgz", - "integrity": "sha512-WeEl38Z0S2ZcuRTeyYqaZtm4e26tq6ZFqh5y8YD9YxfWuu0OFiGFUbnxNynwLjNRHPsXyee2M9tV7YxOTPZl2g==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.8.tgz", + "integrity": "sha512-c7UUw6gEcOzI8fih+uaAXS5DwjlBaCJUo7KJ4VvJcjL95+DSR1kova2hFuRt3w41KZEFcOEiq098KkyrjXeM5w==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "3.0.7", + "@vitest/utils": "3.0.8", "pathe": "^2.0.3" }, "funding": { @@ -1347,13 +1347,13 @@ } }, "node_modules/@vitest/snapshot": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.7.tgz", - "integrity": "sha512-eqTUryJWQN0Rtf5yqCGTQWsCFOQe4eNz5Twsu21xYEcnFJtMU5XvmG0vgebhdLlrHQTSq5p8vWHJIeJQV8ovsA==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.8.tgz", + "integrity": "sha512-x8IlMGSEMugakInj44nUrLSILh/zy1f2/BgH0UeHpNyOocG18M9CWVIFBaXPt8TrqVZWmcPjwfG/ht5tnpba8A==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.0.7", + "@vitest/pretty-format": "3.0.8", "magic-string": "^0.30.17", "pathe": "^2.0.3" }, @@ -1362,9 +1362,9 @@ } }, "node_modules/@vitest/spy": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.7.tgz", - "integrity": "sha512-4T4WcsibB0B6hrKdAZTM37ekuyFZt2cGbEGd2+L0P8ov15J1/HUsUaqkXEQPNAWr4BtPPe1gI+FYfMHhEKfR8w==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.8.tgz", + "integrity": "sha512-MR+PzJa+22vFKYb934CejhR4BeRpMSoxkvNoDit68GQxRLSf11aT6CTj3XaqUU9rxgWJFnqicN/wxw6yBRkI1Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1375,13 +1375,13 @@ } }, "node_modules/@vitest/utils": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.7.tgz", - "integrity": "sha512-xePVpCRfooFX3rANQjwoditoXgWb1MaFbzmGuPP59MK6i13mrnDw/yEIyJudLeW6/38mCNcwCiJIGmpDPibAIg==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.8.tgz", + "integrity": "sha512-nkBC3aEhfX2PdtQI/QwAWp8qZWwzASsU4Npbcd5RdMPBSSLCpkZp52P3xku3s3uA0HIEhGvEcF8rNkBsz9dQ4Q==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.0.7", + "@vitest/pretty-format": "3.0.8", "loupe": "^3.1.3", "tinyrainbow": "^2.0.0" }, @@ -1509,9 +1509,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001702", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001702.tgz", - "integrity": "sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==", + "version": "1.0.30001703", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001703.tgz", + "integrity": "sha512-kRlAGTRWgPsOj7oARC9m1okJEXdL/8fekFVcxA8Hl7GH4r/sN4OJn/i6Flde373T50KS7Y37oFbMwlE8+F42kQ==", "dev": true, "funding": [ { @@ -1683,9 +1683,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.112", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.112.tgz", - "integrity": "sha512-oen93kVyqSb3l+ziUgzIOlWt/oOuy4zRmpwestMn4rhFWAoFJeFuCVte9F2fASjeZZo7l/Cif9TiyrdW4CwEMA==", + "version": "1.5.114", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.114.tgz", + "integrity": "sha512-DFptFef3iktoKlFQK/afbo274/XNWD00Am0xa7M8FZUepHlHT8PEuiNBoRfFHbH1okqN58AlhbJ4QTkcnXorjA==", "dev": true, "license": "ISC" }, @@ -1704,9 +1704,9 @@ "license": "MIT" }, "node_modules/esbuild": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", - "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz", + "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -1717,31 +1717,31 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.0", - "@esbuild/android-arm": "0.25.0", - "@esbuild/android-arm64": "0.25.0", - "@esbuild/android-x64": "0.25.0", - "@esbuild/darwin-arm64": "0.25.0", - "@esbuild/darwin-x64": "0.25.0", - "@esbuild/freebsd-arm64": "0.25.0", - "@esbuild/freebsd-x64": "0.25.0", - "@esbuild/linux-arm": "0.25.0", - "@esbuild/linux-arm64": "0.25.0", - "@esbuild/linux-ia32": "0.25.0", - "@esbuild/linux-loong64": "0.25.0", - "@esbuild/linux-mips64el": "0.25.0", - "@esbuild/linux-ppc64": "0.25.0", - "@esbuild/linux-riscv64": "0.25.0", - "@esbuild/linux-s390x": "0.25.0", - "@esbuild/linux-x64": "0.25.0", - "@esbuild/netbsd-arm64": "0.25.0", - "@esbuild/netbsd-x64": "0.25.0", - "@esbuild/openbsd-arm64": "0.25.0", - "@esbuild/openbsd-x64": "0.25.0", - "@esbuild/sunos-x64": "0.25.0", - "@esbuild/win32-arm64": "0.25.0", - "@esbuild/win32-ia32": "0.25.0", - "@esbuild/win32-x64": "0.25.0" + "@esbuild/aix-ppc64": "0.25.1", + "@esbuild/android-arm": "0.25.1", + "@esbuild/android-arm64": "0.25.1", + "@esbuild/android-x64": "0.25.1", + "@esbuild/darwin-arm64": "0.25.1", + "@esbuild/darwin-x64": "0.25.1", + "@esbuild/freebsd-arm64": "0.25.1", + "@esbuild/freebsd-x64": "0.25.1", + "@esbuild/linux-arm": "0.25.1", + "@esbuild/linux-arm64": "0.25.1", + "@esbuild/linux-ia32": "0.25.1", + "@esbuild/linux-loong64": "0.25.1", + "@esbuild/linux-mips64el": "0.25.1", + "@esbuild/linux-ppc64": "0.25.1", + "@esbuild/linux-riscv64": "0.25.1", + "@esbuild/linux-s390x": "0.25.1", + "@esbuild/linux-x64": "0.25.1", + "@esbuild/netbsd-arm64": "0.25.1", + "@esbuild/netbsd-x64": "0.25.1", + "@esbuild/openbsd-arm64": "0.25.1", + "@esbuild/openbsd-x64": "0.25.1", + "@esbuild/sunos-x64": "0.25.1", + "@esbuild/win32-arm64": "0.25.1", + "@esbuild/win32-ia32": "0.25.1", + "@esbuild/win32-x64": "0.25.1" } }, "node_modules/escalade": { @@ -2167,9 +2167,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.9.tgz", + "integrity": "sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==", "dev": true, "funding": [ { @@ -2420,9 +2420,9 @@ } }, "node_modules/rollup": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.9.tgz", - "integrity": "sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.35.0.tgz", + "integrity": "sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==", "dev": true, "license": "MIT", "dependencies": { @@ -2436,25 +2436,25 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.34.9", - "@rollup/rollup-android-arm64": "4.34.9", - "@rollup/rollup-darwin-arm64": "4.34.9", - "@rollup/rollup-darwin-x64": "4.34.9", - "@rollup/rollup-freebsd-arm64": "4.34.9", - "@rollup/rollup-freebsd-x64": "4.34.9", - "@rollup/rollup-linux-arm-gnueabihf": "4.34.9", - "@rollup/rollup-linux-arm-musleabihf": "4.34.9", - "@rollup/rollup-linux-arm64-gnu": "4.34.9", - "@rollup/rollup-linux-arm64-musl": "4.34.9", - "@rollup/rollup-linux-loongarch64-gnu": "4.34.9", - "@rollup/rollup-linux-powerpc64le-gnu": "4.34.9", - "@rollup/rollup-linux-riscv64-gnu": "4.34.9", - "@rollup/rollup-linux-s390x-gnu": "4.34.9", - "@rollup/rollup-linux-x64-gnu": "4.34.9", - "@rollup/rollup-linux-x64-musl": "4.34.9", - "@rollup/rollup-win32-arm64-msvc": "4.34.9", - "@rollup/rollup-win32-ia32-msvc": "4.34.9", - "@rollup/rollup-win32-x64-msvc": "4.34.9", + "@rollup/rollup-android-arm-eabi": "4.35.0", + "@rollup/rollup-android-arm64": "4.35.0", + "@rollup/rollup-darwin-arm64": "4.35.0", + "@rollup/rollup-darwin-x64": "4.35.0", + "@rollup/rollup-freebsd-arm64": "4.35.0", + "@rollup/rollup-freebsd-x64": "4.35.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.35.0", + "@rollup/rollup-linux-arm-musleabihf": "4.35.0", + "@rollup/rollup-linux-arm64-gnu": "4.35.0", + "@rollup/rollup-linux-arm64-musl": "4.35.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.35.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.35.0", + "@rollup/rollup-linux-riscv64-gnu": "4.35.0", + "@rollup/rollup-linux-s390x-gnu": "4.35.0", + "@rollup/rollup-linux-x64-gnu": "4.35.0", + "@rollup/rollup-linux-x64-musl": "4.35.0", + "@rollup/rollup-win32-arm64-msvc": "4.35.0", + "@rollup/rollup-win32-ia32-msvc": "4.35.0", + "@rollup/rollup-win32-x64-msvc": "4.35.0", "fsevents": "~2.3.2" } }, @@ -3086,9 +3086,9 @@ } }, "node_modules/vite": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.0.tgz", - "integrity": "sha512-7dPxoo+WsT/64rDcwoOjk76XHj+TqNTIvHKcuMQ1k4/SeHDaQt5GFAeLYzrimZrMpn/O6DtdI03WUjdxuPM0oQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.1.tgz", + "integrity": "sha512-n2GnqDb6XPhlt9B8olZPrgMD/es/Nd1RdChF6CBD/fHW6pUyUTt2sQW2fPRX5GiD9XEa6+8A6A4f2vT6pSsE7Q==", "dev": true, "license": "MIT", "dependencies": { @@ -3158,9 +3158,9 @@ } }, "node_modules/vite-node": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.7.tgz", - "integrity": "sha512-2fX0QwX4GkkkpULXdT1Pf4q0tC1i1lFOyseKoonavXUNlQ77KpW2XqBGGNIm/J4Ows4KxgGJzDguYVPKwG/n5A==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.8.tgz", + "integrity": "sha512-6PhR4H9VGlcwXZ+KWCdMqbtG649xCPZqfI9j2PsK1FcXgEzro5bGHcVKFCTqPLaNKZES8Evqv4LwvZARsq5qlg==", "dev": true, "license": "MIT", "dependencies": { @@ -3181,19 +3181,19 @@ } }, "node_modules/vitest": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.7.tgz", - "integrity": "sha512-IP7gPK3LS3Fvn44x30X1dM9vtawm0aesAa2yBIZ9vQf+qB69NXC5776+Qmcr7ohUXIQuLhk7xQR0aSUIDPqavg==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.8.tgz", + "integrity": "sha512-dfqAsNqRGUc8hB9OVR2P0w8PZPEckti2+5rdZip0WIz9WW0MnImJ8XiR61QhqLa92EQzKP2uPkzenKOAHyEIbA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "3.0.7", - "@vitest/mocker": "3.0.7", - "@vitest/pretty-format": "^3.0.7", - "@vitest/runner": "3.0.7", - "@vitest/snapshot": "3.0.7", - "@vitest/spy": "3.0.7", - "@vitest/utils": "3.0.7", + "@vitest/expect": "3.0.8", + "@vitest/mocker": "3.0.8", + "@vitest/pretty-format": "^3.0.8", + "@vitest/runner": "3.0.8", + "@vitest/snapshot": "3.0.8", + "@vitest/spy": "3.0.8", + "@vitest/utils": "3.0.8", "chai": "^5.2.0", "debug": "^4.4.0", "expect-type": "^1.1.0", @@ -3205,7 +3205,7 @@ "tinypool": "^1.0.2", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0", - "vite-node": "3.0.7", + "vite-node": "3.0.8", "why-is-node-running": "^2.3.0" }, "bin": { @@ -3221,8 +3221,8 @@ "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "@vitest/browser": "3.0.7", - "@vitest/ui": "3.0.7", + "@vitest/browser": "3.0.8", + "@vitest/ui": "3.0.8", "happy-dom": "*", "jsdom": "*" }, diff --git a/package.json b/package.json index d371ae80..66561a3f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lokalise/node-api", - "version": "14.0.0", + "version": "14.1.0", "description": "Official Lokalise API 2.0 Node.js client", "license": "BSD-3-Clause", "repository": { diff --git a/src/collections/contributors.ts b/src/collections/contributors.ts index 28f13d1a..53cb9318 100644 --- a/src/collections/contributors.ts +++ b/src/collections/contributors.ts @@ -52,10 +52,8 @@ export class Contributors extends BaseCollection { return this.doGet(contributor_id, request_params); } - me( - request_params: ProjectOnly, - ): Promise { - return this.doGet('me', request_params); + me(request_params: ProjectOnly): Promise { + return this.doGet("me", request_params); } update( diff --git a/test/contributors/contributors.spec.ts b/test/contributors/contributors.spec.ts index 4b726222..44112d40 100644 --- a/test/contributors/contributors.spec.ts +++ b/test/contributors/contributors.spec.ts @@ -82,6 +82,7 @@ describe("Contributors", () => { expect(contributor.languages[0].lang_iso).to.eq("sq"); expect(contributor.admin_rights).to.include("upload"); expect(contributor.role_id).to.eq(5); + expect(contributor.uuid).to.eq("123-abc"); }); it("retrieves current contributor details", async () => { diff --git a/test/fixtures/contributors/retrieve.json b/test/fixtures/contributors/retrieve.json index ed26eee8..be84cad8 100644 --- a/test/fixtures/contributors/retrieve.json +++ b/test/fixtures/contributors/retrieve.json @@ -8,6 +8,7 @@ "created_at_timestamp": 1534865725, "is_admin": true, "is_reviewer": true, + "uuid": "123-abc", "languages": [ { "lang_id": 803,