@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/translate.js CHANGED
@@ -1,150 +1,174 @@
1
+ import { randomUUID } from 'node:crypto';
1
2
  import { createProxy } from 'node-fetch-native/proxy';
2
- import { detectLang } from 'whatlang-node';
3
- import { xfetch } from 'x-fetch';
4
- import { API_URL, COMMON_HEADERS, HTTP_STATUS_NOT_FOUND, HTTP_STATUS_OK, HTTP_STATUS_SERVICE_UNAVAILABLE, } from "./constants.js";
5
- import { abbreviateLanguage, formatPostString, getICount, getRandomNumber, getTimeStamp, } from "./utils.js";
6
- const makeRequest = async (postData, proxyUrl, dlSession) => {
7
- return xfetch(API_URL, {
8
- method: 'POST',
9
- body: formatPostString(postData),
10
- headers: dlSession
11
- ? { ...COMMON_HEADERS, Cookie: `dl_session=${dlSession}` }
12
- : COMMON_HEADERS,
13
- ...createProxy({ url: proxyUrl }),
14
- });
15
- };
16
- const splitAndProcess = (text) => text.split('\n').map(line => (line.trim() === '' ? '\n' : line));
17
- export const translateByDeepLX = async (sourceLang, targetLang, text, formal, tagHandling = 'plaintext', proxyUrl, dlSession) => {
18
- if (!text) {
19
- return { code: HTTP_STATUS_NOT_FOUND, message: 'No text to translate' };
3
+ import { ResponseError, xfetch } from 'x-fetch';
4
+ import { ONESHOT_FREE_ENDPOINT, ONESHOT_PRO_ENDPOINT, CHROME_EXTENSION_ID, CHROME_EXTENSION_VERSION, IMPERSONATED_CHROME_MAJOR, MAX_FREE_TEXT_LENGTH, HTTP_STATUS_NOT_FOUND, HTTP_STATUS_OK, HTTP_STATUS_SERVICE_UNAVAILABLE, HTTP_STATUS_BAD_REQUEST, HTTP_STATUS_PAYLOAD_TOO_LARGE, HTTP_STATUS_TOO_MANY_REQUESTS, TARGET_LANG_MAP, SOURCE_LANG_MAP, } from "./constants.js";
5
+ import { abbreviateLanguage } from "./utils.js";
6
+ let instanceID_;
7
+ function getInstanceID() {
8
+ return (instanceID_ ??= randomUUID());
9
+ }
10
+ let sharedCookies = '';
11
+ let warmupPromise = null;
12
+ async function warmCookies(proxyUrl) {
13
+ if (warmupPromise !== null) {
14
+ return warmupPromise;
20
15
  }
21
- const textParts = splitAndProcess(text);
22
- const translatedParts = [];
23
- const allAlternatives = [];
24
- for (const part of textParts) {
25
- if (!part.trim()) {
26
- translatedParts.push('');
27
- allAlternatives.push(['']);
28
- continue;
29
- }
30
- if (!sourceLang || sourceLang === 'auto') {
31
- sourceLang = detectLang(part, true);
32
- }
33
- const sourceLangCode = abbreviateLanguage(sourceLang) ??
34
- sourceLang.toUpperCase();
35
- const jobs = [
36
- {
37
- kind: 'default',
38
- preferred_num_beams: 4,
39
- raw_en_context_before: [],
40
- raw_en_context_after: [],
41
- sentences: [{ prefix: '', text: part, id: 0 }],
42
- },
43
- ];
44
- let hasRegionalVariant = false;
45
- let targetLangCode = abbreviateLanguage(targetLang) ??
46
- targetLang.toUpperCase();
47
- const targetLangParts = targetLang.split('-');
48
- if (targetLangParts.length > 1) {
49
- targetLangCode = targetLangParts[0];
50
- hasRegionalVariant = true;
51
- }
52
- const id = getRandomNumber();
53
- const postData = {
54
- jsonrpc: '2.0',
55
- method: 'LMT_handle_jobs',
56
- id,
57
- params: {
58
- commonJobParams: {
59
- mode: 'translate',
60
- formality: formal == null ? 'undefined' : formal ? 'formal' : 'informal',
61
- transcribe_as: 'romanize',
62
- advancedMode: false,
63
- textType: tagHandling,
64
- wasSpoken: false,
65
- ...(hasRegionalVariant && { regionalVariant: targetLang }),
66
- },
67
- lang: {
68
- source_lang_user_selected: 'auto',
69
- target_lang: targetLangCode,
70
- source_lang_computed: sourceLangCode,
71
- },
72
- jobs,
73
- timestamp: getTimeStamp(getICount(part)),
74
- },
75
- };
76
- let translations;
16
+ warmupPromise = (async () => {
77
17
  try {
78
- const { result } = await makeRequest(postData, proxyUrl, dlSession);
79
- translations = result.translations;
80
- }
81
- catch (error) {
82
- return {
83
- code: HTTP_STATUS_SERVICE_UNAVAILABLE,
84
- message: String(error),
85
- };
86
- }
87
- let partTranslation = '';
88
- const partAlternatives = [];
89
- if (translations.length > 0) {
90
- for (const translation of translations) {
91
- partTranslation += translation.beams[0].sentences[0].text + ' ';
92
- }
93
- partTranslation = partTranslation.trim();
94
- const numBeams = translations[0].beams.length;
95
- for (let i = 1; i < numBeams; i++) {
96
- let altText = '';
97
- for (const translation of translations) {
98
- const beams = translation.beams;
99
- if (i < beams.length) {
100
- altText += beams[i].sentences[0].text + ' ';
101
- }
18
+ const res = await xfetch('https://www.deepl.com/translator', {
19
+ type: null,
20
+ ...createProxy({ url: proxyUrl }),
21
+ });
22
+ const setCookie = res.headers.get('set-cookie');
23
+ if (setCookie) {
24
+ const cookies = [];
25
+ const userCountryMatch = /userCountry=[^;]+/.exec(setCookie);
26
+ if (userCountryMatch) {
27
+ cookies.push(userCountryMatch[0]);
28
+ }
29
+ const verifiedBotMatch = /verifiedBot=[^;]+/.exec(setCookie);
30
+ if (verifiedBotMatch) {
31
+ cookies.push(verifiedBotMatch[0]);
102
32
  }
103
- if (altText) {
104
- partAlternatives.push(altText.trim());
33
+ if (cookies.length > 0) {
34
+ sharedCookies = cookies.join('; ');
105
35
  }
106
36
  }
107
37
  }
108
- if (!partTranslation) {
109
- return {
110
- code: HTTP_STATUS_SERVICE_UNAVAILABLE,
111
- message: 'Translation failed',
112
- };
38
+ catch {
39
+ warmupPromise = null;
40
+ }
41
+ })();
42
+ return warmupPromise;
43
+ }
44
+ function resolveLang(code, kind) {
45
+ if (!code || code.toLowerCase() === 'auto') {
46
+ if (kind === 'target') {
47
+ return { success: false, error: 'target_lang cannot be "auto" or empty' };
113
48
  }
114
- translatedParts.push(partTranslation);
115
- allAlternatives.push(partAlternatives);
49
+ return { success: true, value: undefined };
116
50
  }
117
- const translatedText = translatedParts.join('\n');
118
- const combinedAlternatives = [];
119
- let maxAlts = 0;
120
- for (const alts of allAlternatives) {
121
- if (alts.length > maxAlts) {
122
- maxAlts = alts.length;
51
+ const langMap = kind === 'target' ? TARGET_LANG_MAP : SOURCE_LANG_MAP;
52
+ const upperCode = code.toUpperCase();
53
+ let mapped = langMap[upperCode];
54
+ if (!mapped) {
55
+ const abbreviated = abbreviateLanguage(code);
56
+ if (abbreviated) {
57
+ mapped = langMap[abbreviated.toUpperCase()];
123
58
  }
124
59
  }
125
- for (let i = 0; i < maxAlts; i++) {
126
- const altParts = [];
127
- for (const [j, alts] of allAlternatives.entries()) {
128
- if (i < alts.length) {
129
- altParts.push(alts[i]);
130
- }
131
- else if (translatedParts[j].length === 0) {
132
- altParts.push('');
133
- }
134
- else {
135
- altParts.push(translatedParts[j]);
136
- }
60
+ if (!mapped) {
61
+ return { success: false, error: `unsupported ${kind}_lang "${code}"` };
62
+ }
63
+ return { success: true, value: mapped };
64
+ }
65
+ function parseTranslationError(error, reqId) {
66
+ if (error instanceof ResponseError) {
67
+ const status = error.response.status;
68
+ if (status === HTTP_STATUS_TOO_MANY_REQUESTS) {
69
+ return { code: status, id: reqId, message: 'too many requests, ...' };
137
70
  }
138
- combinedAlternatives.push(altParts.join('\n'));
71
+ return { code: status, id: reqId, message: error.message };
139
72
  }
73
+ return {
74
+ code: HTTP_STATUS_SERVICE_UNAVAILABLE,
75
+ id: reqId,
76
+ message: String(error),
77
+ };
78
+ }
79
+ function buildHeaders(dlSession) {
80
+ const authValue = dlSession ? `Bearer ${dlSession}` : 'None';
81
+ const headers = {
82
+ 'Content-Type': 'application/json',
83
+ Accept: '*/*',
84
+ Authorization: authValue,
85
+ Origin: `chrome-extension://${CHROME_EXTENSION_ID}`,
86
+ 'Sec-Fetch-Site': 'cross-site',
87
+ 'Sec-Fetch-Mode': 'cors',
88
+ 'Sec-Fetch-Dest': 'empty',
89
+ 'Accept-Encoding': 'gzip, deflate, br',
90
+ '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`,
91
+ };
92
+ if (sharedCookies) {
93
+ headers['Cookie'] = sharedCookies;
94
+ }
95
+ return headers;
96
+ }
97
+ function processTranslationResponse(response, reqId, sourceLang, targetLang, dlSession) {
98
+ if (!response?.translations || response.translations.length === 0) {
99
+ return {
100
+ code: HTTP_STATUS_SERVICE_UNAVAILABLE,
101
+ id: reqId,
102
+ message: 'Translation failed',
103
+ };
104
+ }
105
+ const mainTranslation = response.translations[0];
106
+ if (!mainTranslation.text) {
107
+ return {
108
+ code: HTTP_STATUS_SERVICE_UNAVAILABLE,
109
+ id: reqId,
110
+ message: 'Translation failed',
111
+ };
112
+ }
113
+ const detectedLang = mainTranslation.detected_source_language
114
+ ? mainTranslation.detected_source_language.toUpperCase()
115
+ : sourceLang || 'auto';
140
116
  return {
141
117
  code: HTTP_STATUS_OK,
142
- id: getRandomNumber(),
143
- data: translatedText,
144
- alternatives: combinedAlternatives,
145
- sourceLang: sourceLang,
118
+ id: reqId,
119
+ data: mainTranslation.text,
120
+ alternatives: [],
121
+ sourceLang: detectedLang,
146
122
  targetLang,
147
123
  method: dlSession ? 'Pro' : 'Free',
148
124
  };
125
+ }
126
+ export const translateByDeepLX = async (sourceLang, targetLang, text, proxyUrl, dlSession) => {
127
+ if (!text) {
128
+ return { code: HTTP_STATUS_NOT_FOUND, message: 'No text to translate' };
129
+ }
130
+ if ([...text].length > MAX_FREE_TEXT_LENGTH) {
131
+ return {
132
+ code: HTTP_STATUS_PAYLOAD_TOO_LARGE,
133
+ message: `text exceeds maximum length: ${[...text].length} characters (anonymous oneshot limit is ${MAX_FREE_TEXT_LENGTH})`,
134
+ };
135
+ }
136
+ if (!dlSession) {
137
+ await warmCookies(proxyUrl);
138
+ }
139
+ const targetResult = resolveLang(targetLang, 'target');
140
+ if (!targetResult.success) {
141
+ return { code: HTTP_STATUS_BAD_REQUEST, message: targetResult.error };
142
+ }
143
+ const sourceResult = resolveLang(sourceLang, 'source');
144
+ if (!sourceResult.success) {
145
+ return { code: HTTP_STATUS_BAD_REQUEST, message: sourceResult.error };
146
+ }
147
+ const reqData = {
148
+ text: [text],
149
+ target_lang: targetResult.value,
150
+ source_lang: sourceResult.value,
151
+ usage_type: 'Translate',
152
+ app_information: {
153
+ os: 'brex_macOS',
154
+ os_version: `brex_chrome_${IMPERSONATED_CHROME_MAJOR}.0.0.0`,
155
+ app_version: CHROME_EXTENSION_VERSION,
156
+ app_build: 'chrome_web_store',
157
+ instance_id: getInstanceID(),
158
+ },
159
+ };
160
+ const reqId = Date.now();
161
+ try {
162
+ const response = await xfetch(dlSession ? ONESHOT_PRO_ENDPOINT : ONESHOT_FREE_ENDPOINT, {
163
+ method: 'POST',
164
+ body: reqData,
165
+ headers: buildHeaders(dlSession),
166
+ ...createProxy({ url: proxyUrl }),
167
+ });
168
+ return processTranslationResponse(response, reqId, sourceLang, targetLang, dlSession);
169
+ }
170
+ catch (error) {
171
+ return parseTranslationError(error, reqId);
172
+ }
149
173
  };
150
174
  //# sourceMappingURL=translate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"translate.js","sourceRoot":"","sources":["../src/translate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"translate.js","sourceRoot":"","sources":["../src/translate.ts"],"names":[],"mappings":"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"}
package/lib/types.d.ts CHANGED
@@ -1,68 +1,25 @@
1
- import type { FormalityTone, SourceLanguage, TargetLanguage } from './constants.ts';
1
+ import type { SourceLanguage, TargetLanguage } from './constants.ts';
2
2
  export type ValueOf<T> = T extends ReadonlyArray<infer R> ? R : T extends Set<infer R> ? R : T[keyof T];
3
- export interface Lang {
4
- source_lang_user_selected: string;
3
+ export interface AppInformation {
4
+ os: string;
5
+ os_version: string;
6
+ app_version: string;
7
+ app_build: string;
8
+ instance_id: string;
9
+ }
10
+ export interface OneshotRequest {
11
+ text: string[];
5
12
  target_lang: string;
6
- source_lang_computed?: string;
13
+ source_lang?: string;
14
+ usage_type: string;
15
+ app_information: AppInformation;
7
16
  }
8
- export interface CommonJobParams {
9
- formality: FormalityTone;
10
- transcribe_as: string;
11
- mode: string;
12
- wasSpoken: boolean;
13
- advancedMode: boolean;
14
- textType: string;
15
- regionalVariant?: string;
16
- }
17
- export interface Sentence {
18
- prefix: string;
17
+ export interface OneshotTranslation {
19
18
  text: string;
20
- id: number;
21
- }
22
- export interface Job {
23
- kind: string;
24
- preferred_num_beams: number;
25
- raw_en_context_before: string[];
26
- raw_en_context_after: string[];
27
- sentences: Sentence[];
28
- }
29
- export interface Params {
30
- commonJobParams: CommonJobParams;
31
- lang: Lang;
32
- jobs: Job[];
33
- timestamp: number;
34
- }
35
- export interface PostData {
36
- jsonrpc: string;
37
- method: string;
38
- id: number;
39
- params: Params;
19
+ detected_source_language?: string;
40
20
  }
41
- export interface TranslationBeam {
42
- sentences: SentenceResponse[];
43
- num_symbols: number;
44
- rephrase_variant: {
45
- name: string;
46
- };
47
- }
48
- export interface Translation {
49
- beams: TranslationBeam[];
50
- quality: string;
51
- }
52
- export interface TranslationResponse {
53
- jsonrpc: string;
54
- id: number;
55
- result: {
56
- translations: Translation[];
57
- target_lang: string;
58
- source_lang: string;
59
- source_lang_is_confident: boolean;
60
- detectedLanguages: Record<string, string>;
61
- };
62
- }
63
- export interface SentenceResponse {
64
- text: string;
65
- ids: number[];
21
+ export interface OneshotResponse {
22
+ translations: OneshotTranslation[];
66
23
  }
67
24
  export interface DeepLXTranslationErrorResult {
68
25
  code: number;
package/lib/utils.d.ts CHANGED
@@ -1,7 +1,2 @@
1
1
  import { type SupportedCode } from './constants.ts';
2
- import type { PostData } from './types.ts';
3
- export declare const getICount: (translateText: string) => number;
4
- export declare const getRandomNumber: () => number;
5
- export declare const getTimeStamp: (iCount: number) => number;
6
- export declare const formatPostString: (postData: PostData) => string;
7
2
  export declare function abbreviateLanguage(language: string): SupportedCode | undefined;
package/lib/utils.js CHANGED
@@ -1,24 +1,4 @@
1
1
  import { SUPPORTED_LANGUAGES, } from "./constants.js";
2
- export const getICount = (translateText) => {
3
- return (translateText.match(/i/g) || []).length;
4
- };
5
- export const getRandomNumber = () => {
6
- const base = Math.floor(Math.random() * 99_999) + 8_300_000;
7
- return base * 1000;
8
- };
9
- export const getTimeStamp = (iCount) => {
10
- const ts = Date.now();
11
- if (iCount !== 0) {
12
- const adjustedCount = iCount + 1;
13
- return ts - (ts % adjustedCount) + adjustedCount;
14
- }
15
- return ts;
16
- };
17
- export const formatPostString = (postData) => {
18
- const postStr = JSON.stringify(postData);
19
- const shouldAddSpace = (postData.id + 5) % 29 === 0 || (postData.id + 3) % 13 === 0;
20
- return postStr.replaceAll('"method":"', shouldAddSpace ? `"method" : "` : `"method": "`);
21
- };
22
2
  let abbreviateLanguageDictionary;
23
3
  function getAbbreviateLanguages() {
24
4
  return (abbreviateLanguageDictionary ??= SUPPORTED_LANGUAGES.reduce((acc, lang) => {
package/lib/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,GAGpB,MAAM,gBAAgB,CAAA;AAIvB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,aAAqB,EAAU,EAAE;IACzD,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAA;AACjD,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,eAAe,GAAG,GAAW,EAAE;IAE1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,SAAS,CAAA;IAC3D,OAAO,IAAI,GAAG,IAAI,CAAA;AACpB,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAc,EAAU,EAAE;IACrD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACrB,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACjB,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC,CAAA;QAChC,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,aAAa,CAAC,GAAG,aAAa,CAAA;IAClD,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAkB,EAAU,EAAE;IAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IACxC,MAAM,cAAc,GAElB,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC9D,OAAO,OAAO,CAAC,UAAU,CACvB,YAAY,EACZ,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAChD,CAAA;AACH,CAAC,CAAA;AAED,IAAI,4BAES,CAAA;AAEb,SAAS,sBAAsB;IAE7B,OAAO,CAAC,4BAA4B,KAAK,mBAAmB,CAAC,MAAM,CACjE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACZ,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAyB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAA;QAC/D,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAyB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAA;QACnE,OAAO,GAAG,CAAA;IACZ,CAAC,EACD,EAAgD,CACjD,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,QAAgB;IAEhB,OAAO,sBAAsB,EAAE,CAC7B,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAyB,CAC5D,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,GAGpB,MAAM,gBAAgB,CAAA;AAEvB,IAAI,4BAES,CAAA;AAEb,SAAS,sBAAsB;IAE7B,OAAO,CAAC,4BAA4B,KAAK,mBAAmB,CAAC,MAAM,CACjE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACZ,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAyB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAA;QAC/D,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAyB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAA;QACnE,OAAO,GAAG,CAAA;IACZ,CAAC,EACD,EAAgD,CACjD,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,QAAgB;IAEhB,OAAO,sBAAsB,EAAE,CAC7B,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAyB,CAC5D,CAAA;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deeplx/core",
3
- "version": "0.1.3",
3
+ "version": "0.2.0",
4
4
  "type": "module",
5
5
  "description": "An unofficial but powerful and easy-to-use yet free DeepL API client for Node.js using [DeepL](https://www.deepl.com) by porting [OwO-Network/DeepLX](https://github.com/OwO-Network/DeepLX).",
6
6
  "repository": "git+https://github.com/un-ts/deeplx.git",
@@ -9,7 +9,7 @@
9
9
  "funding": "https://opencollective.com/deeplx",
10
10
  "license": "MIT",
11
11
  "engines": {
12
- "node": "^12.20 || ^14.18.0 || >=16.0.0"
12
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
13
13
  },
14
14
  "main": "./lib/index.cjs",
15
15
  "types": "./index.d.cts",
@@ -20,10 +20,6 @@
20
20
  "types": "./lib/index.d.ts",
21
21
  "default": "./lib/index.js"
22
22
  },
23
- "module-sync": {
24
- "types": "./lib/index.d.ts",
25
- "default": "./lib/index.js"
26
- },
27
23
  "require": {
28
24
  "types": "./index.d.cts",
29
25
  "default": "./lib/index.cjs"
@@ -48,8 +44,7 @@
48
44
  "translator"
49
45
  ],
50
46
  "dependencies": {
51
- "node-fetch-native": "^1.6.6",
52
- "whatlang-node": "^0.1.0",
47
+ "node-fetch-native": "^1.6.7",
53
48
  "x-fetch": "^0.2.6"
54
49
  },
55
50
  "publishConfig": {