@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/lib/translate.js CHANGED
@@ -1,148 +1,174 @@
1
- import { detectLang } from 'whatlang-node';
2
- import { fetchApi } from 'x-fetch';
3
- import { API_URL, COMMON_HEADERS, HTTP_STATUS_NOT_FOUND, HTTP_STATUS_OK, HTTP_STATUS_SERVICE_UNAVAILABLE, } from "./constants.js";
4
- import { abbreviateLanguage, formatPostString, getICount, getRandomNumber, getTimeStamp, } from "./utils.js";
5
- const makeRequest = async (postData, _proxyUrl, dlSession) => {
6
- return fetchApi(API_URL, {
7
- method: 'POST',
8
- body: formatPostString(postData),
9
- headers: dlSession
10
- ? { ...COMMON_HEADERS, Cookie: `dl_session=${dlSession}` }
11
- : COMMON_HEADERS,
12
- });
13
- };
14
- const splitAndProcess = (text) => text.split('\n').map(line => (line.trim() === '' ? '\n' : line));
15
- export const translateByDeepLX = async (sourceLang, targetLang, text, formal, tagHandling = 'plaintext', proxyUrl, dlSession) => {
16
- if (!text) {
17
- return { code: HTTP_STATUS_NOT_FOUND, message: 'No text to translate' };
1
+ import { randomUUID } from 'node:crypto';
2
+ import { createProxy } from 'node-fetch-native/proxy';
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;
18
15
  }
19
- const textParts = splitAndProcess(text);
20
- const translatedParts = [];
21
- const allAlternatives = [];
22
- for (const part of textParts) {
23
- if (!part.trim()) {
24
- translatedParts.push('');
25
- allAlternatives.push(['']);
26
- continue;
27
- }
28
- if (!sourceLang || sourceLang === 'auto') {
29
- sourceLang = detectLang(part, true);
30
- }
31
- const sourceLangCode = abbreviateLanguage(sourceLang) ??
32
- sourceLang.toUpperCase();
33
- const jobs = [
34
- {
35
- kind: 'default',
36
- preferred_num_beams: 4,
37
- raw_en_context_before: [],
38
- raw_en_context_after: [],
39
- sentences: [{ prefix: '', text: part, id: 0 }],
40
- },
41
- ];
42
- let hasRegionalVariant = false;
43
- let targetLangCode = abbreviateLanguage(targetLang) ??
44
- targetLang.toUpperCase();
45
- const targetLangParts = targetLang.split('-');
46
- if (targetLangParts.length > 1) {
47
- targetLangCode = targetLangParts[0];
48
- hasRegionalVariant = true;
49
- }
50
- const id = getRandomNumber();
51
- const postData = {
52
- jsonrpc: '2.0',
53
- method: 'LMT_handle_jobs',
54
- id,
55
- params: {
56
- commonJobParams: {
57
- mode: 'translate',
58
- formality: formal == null ? 'undefined' : formal ? 'formal' : 'informal',
59
- transcribe_as: 'romanize',
60
- advancedMode: false,
61
- textType: tagHandling,
62
- wasSpoken: false,
63
- ...(hasRegionalVariant && { regionalVariant: targetLang }),
64
- },
65
- lang: {
66
- source_lang_user_selected: 'auto',
67
- target_lang: targetLangCode,
68
- source_lang_computed: sourceLangCode,
69
- },
70
- jobs,
71
- timestamp: getTimeStamp(getICount(part)),
72
- },
73
- };
74
- let translations;
16
+ warmupPromise = (async () => {
75
17
  try {
76
- const { result } = await makeRequest(postData, proxyUrl, dlSession);
77
- translations = result.translations;
78
- }
79
- catch (error) {
80
- return {
81
- code: HTTP_STATUS_SERVICE_UNAVAILABLE,
82
- message: String(error),
83
- };
84
- }
85
- let partTranslation = '';
86
- const partAlternatives = [];
87
- if (translations.length > 0) {
88
- for (const translation of translations) {
89
- partTranslation += translation.beams[0].sentences[0].text + ' ';
90
- }
91
- partTranslation = partTranslation.trim();
92
- const numBeams = translations[0].beams.length;
93
- for (let i = 1; i < numBeams; i++) {
94
- let altText = '';
95
- for (const translation of translations) {
96
- const beams = translation.beams;
97
- if (i < beams.length) {
98
- altText += beams[i].sentences[0].text + ' ';
99
- }
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]);
100
32
  }
101
- if (altText) {
102
- partAlternatives.push(altText.trim());
33
+ if (cookies.length > 0) {
34
+ sharedCookies = cookies.join('; ');
103
35
  }
104
36
  }
105
37
  }
106
- if (!partTranslation) {
107
- return {
108
- code: HTTP_STATUS_SERVICE_UNAVAILABLE,
109
- message: 'Translation failed',
110
- };
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' };
111
48
  }
112
- translatedParts.push(partTranslation);
113
- allAlternatives.push(partAlternatives);
49
+ return { success: true, value: undefined };
114
50
  }
115
- const translatedText = translatedParts.join('\n');
116
- const combinedAlternatives = [];
117
- let maxAlts = 0;
118
- for (const alts of allAlternatives) {
119
- if (alts.length > maxAlts) {
120
- 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()];
121
58
  }
122
59
  }
123
- for (let i = 0; i < maxAlts; i++) {
124
- const altParts = [];
125
- for (const [j, alts] of allAlternatives.entries()) {
126
- if (i < alts.length) {
127
- altParts.push(alts[i]);
128
- }
129
- else if (translatedParts[j].length === 0) {
130
- altParts.push('');
131
- }
132
- else {
133
- altParts.push(translatedParts[j]);
134
- }
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, ...' };
135
70
  }
136
- combinedAlternatives.push(altParts.join('\n'));
71
+ return { code: status, id: reqId, message: error.message };
137
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';
138
116
  return {
139
117
  code: HTTP_STATUS_OK,
140
- id: getRandomNumber(),
141
- data: translatedText,
142
- alternatives: combinedAlternatives,
143
- sourceLang: sourceLang,
118
+ id: reqId,
119
+ data: mainTranslation.text,
120
+ alternatives: [],
121
+ sourceLang: detectedLang,
144
122
  targetLang,
145
123
  method: dlSession ? 'Pro' : 'Free',
146
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
+ }
147
173
  };
148
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.2",
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,7 +44,7 @@
48
44
  "translator"
49
45
  ],
50
46
  "dependencies": {
51
- "whatlang-node": "^0.1.0",
47
+ "node-fetch-native": "^1.6.7",
52
48
  "x-fetch": "^0.2.6"
53
49
  },
54
50
  "publishConfig": {