@deeplx/core 0.1.2 → 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/README.md +21 -3
- package/lib/api.d.ts +5 -1
- package/lib/api.js +2 -2
- package/lib/api.js.map +1 -1
- package/lib/constants.d.ts +64 -22
- package/lib/constants.js +72 -26
- package/lib/constants.js.map +1 -1
- package/lib/index.cjs +269 -191
- package/lib/translate.d.ts +1 -1
- package/lib/translate.js +155 -129
- package/lib/translate.js.map +1 -1
- package/lib/types.d.ts +17 -60
- package/lib/utils.d.ts +0 -5
- package/lib/utils.js +0 -20
- package/lib/utils.js.map +1 -1
- package/package.json +3 -7
package/lib/index.cjs
CHANGED
|
@@ -1,91 +1,129 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var node_crypto = require('node:crypto');
|
|
4
|
+
var proxy = require('node-fetch-native/proxy');
|
|
4
5
|
var xFetch = require('x-fetch');
|
|
5
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));
|
|
6
26
|
const SUPPORTED_LANGUAGES = [
|
|
27
|
+
{ code: "AR", language: "Arabic" },
|
|
7
28
|
{ code: "BG", language: "Bulgarian" },
|
|
8
|
-
{ code: "ZH", language: "Chinese" },
|
|
9
29
|
{ code: "CS", language: "Czech" },
|
|
10
30
|
{ code: "DA", language: "Danish" },
|
|
11
|
-
{ code: "
|
|
31
|
+
{ code: "DE", language: "German" },
|
|
32
|
+
{ code: "EL", language: "Greek" },
|
|
12
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)" },
|
|
13
38
|
{ code: "ET", language: "Estonian" },
|
|
14
39
|
{ code: "FI", language: "Finnish" },
|
|
15
40
|
{ code: "FR", language: "French" },
|
|
16
|
-
{ code: "
|
|
17
|
-
{ code: "EL", language: "Greek" },
|
|
41
|
+
{ code: "HE", language: "Hebrew" },
|
|
18
42
|
{ code: "HU", language: "Hungarian" },
|
|
43
|
+
{ code: "ID", language: "Indonesian" },
|
|
19
44
|
{ code: "IT", language: "Italian" },
|
|
20
45
|
{ code: "JA", language: "Japanese" },
|
|
21
|
-
{ code: "
|
|
46
|
+
{ code: "KO", language: "Korean" },
|
|
22
47
|
{ code: "LT", language: "Lithuanian" },
|
|
48
|
+
{ code: "LV", language: "Latvian" },
|
|
49
|
+
{ code: "NB", language: "Norwegian Bokm\xE5l" },
|
|
50
|
+
{ code: "NL", language: "Dutch" },
|
|
23
51
|
{ code: "PL", language: "Polish" },
|
|
24
52
|
{ code: "PT", language: "Portuguese" },
|
|
53
|
+
{ code: "PT-BR", language: "Portuguese (Brazilian)" },
|
|
54
|
+
{ code: "PT-PT", language: "Portuguese (European)" },
|
|
25
55
|
{ code: "RO", language: "Romanian" },
|
|
26
56
|
{ code: "RU", language: "Russian" },
|
|
27
57
|
{ code: "SK", language: "Slovak" },
|
|
28
58
|
{ code: "SL", language: "Slovenian" },
|
|
29
|
-
{ code: "ES", language: "Spanish" },
|
|
30
59
|
{ code: "SV", language: "Swedish" },
|
|
31
60
|
{ code: "TR", language: "Turkish" },
|
|
32
|
-
{ code: "
|
|
33
|
-
{ code: "
|
|
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)" }
|
|
34
66
|
];
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const
|
|
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;
|
|
41
73
|
const HTTP_STATUS_OK = 200;
|
|
42
74
|
const HTTP_STATUS_BAD_REQUEST = 400;
|
|
43
75
|
const HTTP_STATUS_NOT_FOUND = 404;
|
|
44
76
|
const HTTP_STATUS_NOT_ALLOWED = 405;
|
|
77
|
+
const HTTP_STATUS_PAYLOAD_TOO_LARGE = 413;
|
|
78
|
+
const HTTP_STATUS_TOO_MANY_REQUESTS = 429;
|
|
45
79
|
const HTTP_STATUS_INTERNAL_ERROR = 500;
|
|
46
80
|
const HTTP_STATUS_SERVICE_UNAVAILABLE = 503;
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
"
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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"
|
|
61
121
|
};
|
|
122
|
+
const SOURCE_LANG_MAP = __spreadProps(__spreadValues$1({}, TARGET_LANG_MAP), {
|
|
123
|
+
EN: "en",
|
|
124
|
+
PT: "pt"
|
|
125
|
+
});
|
|
62
126
|
|
|
63
|
-
const getICount = (translateText) => {
|
|
64
|
-
return (translateText.match(/i/g) || []).length;
|
|
65
|
-
};
|
|
66
|
-
const getRandomNumber = () => {
|
|
67
|
-
const base = Math.floor(Math.random() * 99999) + 83e5;
|
|
68
|
-
return base * 1e3;
|
|
69
|
-
};
|
|
70
|
-
const getTimeStamp = (iCount) => {
|
|
71
|
-
const ts = Date.now();
|
|
72
|
-
if (iCount !== 0) {
|
|
73
|
-
const adjustedCount = iCount + 1;
|
|
74
|
-
return ts - ts % adjustedCount + adjustedCount;
|
|
75
|
-
}
|
|
76
|
-
return ts;
|
|
77
|
-
};
|
|
78
|
-
const formatPostString = (postData) => {
|
|
79
|
-
const postStr = JSON.stringify(postData);
|
|
80
|
-
const shouldAddSpace = (
|
|
81
|
-
// eslint-disable-next-line @typescript-eslint/no-magic-numbers
|
|
82
|
-
(postData.id + 5) % 29 === 0 || (postData.id + 3) % 13 === 0
|
|
83
|
-
);
|
|
84
|
-
return postStr.replaceAll(
|
|
85
|
-
'"method":"',
|
|
86
|
-
shouldAddSpace ? `"method" : "` : `"method": "`
|
|
87
|
-
);
|
|
88
|
-
};
|
|
89
127
|
let abbreviateLanguageDictionary;
|
|
90
128
|
function getAbbreviateLanguages() {
|
|
91
129
|
return abbreviateLanguageDictionary != null ? abbreviateLanguageDictionary : abbreviateLanguageDictionary = SUPPORTED_LANGUAGES.reduce(
|
|
@@ -102,8 +140,6 @@ function abbreviateLanguage(language) {
|
|
|
102
140
|
}
|
|
103
141
|
|
|
104
142
|
var __defProp = Object.defineProperty;
|
|
105
|
-
var __defProps = Object.defineProperties;
|
|
106
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
107
143
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
108
144
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
109
145
|
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
@@ -119,7 +155,6 @@ var __spreadValues = (a, b) => {
|
|
|
119
155
|
}
|
|
120
156
|
return a;
|
|
121
157
|
};
|
|
122
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
123
158
|
var __async$1 = (__this, __arguments, generator) => {
|
|
124
159
|
return new Promise((resolve, reject) => {
|
|
125
160
|
var fulfilled = (value) => {
|
|
@@ -140,145 +175,179 @@ var __async$1 = (__this, __arguments, generator) => {
|
|
|
140
175
|
step((generator = generator.apply(__this, __arguments)).next());
|
|
141
176
|
});
|
|
142
177
|
};
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
if (!text) {
|
|
154
|
-
return { code: HTTP_STATUS_NOT_FOUND, message: "No text to translate" };
|
|
155
|
-
}
|
|
156
|
-
const textParts = splitAndProcess(text);
|
|
157
|
-
const translatedParts = [];
|
|
158
|
-
const allAlternatives = [];
|
|
159
|
-
for (const part of textParts) {
|
|
160
|
-
if (!part.trim()) {
|
|
161
|
-
translatedParts.push("");
|
|
162
|
-
allAlternatives.push([""]);
|
|
163
|
-
continue;
|
|
164
|
-
}
|
|
165
|
-
if (!sourceLang || sourceLang === "auto") {
|
|
166
|
-
sourceLang = whatlangNode.detectLang(part, true);
|
|
167
|
-
}
|
|
168
|
-
const sourceLangCode = (_a = abbreviateLanguage(sourceLang)) != null ? _a : sourceLang.toUpperCase();
|
|
169
|
-
const jobs = [
|
|
170
|
-
{
|
|
171
|
-
kind: "default",
|
|
172
|
-
preferred_num_beams: 4,
|
|
173
|
-
raw_en_context_before: [],
|
|
174
|
-
raw_en_context_after: [],
|
|
175
|
-
sentences: [{ prefix: "", text: part, id: 0 }]
|
|
176
|
-
}
|
|
177
|
-
];
|
|
178
|
-
let hasRegionalVariant = false;
|
|
179
|
-
let targetLangCode = (_b = abbreviateLanguage(targetLang)) != null ? _b : targetLang.toUpperCase();
|
|
180
|
-
const targetLangParts = targetLang.split("-");
|
|
181
|
-
if (targetLangParts.length > 1) {
|
|
182
|
-
targetLangCode = targetLangParts[0];
|
|
183
|
-
hasRegionalVariant = true;
|
|
184
|
-
}
|
|
185
|
-
const id = getRandomNumber();
|
|
186
|
-
const postData = {
|
|
187
|
-
jsonrpc: "2.0",
|
|
188
|
-
method: "LMT_handle_jobs",
|
|
189
|
-
id,
|
|
190
|
-
params: {
|
|
191
|
-
commonJobParams: __spreadValues({
|
|
192
|
-
mode: "translate",
|
|
193
|
-
formality: (
|
|
194
|
-
// eslint-disable-next-line sonarjs/no-nested-conditional
|
|
195
|
-
formal == null ? "undefined" : formal ? "formal" : "informal"
|
|
196
|
-
),
|
|
197
|
-
transcribe_as: "romanize",
|
|
198
|
-
advancedMode: false,
|
|
199
|
-
textType: tagHandling,
|
|
200
|
-
wasSpoken: false
|
|
201
|
-
}, hasRegionalVariant && { regionalVariant: targetLang }),
|
|
202
|
-
lang: {
|
|
203
|
-
source_lang_user_selected: "auto",
|
|
204
|
-
target_lang: targetLangCode,
|
|
205
|
-
source_lang_computed: sourceLangCode
|
|
206
|
-
},
|
|
207
|
-
jobs,
|
|
208
|
-
timestamp: getTimeStamp(getICount(part))
|
|
209
|
-
}
|
|
210
|
-
};
|
|
211
|
-
let translations;
|
|
212
|
-
try {
|
|
213
|
-
const { result } = yield makeRequest(postData, proxyUrl, dlSession);
|
|
214
|
-
translations = result.translations;
|
|
215
|
-
} catch (error) {
|
|
216
|
-
return {
|
|
217
|
-
code: HTTP_STATUS_SERVICE_UNAVAILABLE,
|
|
218
|
-
message: String(error)
|
|
219
|
-
};
|
|
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;
|
|
220
188
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
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("; ");
|
|
235
207
|
}
|
|
236
208
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
}
|
|
209
|
+
} catch (e) {
|
|
210
|
+
warmupPromise = null;
|
|
240
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' };
|
|
241
220
|
}
|
|
242
|
-
|
|
243
|
-
return {
|
|
244
|
-
code: HTTP_STATUS_SERVICE_UNAVAILABLE,
|
|
245
|
-
message: "Translation failed"
|
|
246
|
-
};
|
|
247
|
-
}
|
|
248
|
-
translatedParts.push(partTranslation);
|
|
249
|
-
allAlternatives.push(partAlternatives);
|
|
221
|
+
return { success: true, value: void 0 };
|
|
250
222
|
}
|
|
251
|
-
const
|
|
252
|
-
const
|
|
253
|
-
let
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
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()];
|
|
257
230
|
}
|
|
258
231
|
}
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
}
|
|
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, ..." };
|
|
269
242
|
}
|
|
270
|
-
|
|
243
|
+
return { code: status, id: reqId, message: error.message };
|
|
271
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
|
+
};
|
|
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";
|
|
272
286
|
return {
|
|
273
287
|
code: HTTP_STATUS_OK,
|
|
274
|
-
id:
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
sourceLang,
|
|
288
|
+
id: reqId,
|
|
289
|
+
data: mainTranslation.text,
|
|
290
|
+
alternatives: [],
|
|
291
|
+
sourceLang: detectedLang,
|
|
279
292
|
targetLang,
|
|
280
293
|
method: dlSession ? "Pro" : "Free"
|
|
281
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
|
+
}
|
|
282
351
|
});
|
|
283
352
|
|
|
284
353
|
var __async = (__this, __arguments, generator) => {
|
|
@@ -301,28 +370,37 @@ var __async = (__this, __arguments, generator) => {
|
|
|
301
370
|
step((generator = generator.apply(__this, __arguments)).next());
|
|
302
371
|
});
|
|
303
372
|
};
|
|
304
|
-
const translate = (text, targetLang, sourceLang,
|
|
305
|
-
const result = yield translateByDeepLX(
|
|
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
|
+
);
|
|
306
381
|
if ("message" in result) {
|
|
307
382
|
throw new Error(result.message, { cause: result });
|
|
308
383
|
}
|
|
309
384
|
return result.data;
|
|
310
385
|
});
|
|
311
386
|
|
|
312
|
-
exports.
|
|
313
|
-
exports.
|
|
314
|
-
exports.FORMALITY_TONES = FORMALITY_TONES;
|
|
387
|
+
exports.CHROME_EXTENSION_ID = CHROME_EXTENSION_ID;
|
|
388
|
+
exports.CHROME_EXTENSION_VERSION = CHROME_EXTENSION_VERSION;
|
|
315
389
|
exports.HTTP_STATUS_BAD_REQUEST = HTTP_STATUS_BAD_REQUEST;
|
|
316
390
|
exports.HTTP_STATUS_INTERNAL_ERROR = HTTP_STATUS_INTERNAL_ERROR;
|
|
317
391
|
exports.HTTP_STATUS_NOT_ALLOWED = HTTP_STATUS_NOT_ALLOWED;
|
|
318
392
|
exports.HTTP_STATUS_NOT_FOUND = HTTP_STATUS_NOT_FOUND;
|
|
319
393
|
exports.HTTP_STATUS_OK = HTTP_STATUS_OK;
|
|
394
|
+
exports.HTTP_STATUS_PAYLOAD_TOO_LARGE = HTTP_STATUS_PAYLOAD_TOO_LARGE;
|
|
320
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;
|
|
321
402
|
exports.SUPPORTED_LANGUAGES = SUPPORTED_LANGUAGES;
|
|
403
|
+
exports.TARGET_LANG_MAP = TARGET_LANG_MAP;
|
|
322
404
|
exports.abbreviateLanguage = abbreviateLanguage;
|
|
323
|
-
exports.formatPostString = formatPostString;
|
|
324
|
-
exports.getICount = getICount;
|
|
325
|
-
exports.getRandomNumber = getRandomNumber;
|
|
326
|
-
exports.getTimeStamp = getTimeStamp;
|
|
327
405
|
exports.translate = translate;
|
|
328
406
|
exports.translateByDeepLX = translateByDeepLX;
|
package/lib/translate.d.ts
CHANGED
|
@@ -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,
|
|
3
|
+
export declare const translateByDeepLX: (sourceLang: SourceLanguage | undefined, targetLang: TargetLanguage, text: string, proxyUrl?: string, dlSession?: string) => Promise<DeepLXTranslationResult>;
|