@deeplx/core 0.1.3 → 0.2.1
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 +62 -30
- package/lib/api.d.ts +6 -1
- package/lib/api.js +2 -2
- package/lib/api.js.map +1 -1
- package/lib/constants.d.ts +64 -35
- package/lib/constants.js +72 -26
- package/lib/constants.js.map +1 -1
- package/lib/index.cjs +270 -191
- package/lib/translate.d.ts +1 -1
- package/lib/translate.js +155 -130
- 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 -8
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
34
|
-
{ 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)" }
|
|
35
66
|
];
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
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;
|
|
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
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
"
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
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,180 @@ var __async$1 = (__this, __arguments, generator) => {
|
|
|
141
175
|
step((generator = generator.apply(__this, __arguments)).next());
|
|
142
176
|
});
|
|
143
177
|
};
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
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
|
-
|
|
239
|
-
|
|
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
|
-
|
|
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
|
|
253
|
-
const
|
|
254
|
-
let
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
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
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
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
|
-
|
|
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:
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
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, signal) => __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
|
+
signal
|
|
340
|
+
}, proxy.createProxy({ url: proxyUrl }))
|
|
341
|
+
);
|
|
342
|
+
return processTranslationResponse(
|
|
343
|
+
response,
|
|
344
|
+
reqId,
|
|
345
|
+
sourceLang,
|
|
346
|
+
targetLang,
|
|
347
|
+
dlSession
|
|
348
|
+
);
|
|
349
|
+
} catch (error) {
|
|
350
|
+
return parseTranslationError(error, reqId);
|
|
351
|
+
}
|
|
283
352
|
});
|
|
284
353
|
|
|
285
354
|
var __async = (__this, __arguments, generator) => {
|
|
@@ -302,28 +371,38 @@ var __async = (__this, __arguments, generator) => {
|
|
|
302
371
|
step((generator = generator.apply(__this, __arguments)).next());
|
|
303
372
|
});
|
|
304
373
|
};
|
|
305
|
-
const translate = (text, targetLang, sourceLang,
|
|
306
|
-
const result = yield translateByDeepLX(
|
|
374
|
+
const translate = (text, targetLang, sourceLang, options) => __async(null, null, function* () {
|
|
375
|
+
const result = yield translateByDeepLX(
|
|
376
|
+
sourceLang,
|
|
377
|
+
targetLang,
|
|
378
|
+
text,
|
|
379
|
+
options == null ? void 0 : options.proxyUrl,
|
|
380
|
+
options == null ? void 0 : options.dlSession,
|
|
381
|
+
options == null ? void 0 : options.signal
|
|
382
|
+
);
|
|
307
383
|
if ("message" in result) {
|
|
308
384
|
throw new Error(result.message, { cause: result });
|
|
309
385
|
}
|
|
310
386
|
return result.data;
|
|
311
387
|
});
|
|
312
388
|
|
|
313
|
-
exports.
|
|
314
|
-
exports.
|
|
315
|
-
exports.FORMALITY_TONES = FORMALITY_TONES;
|
|
389
|
+
exports.CHROME_EXTENSION_ID = CHROME_EXTENSION_ID;
|
|
390
|
+
exports.CHROME_EXTENSION_VERSION = CHROME_EXTENSION_VERSION;
|
|
316
391
|
exports.HTTP_STATUS_BAD_REQUEST = HTTP_STATUS_BAD_REQUEST;
|
|
317
392
|
exports.HTTP_STATUS_INTERNAL_ERROR = HTTP_STATUS_INTERNAL_ERROR;
|
|
318
393
|
exports.HTTP_STATUS_NOT_ALLOWED = HTTP_STATUS_NOT_ALLOWED;
|
|
319
394
|
exports.HTTP_STATUS_NOT_FOUND = HTTP_STATUS_NOT_FOUND;
|
|
320
395
|
exports.HTTP_STATUS_OK = HTTP_STATUS_OK;
|
|
396
|
+
exports.HTTP_STATUS_PAYLOAD_TOO_LARGE = HTTP_STATUS_PAYLOAD_TOO_LARGE;
|
|
321
397
|
exports.HTTP_STATUS_SERVICE_UNAVAILABLE = HTTP_STATUS_SERVICE_UNAVAILABLE;
|
|
398
|
+
exports.HTTP_STATUS_TOO_MANY_REQUESTS = HTTP_STATUS_TOO_MANY_REQUESTS;
|
|
399
|
+
exports.IMPERSONATED_CHROME_MAJOR = IMPERSONATED_CHROME_MAJOR;
|
|
400
|
+
exports.MAX_FREE_TEXT_LENGTH = MAX_FREE_TEXT_LENGTH;
|
|
401
|
+
exports.ONESHOT_FREE_ENDPOINT = ONESHOT_FREE_ENDPOINT;
|
|
402
|
+
exports.ONESHOT_PRO_ENDPOINT = ONESHOT_PRO_ENDPOINT;
|
|
403
|
+
exports.SOURCE_LANG_MAP = SOURCE_LANG_MAP;
|
|
322
404
|
exports.SUPPORTED_LANGUAGES = SUPPORTED_LANGUAGES;
|
|
405
|
+
exports.TARGET_LANG_MAP = TARGET_LANG_MAP;
|
|
323
406
|
exports.abbreviateLanguage = abbreviateLanguage;
|
|
324
|
-
exports.formatPostString = formatPostString;
|
|
325
|
-
exports.getICount = getICount;
|
|
326
|
-
exports.getRandomNumber = getRandomNumber;
|
|
327
|
-
exports.getTimeStamp = getTimeStamp;
|
|
328
407
|
exports.translate = translate;
|
|
329
408
|
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, signal?: AbortSignal) => Promise<DeepLXTranslationResult>;
|