@deeplx/core 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.cjs CHANGED
@@ -1,92 +1,129 @@
1
1
  'use strict';
2
2
 
3
+ var node_crypto = require('node:crypto');
3
4
  var proxy = require('node-fetch-native/proxy');
4
- var whatlangNode = require('whatlang-node');
5
5
  var xFetch = require('x-fetch');
6
6
 
7
+ var __defProp$1 = Object.defineProperty;
8
+ var __defProps = Object.defineProperties;
9
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
10
+ var __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;
11
+ var __hasOwnProp$1 = Object.prototype.hasOwnProperty;
12
+ var __propIsEnum$1 = Object.prototype.propertyIsEnumerable;
13
+ var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
14
+ var __spreadValues$1 = (a, b) => {
15
+ for (var prop in b || (b = {}))
16
+ if (__hasOwnProp$1.call(b, prop))
17
+ __defNormalProp$1(a, prop, b[prop]);
18
+ if (__getOwnPropSymbols$1)
19
+ for (var prop of __getOwnPropSymbols$1(b)) {
20
+ if (__propIsEnum$1.call(b, prop))
21
+ __defNormalProp$1(a, prop, b[prop]);
22
+ }
23
+ return a;
24
+ };
25
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
7
26
  const SUPPORTED_LANGUAGES = [
27
+ { code: "AR", language: "Arabic" },
8
28
  { code: "BG", language: "Bulgarian" },
9
- { code: "ZH", language: "Chinese" },
10
29
  { code: "CS", language: "Czech" },
11
30
  { code: "DA", language: "Danish" },
12
- { code: "NL", language: "Dutch" },
31
+ { code: "DE", language: "German" },
32
+ { code: "EL", language: "Greek" },
13
33
  { code: "EN", language: "English" },
34
+ { code: "EN-GB", language: "English (British)" },
35
+ { code: "EN-US", language: "English (American)" },
36
+ { code: "ES", language: "Spanish" },
37
+ { code: "ES-419", language: "Spanish (Latin American)" },
14
38
  { code: "ET", language: "Estonian" },
15
39
  { code: "FI", language: "Finnish" },
16
40
  { code: "FR", language: "French" },
17
- { code: "DE", language: "German" },
18
- { code: "EL", language: "Greek" },
41
+ { code: "HE", language: "Hebrew" },
19
42
  { code: "HU", language: "Hungarian" },
43
+ { code: "ID", language: "Indonesian" },
20
44
  { code: "IT", language: "Italian" },
21
45
  { code: "JA", language: "Japanese" },
22
- { code: "LV", language: "Latvian" },
46
+ { code: "KO", language: "Korean" },
23
47
  { code: "LT", language: "Lithuanian" },
48
+ { code: "LV", language: "Latvian" },
49
+ { code: "NB", language: "Norwegian Bokm\xE5l" },
50
+ { code: "NL", language: "Dutch" },
24
51
  { code: "PL", language: "Polish" },
25
52
  { code: "PT", language: "Portuguese" },
53
+ { code: "PT-BR", language: "Portuguese (Brazilian)" },
54
+ { code: "PT-PT", language: "Portuguese (European)" },
26
55
  { code: "RO", language: "Romanian" },
27
56
  { code: "RU", language: "Russian" },
28
57
  { code: "SK", language: "Slovak" },
29
58
  { code: "SL", language: "Slovenian" },
30
- { code: "ES", language: "Spanish" },
31
59
  { code: "SV", language: "Swedish" },
32
60
  { code: "TR", language: "Turkish" },
33
- { code: "ID", language: "Indonesian" },
34
- { code: "UK", language: "Ukrainian" }
61
+ { code: "UK", language: "Ukrainian" },
62
+ { code: "VI", language: "Vietnamese" },
63
+ { code: "ZH", language: "Chinese" },
64
+ { code: "ZH-HANS", language: "Chinese (Simplified)" },
65
+ { code: "ZH-HANT", language: "Chinese (Traditional)" }
35
66
  ];
36
- const FORMALITY_TONES = /* @__PURE__ */ new Set([
37
- "formal",
38
- "informal",
39
- "undefined"
40
- ]);
41
- const API_URL = "https://www2.deepl.com/jsonrpc";
67
+ const ONESHOT_FREE_ENDPOINT = "https://oneshot-free.www.deepl.com/v1/translate";
68
+ const ONESHOT_PRO_ENDPOINT = "https://oneshot-pro.www.deepl.com/v1/translate";
69
+ const IMPERSONATED_CHROME_MAJOR = "120";
70
+ const CHROME_EXTENSION_VERSION = "1.86.0";
71
+ const CHROME_EXTENSION_ID = "cofdbpoegempjloogbagkncekinflcnj";
72
+ const MAX_FREE_TEXT_LENGTH = 1500;
42
73
  const HTTP_STATUS_OK = 200;
43
74
  const HTTP_STATUS_BAD_REQUEST = 400;
44
75
  const HTTP_STATUS_NOT_FOUND = 404;
45
76
  const HTTP_STATUS_NOT_ALLOWED = 405;
77
+ const HTTP_STATUS_PAYLOAD_TOO_LARGE = 413;
78
+ const HTTP_STATUS_TOO_MANY_REQUESTS = 429;
46
79
  const HTTP_STATUS_INTERNAL_ERROR = 500;
47
80
  const HTTP_STATUS_SERVICE_UNAVAILABLE = 503;
48
- const COMMON_HEADERS = {
49
- "Content-Type": "application/json",
50
- "User-Agent": "DeepL/1627620 CFNetwork/3826.500.62.2.1 Darwin/24.4.0",
51
- Accept: "*/*",
52
- "X-App-Os-Name": "iOS",
53
- "X-App-Os-Version": "18.4.0",
54
- "Accept-Language": "en-US,en;q=0.9",
55
- "Accept-Encoding": "gzip, deflate, br",
56
- // Keep this!
57
- "X-App-Device": "iPhone16,2",
58
- Referer: "https://www.deepl.com/",
59
- "X-Product": "translator",
60
- "X-App-Build": "1627620",
61
- "X-App-Version": "25.1"
81
+ const TARGET_LANG_MAP = {
82
+ AR: "ar",
83
+ BG: "bg",
84
+ CS: "cs",
85
+ DA: "da",
86
+ DE: "de",
87
+ EL: "el",
88
+ "EN-GB": "en-GB",
89
+ "EN-US": "en-US",
90
+ ES: "es",
91
+ "ES-419": "es-419",
92
+ ET: "et",
93
+ FI: "fi",
94
+ FR: "fr",
95
+ HE: "he",
96
+ HU: "hu",
97
+ ID: "id",
98
+ IT: "it",
99
+ JA: "ja",
100
+ KO: "ko",
101
+ LT: "lt",
102
+ LV: "lv",
103
+ NB: "nb",
104
+ NL: "nl",
105
+ PL: "pl",
106
+ "PT-BR": "pt-BR",
107
+ "PT-PT": "pt-PT",
108
+ RO: "ro",
109
+ RU: "ru",
110
+ SK: "sk",
111
+ SL: "sl",
112
+ SV: "sv",
113
+ TR: "tr",
114
+ UK: "uk",
115
+ VI: "vi",
116
+ ZH: "zh-Hans",
117
+ "ZH-HANS": "zh-Hans",
118
+ "ZH-HANT": "zh-Hant",
119
+ EN: "en-US",
120
+ PT: "pt-BR"
62
121
  };
122
+ const SOURCE_LANG_MAP = __spreadProps(__spreadValues$1({}, TARGET_LANG_MAP), {
123
+ EN: "en",
124
+ PT: "pt"
125
+ });
63
126
 
64
- const getICount = (translateText) => {
65
- return (translateText.match(/i/g) || []).length;
66
- };
67
- const getRandomNumber = () => {
68
- const base = Math.floor(Math.random() * 99999) + 83e5;
69
- return base * 1e3;
70
- };
71
- const getTimeStamp = (iCount) => {
72
- const ts = Date.now();
73
- if (iCount !== 0) {
74
- const adjustedCount = iCount + 1;
75
- return ts - ts % adjustedCount + adjustedCount;
76
- }
77
- return ts;
78
- };
79
- const formatPostString = (postData) => {
80
- const postStr = JSON.stringify(postData);
81
- const shouldAddSpace = (
82
- // eslint-disable-next-line @typescript-eslint/no-magic-numbers
83
- (postData.id + 5) % 29 === 0 || (postData.id + 3) % 13 === 0
84
- );
85
- return postStr.replaceAll(
86
- '"method":"',
87
- shouldAddSpace ? `"method" : "` : `"method": "`
88
- );
89
- };
90
127
  let abbreviateLanguageDictionary;
91
128
  function getAbbreviateLanguages() {
92
129
  return abbreviateLanguageDictionary != null ? abbreviateLanguageDictionary : abbreviateLanguageDictionary = SUPPORTED_LANGUAGES.reduce(
@@ -103,8 +140,6 @@ function abbreviateLanguage(language) {
103
140
  }
104
141
 
105
142
  var __defProp = Object.defineProperty;
106
- var __defProps = Object.defineProperties;
107
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
108
143
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
109
144
  var __hasOwnProp = Object.prototype.hasOwnProperty;
110
145
  var __propIsEnum = Object.prototype.propertyIsEnumerable;
@@ -120,7 +155,6 @@ var __spreadValues = (a, b) => {
120
155
  }
121
156
  return a;
122
157
  };
123
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
124
158
  var __async$1 = (__this, __arguments, generator) => {
125
159
  return new Promise((resolve, reject) => {
126
160
  var fulfilled = (value) => {
@@ -141,145 +175,179 @@ var __async$1 = (__this, __arguments, generator) => {
141
175
  step((generator = generator.apply(__this, __arguments)).next());
142
176
  });
143
177
  };
144
- const makeRequest = (postData, proxyUrl, dlSession) => __async$1(void 0, null, function* () {
145
- return xFetch.xfetch(API_URL, __spreadValues({
146
- method: "POST",
147
- body: formatPostString(postData),
148
- headers: dlSession ? __spreadProps(__spreadValues({}, COMMON_HEADERS), { Cookie: `dl_session=${dlSession}` }) : COMMON_HEADERS
149
- }, proxy.createProxy({ url: proxyUrl })));
150
- });
151
- const splitAndProcess = (text) => text.split("\n").map((line) => line.trim() === "" ? "\n" : line);
152
- const translateByDeepLX = (sourceLang, targetLang, text, formal, tagHandling = "plaintext", proxyUrl, dlSession) => __async$1(void 0, null, function* () {
153
- var _a, _b;
154
- if (!text) {
155
- return { code: HTTP_STATUS_NOT_FOUND, message: "No text to translate" };
156
- }
157
- const textParts = splitAndProcess(text);
158
- const translatedParts = [];
159
- const allAlternatives = [];
160
- for (const part of textParts) {
161
- if (!part.trim()) {
162
- translatedParts.push("");
163
- allAlternatives.push([""]);
164
- continue;
165
- }
166
- if (!sourceLang || sourceLang === "auto") {
167
- sourceLang = whatlangNode.detectLang(part, true);
168
- }
169
- const sourceLangCode = (_a = abbreviateLanguage(sourceLang)) != null ? _a : sourceLang.toUpperCase();
170
- const jobs = [
171
- {
172
- kind: "default",
173
- preferred_num_beams: 4,
174
- raw_en_context_before: [],
175
- raw_en_context_after: [],
176
- sentences: [{ prefix: "", text: part, id: 0 }]
177
- }
178
- ];
179
- let hasRegionalVariant = false;
180
- let targetLangCode = (_b = abbreviateLanguage(targetLang)) != null ? _b : targetLang.toUpperCase();
181
- const targetLangParts = targetLang.split("-");
182
- if (targetLangParts.length > 1) {
183
- targetLangCode = targetLangParts[0];
184
- hasRegionalVariant = true;
185
- }
186
- const id = getRandomNumber();
187
- const postData = {
188
- jsonrpc: "2.0",
189
- method: "LMT_handle_jobs",
190
- id,
191
- params: {
192
- commonJobParams: __spreadValues({
193
- mode: "translate",
194
- formality: (
195
- // eslint-disable-next-line sonarjs/no-nested-conditional
196
- formal == null ? "undefined" : formal ? "formal" : "informal"
197
- ),
198
- transcribe_as: "romanize",
199
- advancedMode: false,
200
- textType: tagHandling,
201
- wasSpoken: false
202
- }, hasRegionalVariant && { regionalVariant: targetLang }),
203
- lang: {
204
- source_lang_user_selected: "auto",
205
- target_lang: targetLangCode,
206
- source_lang_computed: sourceLangCode
207
- },
208
- jobs,
209
- timestamp: getTimeStamp(getICount(part))
210
- }
211
- };
212
- let translations;
213
- try {
214
- const { result } = yield makeRequest(postData, proxyUrl, dlSession);
215
- translations = result.translations;
216
- } catch (error) {
217
- return {
218
- code: HTTP_STATUS_SERVICE_UNAVAILABLE,
219
- message: String(error)
220
- };
178
+ let instanceID_;
179
+ function getInstanceID() {
180
+ return instanceID_ != null ? instanceID_ : instanceID_ = node_crypto.randomUUID();
181
+ }
182
+ let sharedCookies = "";
183
+ let warmupPromise = null;
184
+ function warmCookies(proxyUrl) {
185
+ return __async$1(this, null, function* () {
186
+ if (warmupPromise !== null) {
187
+ return warmupPromise;
221
188
  }
222
- let partTranslation = "";
223
- const partAlternatives = [];
224
- if (translations.length > 0) {
225
- for (const translation of translations) {
226
- partTranslation += translation.beams[0].sentences[0].text + " ";
227
- }
228
- partTranslation = partTranslation.trim();
229
- const numBeams = translations[0].beams.length;
230
- for (let i = 1; i < numBeams; i++) {
231
- let altText = "";
232
- for (const translation of translations) {
233
- const beams = translation.beams;
234
- if (i < beams.length) {
235
- altText += beams[i].sentences[0].text + " ";
189
+ warmupPromise = (() => __async$1(null, null, function* () {
190
+ try {
191
+ const res = yield xFetch.xfetch("https://www.deepl.com/translator", __spreadValues({
192
+ type: null
193
+ }, proxy.createProxy({ url: proxyUrl })));
194
+ const setCookie = res.headers.get("set-cookie");
195
+ if (setCookie) {
196
+ const cookies = [];
197
+ const userCountryMatch = /userCountry=[^;]+/.exec(setCookie);
198
+ if (userCountryMatch) {
199
+ cookies.push(userCountryMatch[0]);
200
+ }
201
+ const verifiedBotMatch = /verifiedBot=[^;]+/.exec(setCookie);
202
+ if (verifiedBotMatch) {
203
+ cookies.push(verifiedBotMatch[0]);
204
+ }
205
+ if (cookies.length > 0) {
206
+ sharedCookies = cookies.join("; ");
236
207
  }
237
208
  }
238
- if (altText) {
239
- partAlternatives.push(altText.trim());
240
- }
209
+ } catch (e) {
210
+ warmupPromise = null;
241
211
  }
212
+ }))();
213
+ return warmupPromise;
214
+ });
215
+ }
216
+ function resolveLang(code, kind) {
217
+ if (!code || code.toLowerCase() === "auto") {
218
+ if (kind === "target") {
219
+ return { success: false, error: 'target_lang cannot be "auto" or empty' };
242
220
  }
243
- if (!partTranslation) {
244
- return {
245
- code: HTTP_STATUS_SERVICE_UNAVAILABLE,
246
- message: "Translation failed"
247
- };
248
- }
249
- translatedParts.push(partTranslation);
250
- allAlternatives.push(partAlternatives);
221
+ return { success: true, value: void 0 };
251
222
  }
252
- const translatedText = translatedParts.join("\n");
253
- const combinedAlternatives = [];
254
- let maxAlts = 0;
255
- for (const alts of allAlternatives) {
256
- if (alts.length > maxAlts) {
257
- maxAlts = alts.length;
223
+ const langMap = kind === "target" ? TARGET_LANG_MAP : SOURCE_LANG_MAP;
224
+ const upperCode = code.toUpperCase();
225
+ let mapped = langMap[upperCode];
226
+ if (!mapped) {
227
+ const abbreviated = abbreviateLanguage(code);
228
+ if (abbreviated) {
229
+ mapped = langMap[abbreviated.toUpperCase()];
258
230
  }
259
231
  }
260
- for (let i = 0; i < maxAlts; i++) {
261
- const altParts = [];
262
- for (const [j, alts] of allAlternatives.entries()) {
263
- if (i < alts.length) {
264
- altParts.push(alts[i]);
265
- } else if (translatedParts[j].length === 0) {
266
- altParts.push("");
267
- } else {
268
- altParts.push(translatedParts[j]);
269
- }
232
+ if (!mapped) {
233
+ return { success: false, error: `unsupported ${kind}_lang "${code}"` };
234
+ }
235
+ return { success: true, value: mapped };
236
+ }
237
+ function parseTranslationError(error, reqId) {
238
+ if (error instanceof xFetch.ResponseError) {
239
+ const status = error.response.status;
240
+ if (status === HTTP_STATUS_TOO_MANY_REQUESTS) {
241
+ return { code: status, id: reqId, message: "too many requests, ..." };
270
242
  }
271
- combinedAlternatives.push(altParts.join("\n"));
243
+ return { code: status, id: reqId, message: error.message };
244
+ }
245
+ return {
246
+ code: HTTP_STATUS_SERVICE_UNAVAILABLE,
247
+ id: reqId,
248
+ message: String(error)
249
+ };
250
+ }
251
+ function buildHeaders(dlSession) {
252
+ const authValue = dlSession ? `Bearer ${dlSession}` : "None";
253
+ const headers = {
254
+ "Content-Type": "application/json",
255
+ Accept: "*/*",
256
+ Authorization: authValue,
257
+ Origin: `chrome-extension://${CHROME_EXTENSION_ID}`,
258
+ "Sec-Fetch-Site": "cross-site",
259
+ "Sec-Fetch-Mode": "cors",
260
+ "Sec-Fetch-Dest": "empty",
261
+ "Accept-Encoding": "gzip, deflate, br",
262
+ "User-Agent": `Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${IMPERSONATED_CHROME_MAJOR}.0.0.0 Safari/537.36`
263
+ };
264
+ if (sharedCookies) {
265
+ headers["Cookie"] = sharedCookies;
266
+ }
267
+ return headers;
268
+ }
269
+ function processTranslationResponse(response, reqId, sourceLang, targetLang, dlSession) {
270
+ if (!(response == null ? void 0 : response.translations) || response.translations.length === 0) {
271
+ return {
272
+ code: HTTP_STATUS_SERVICE_UNAVAILABLE,
273
+ id: reqId,
274
+ message: "Translation failed"
275
+ };
272
276
  }
277
+ const mainTranslation = response.translations[0];
278
+ if (!mainTranslation.text) {
279
+ return {
280
+ code: HTTP_STATUS_SERVICE_UNAVAILABLE,
281
+ id: reqId,
282
+ message: "Translation failed"
283
+ };
284
+ }
285
+ const detectedLang = mainTranslation.detected_source_language ? mainTranslation.detected_source_language.toUpperCase() : sourceLang || "auto";
273
286
  return {
274
287
  code: HTTP_STATUS_OK,
275
- id: getRandomNumber(),
276
- // Using new ID for the complete translation
277
- data: translatedText,
278
- alternatives: combinedAlternatives,
279
- sourceLang,
288
+ id: reqId,
289
+ data: mainTranslation.text,
290
+ alternatives: [],
291
+ sourceLang: detectedLang,
280
292
  targetLang,
281
293
  method: dlSession ? "Pro" : "Free"
282
294
  };
295
+ }
296
+ const translateByDeepLX = (sourceLang, targetLang, text, proxyUrl, dlSession) => __async$1(null, null, function* () {
297
+ if (!text) {
298
+ return { code: HTTP_STATUS_NOT_FOUND, message: "No text to translate" };
299
+ }
300
+ if ([...text].length > MAX_FREE_TEXT_LENGTH) {
301
+ return {
302
+ code: HTTP_STATUS_PAYLOAD_TOO_LARGE,
303
+ // Payload Too Large
304
+ message: `text exceeds maximum length: ${[...text].length} characters (anonymous oneshot limit is ${MAX_FREE_TEXT_LENGTH})`
305
+ };
306
+ }
307
+ if (!dlSession) {
308
+ yield warmCookies(proxyUrl);
309
+ }
310
+ const targetResult = resolveLang(targetLang, "target");
311
+ if (!targetResult.success) {
312
+ return { code: HTTP_STATUS_BAD_REQUEST, message: targetResult.error };
313
+ }
314
+ const sourceResult = resolveLang(sourceLang, "source");
315
+ if (!sourceResult.success) {
316
+ return { code: HTTP_STATUS_BAD_REQUEST, message: sourceResult.error };
317
+ }
318
+ const reqData = {
319
+ text: [text],
320
+ target_lang: targetResult.value,
321
+ source_lang: sourceResult.value,
322
+ usage_type: "Translate",
323
+ app_information: {
324
+ os: "brex_macOS",
325
+ os_version: `brex_chrome_${IMPERSONATED_CHROME_MAJOR}.0.0.0`,
326
+ app_version: CHROME_EXTENSION_VERSION,
327
+ app_build: "chrome_web_store",
328
+ instance_id: getInstanceID()
329
+ }
330
+ };
331
+ const reqId = Date.now();
332
+ try {
333
+ const response = yield xFetch.xfetch(
334
+ dlSession ? ONESHOT_PRO_ENDPOINT : ONESHOT_FREE_ENDPOINT,
335
+ __spreadValues({
336
+ method: "POST",
337
+ body: reqData,
338
+ headers: buildHeaders(dlSession)
339
+ }, proxy.createProxy({ url: proxyUrl }))
340
+ );
341
+ return processTranslationResponse(
342
+ response,
343
+ reqId,
344
+ sourceLang,
345
+ targetLang,
346
+ dlSession
347
+ );
348
+ } catch (error) {
349
+ return parseTranslationError(error, reqId);
350
+ }
283
351
  });
284
352
 
285
353
  var __async = (__this, __arguments, generator) => {
@@ -302,28 +370,37 @@ var __async = (__this, __arguments, generator) => {
302
370
  step((generator = generator.apply(__this, __arguments)).next());
303
371
  });
304
372
  };
305
- const translate = (text, targetLang, sourceLang, formal) => __async(void 0, null, function* () {
306
- const result = yield translateByDeepLX(sourceLang, targetLang, text, formal);
373
+ const translate = (text, targetLang, sourceLang, options) => __async(null, null, function* () {
374
+ const result = yield translateByDeepLX(
375
+ sourceLang,
376
+ targetLang,
377
+ text,
378
+ options == null ? void 0 : options.proxyUrl,
379
+ options == null ? void 0 : options.dlSession
380
+ );
307
381
  if ("message" in result) {
308
382
  throw new Error(result.message, { cause: result });
309
383
  }
310
384
  return result.data;
311
385
  });
312
386
 
313
- exports.API_URL = API_URL;
314
- exports.COMMON_HEADERS = COMMON_HEADERS;
315
- exports.FORMALITY_TONES = FORMALITY_TONES;
387
+ exports.CHROME_EXTENSION_ID = CHROME_EXTENSION_ID;
388
+ exports.CHROME_EXTENSION_VERSION = CHROME_EXTENSION_VERSION;
316
389
  exports.HTTP_STATUS_BAD_REQUEST = HTTP_STATUS_BAD_REQUEST;
317
390
  exports.HTTP_STATUS_INTERNAL_ERROR = HTTP_STATUS_INTERNAL_ERROR;
318
391
  exports.HTTP_STATUS_NOT_ALLOWED = HTTP_STATUS_NOT_ALLOWED;
319
392
  exports.HTTP_STATUS_NOT_FOUND = HTTP_STATUS_NOT_FOUND;
320
393
  exports.HTTP_STATUS_OK = HTTP_STATUS_OK;
394
+ exports.HTTP_STATUS_PAYLOAD_TOO_LARGE = HTTP_STATUS_PAYLOAD_TOO_LARGE;
321
395
  exports.HTTP_STATUS_SERVICE_UNAVAILABLE = HTTP_STATUS_SERVICE_UNAVAILABLE;
396
+ exports.HTTP_STATUS_TOO_MANY_REQUESTS = HTTP_STATUS_TOO_MANY_REQUESTS;
397
+ exports.IMPERSONATED_CHROME_MAJOR = IMPERSONATED_CHROME_MAJOR;
398
+ exports.MAX_FREE_TEXT_LENGTH = MAX_FREE_TEXT_LENGTH;
399
+ exports.ONESHOT_FREE_ENDPOINT = ONESHOT_FREE_ENDPOINT;
400
+ exports.ONESHOT_PRO_ENDPOINT = ONESHOT_PRO_ENDPOINT;
401
+ exports.SOURCE_LANG_MAP = SOURCE_LANG_MAP;
322
402
  exports.SUPPORTED_LANGUAGES = SUPPORTED_LANGUAGES;
403
+ exports.TARGET_LANG_MAP = TARGET_LANG_MAP;
323
404
  exports.abbreviateLanguage = abbreviateLanguage;
324
- exports.formatPostString = formatPostString;
325
- exports.getICount = getICount;
326
- exports.getRandomNumber = getRandomNumber;
327
- exports.getTimeStamp = getTimeStamp;
328
405
  exports.translate = translate;
329
406
  exports.translateByDeepLX = translateByDeepLX;
@@ -1,3 +1,3 @@
1
1
  import { type SourceLanguage, type TargetLanguage } from './constants.ts';
2
2
  import type { DeepLXTranslationResult } from './types.ts';
3
- export declare const translateByDeepLX: (sourceLang: SourceLanguage | undefined, targetLang: TargetLanguage, text: string, formal?: boolean, tagHandling?: string, proxyUrl?: string, dlSession?: string) => Promise<DeepLXTranslationResult>;
3
+ export declare const translateByDeepLX: (sourceLang: SourceLanguage | undefined, targetLang: TargetLanguage, text: string, proxyUrl?: string, dlSession?: string) => Promise<DeepLXTranslationResult>;