@belocal/js-sdk 0.1.4 → 0.1.5
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/dist/index.cjs +9 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -2
package/dist/index.cjs
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var undici = require('undici');
|
|
4
|
+
|
|
3
5
|
// src/transports/browser.ts
|
|
4
6
|
function createBrowserTransport(config) {
|
|
5
7
|
return async ({ text, lang, ctx }) => {
|
|
@@ -39,8 +41,13 @@ function createBrowserTransport(config) {
|
|
|
39
41
|
}
|
|
40
42
|
};
|
|
41
43
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
+
undici.setGlobalDispatcher(
|
|
45
|
+
new undici.Agent({
|
|
46
|
+
connections: 200,
|
|
47
|
+
keepAliveTimeout: 1e4,
|
|
48
|
+
keepAliveMaxTimeout: 6e4
|
|
49
|
+
})
|
|
50
|
+
);
|
|
44
51
|
function createNodeTransport(config) {
|
|
45
52
|
return async ({ text, lang, ctx }) => {
|
|
46
53
|
const url = `${config.baseUrl}${config.path}`;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/transports/browser.ts","../src/transports/node.ts","../src/core/engine.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import type { Transport } from '../core/types';\n\nexport interface BrowserTransportConfig {\n baseUrl: string;\n path?: string;\n credentials?: RequestCredentials;\n headers?: Record<string, string>;\n timeoutMs?: number;\n debug?: boolean;\n}\n\nexport function createBrowserTransport(config: BrowserTransportConfig): Transport {\n return async ({ text, lang, ctx }) => {\n const url = `${config.baseUrl}${config.path}`;\n const controller = new AbortController();\n const timeoutId = config.timeoutMs ? setTimeout(() => controller.abort(), config.timeoutMs) : null;\n\n if (config.debug) {\n console.log(`[BeLocal Browser Transport] Translating \"${text}\" to ${lang} with url ${url}`);\n }\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n body: JSON.stringify({ text, lang, ctx }),\n credentials: config.credentials,\n signal: controller.signal,\n });\n\n if (!response.ok) {\n const errorMsg = `HTTP ${response.status}: ${response.statusText}`;\n if (config.debug) {\n console.error(`[BeLocal Browser Transport] Request failed:`, errorMsg);\n }\n throw new Error(errorMsg);\n }\n\n const result = await response.json();\n if (config.debug) {\n console.log(`[BeLocal Browser Transport] Translation successful: \"${result.text || text}\"`);\n }\n return result.text || text;\n } finally {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n }\n };\n}","import type { Transport } from '../core/types';\n\nexport interface NodeTransportConfig {\n baseUrl: string;\n path: string;\n headers?: Record<string, string>;\n timeoutMs?: number;\n agent?: unknown;\n retries?: number;\n debug?: boolean;\n}\n\nexport function createNodeTransport(config: NodeTransportConfig): Transport {\n return async ({ text, lang, ctx }) => {\n const url = `${config.baseUrl}${config.path}`;\n const maxRetries = config.retries || 0;\n let attempt = 0;\n\n if (config.debug) {\n console.log(`[BeLocal Node Transport] Translating \"${text}\" to ${lang} with url ${url}`);\n }\n\n while (attempt <= maxRetries) {\n try {\n const controller = new AbortController();\n const timeoutId = config.timeoutMs ? setTimeout(() => controller.abort(), config.timeoutMs) : null;\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n body: JSON.stringify({ text, lang, ctx }),\n signal: controller.signal,\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const result = await response.json();\n if (config.debug) {\n console.log(`[BeLocal Node Transport] Translation successful: \"${result.text || text}\"`);\n }\n return result.text || text;\n } finally {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n }\n } catch (error) {\n attempt++;\n if (config.debug) {\n console.error(`[BeLocal Node Transport] Attempt ${attempt} failed:`, error instanceof Error ? error.message : String(error));\n }\n if (attempt > maxRetries) {\n throw error;\n }\n // Exponential backoff\n await new Promise(resolve => setTimeout(resolve, Math.pow(2, attempt) * 1000));\n }\n }\n\n return text; // fallback\n };\n}","import type { BelocalEngineOptions, KV, Lang, Transport } from './types';\nimport { createBrowserTransport } from '../transports/browser';\nimport { createNodeTransport } from '../transports/node';\n\nexport class BelocalEngine {\n private transport: Transport;\n private debug: boolean;\n\n constructor(options: BelocalEngineOptions) {\n const {\n apiKey,\n baseUrl = 'https://dynamic.belocal.dev',\n transport = 'auto',\n timeoutMs = 10000,\n retries = 3,\n credentials,\n headers = {},\n agent,\n debug = false\n } = options;\n\n this.debug = debug;\n\n const authHeaders = {\n 'Authorization': `Bearer ${apiKey}`,\n ...headers\n };\n\n this.transport = this.createTransport(transport, {\n baseUrl,\n timeoutMs,\n retries,\n credentials,\n headers: authHeaders,\n agent,\n debug: this.debug\n });\n }\n\n async t(text: string, lang: Lang, ctx?: KV): Promise<string> {\n return this.transport({ text, lang, ctx });\n }\n\n private createTransport(\n transportType: 'browser' | 'node' | 'auto',\n config: {\n baseUrl: string;\n timeoutMs: number;\n retries: number;\n credentials?: RequestCredentials;\n headers: Record<string, string>;\n agent?: unknown;\n debug: boolean;\n }\n ): Transport {\n const actualTransport = transportType === 'auto' ? this.detectEnvironment() : transportType;\n const path = '/v1/translate';\n\n if (config.debug) {\n console.log(`[BeLocal Engine] Creating ${actualTransport} transport with config:`, {\n baseUrl: config.baseUrl,\n path,\n timeoutMs: config.timeoutMs,\n ...(actualTransport === 'browser' && { credentials: config.credentials }),\n ...(actualTransport === 'node' && { retries: config.retries, hasAgent: !!config.agent })\n });\n }\n\n if (actualTransport === 'browser') {\n return createBrowserTransport({\n baseUrl: config.baseUrl,\n path: path,\n credentials: config.credentials,\n headers: config.headers,\n timeoutMs: config.timeoutMs,\n debug: config.debug,\n });\n } else {\n return createNodeTransport({\n baseUrl: config.baseUrl,\n path: path,\n headers: config.headers,\n timeoutMs: config.timeoutMs,\n agent: config.agent,\n retries: config.retries,\n debug: config.debug,\n });\n }\n }\n\n /**\n * Автоматически определяет среду выполнения\n */\n private detectEnvironment(): 'browser' | 'node' {\n if (typeof window !== 'undefined' && typeof window.document !== 'undefined') {\n return 'browser';\n }\n \n if (typeof process !== 'undefined' && process.versions && process.versions.node) {\n return 'node';\n }\n\n return 'node';\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/transports/browser.ts","../src/transports/node.ts","../src/core/engine.ts"],"names":["setGlobalDispatcher","Agent"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { Transport } from '../core/types';\n\nexport interface BrowserTransportConfig {\n baseUrl: string;\n path?: string;\n credentials?: RequestCredentials;\n headers?: Record<string, string>;\n timeoutMs?: number;\n debug?: boolean;\n}\n\nexport function createBrowserTransport(config: BrowserTransportConfig): Transport {\n return async ({ text, lang, ctx }) => {\n const url = `${config.baseUrl}${config.path}`;\n const controller = new AbortController();\n const timeoutId = config.timeoutMs ? setTimeout(() => controller.abort(), config.timeoutMs) : null;\n\n if (config.debug) {\n console.log(`[BeLocal Browser Transport] Translating \"${text}\" to ${lang} with url ${url}`);\n }\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n body: JSON.stringify({ text, lang, ctx }),\n credentials: config.credentials,\n signal: controller.signal,\n });\n\n if (!response.ok) {\n const errorMsg = `HTTP ${response.status}: ${response.statusText}`;\n if (config.debug) {\n console.error(`[BeLocal Browser Transport] Request failed:`, errorMsg);\n }\n throw new Error(errorMsg);\n }\n\n const result = await response.json();\n if (config.debug) {\n console.log(`[BeLocal Browser Transport] Translation successful: \"${result.text || text}\"`);\n }\n return result.text || text;\n } finally {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n }\n };\n}","import { Agent, setGlobalDispatcher } from 'undici';\nimport type { Transport } from '../core/types';\n\nsetGlobalDispatcher(\n new Agent({\n connections: 200,\n keepAliveTimeout: 10_000,\n keepAliveMaxTimeout: 60_000,\n}));\n\nexport interface NodeTransportConfig {\n baseUrl: string;\n path: string;\n headers?: Record<string, string>;\n timeoutMs?: number;\n agent?: unknown;\n retries?: number;\n debug?: boolean;\n}\n\nexport function createNodeTransport(config: NodeTransportConfig): Transport {\n return async ({ text, lang, ctx }) => {\n const url = `${config.baseUrl}${config.path}`;\n const maxRetries = config.retries || 0;\n let attempt = 0;\n\n if (config.debug) {\n console.log(`[BeLocal Node Transport] Translating \"${text}\" to ${lang} with url ${url}`);\n }\n\n while (attempt <= maxRetries) {\n try {\n const controller = new AbortController();\n const timeoutId = config.timeoutMs ? setTimeout(() => controller.abort(), config.timeoutMs) : null;\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n body: JSON.stringify({ text, lang, ctx }),\n signal: controller.signal,\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const result = await response.json();\n if (config.debug) {\n console.log(`[BeLocal Node Transport] Translation successful: \"${result.text || text}\"`);\n }\n return result.text || text;\n } finally {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n }\n } catch (error) {\n attempt++;\n if (config.debug) {\n console.error(`[BeLocal Node Transport] Attempt ${attempt} failed:`, error instanceof Error ? error.message : String(error));\n }\n if (attempt > maxRetries) {\n throw error;\n }\n\n await new Promise(resolve => setTimeout(resolve, Math.pow(2, attempt) * 1000));\n }\n }\n\n return text;\n };\n}","import type { BelocalEngineOptions, KV, Lang, Transport } from './types';\nimport { createBrowserTransport } from '../transports/browser';\nimport { createNodeTransport } from '../transports/node';\n\nexport class BelocalEngine {\n private transport: Transport;\n private debug: boolean;\n\n constructor(options: BelocalEngineOptions) {\n const {\n apiKey,\n baseUrl = 'https://dynamic.belocal.dev',\n transport = 'auto',\n timeoutMs = 10000,\n retries = 3,\n credentials,\n headers = {},\n agent,\n debug = false\n } = options;\n\n this.debug = debug;\n\n const authHeaders = {\n 'Authorization': `Bearer ${apiKey}`,\n ...headers\n };\n\n this.transport = this.createTransport(transport, {\n baseUrl,\n timeoutMs,\n retries,\n credentials,\n headers: authHeaders,\n agent,\n debug: this.debug\n });\n }\n\n async t(text: string, lang: Lang, ctx?: KV): Promise<string> {\n return this.transport({ text, lang, ctx });\n }\n\n private createTransport(\n transportType: 'browser' | 'node' | 'auto',\n config: {\n baseUrl: string;\n timeoutMs: number;\n retries: number;\n credentials?: RequestCredentials;\n headers: Record<string, string>;\n agent?: unknown;\n debug: boolean;\n }\n ): Transport {\n const actualTransport = transportType === 'auto' ? this.detectEnvironment() : transportType;\n const path = '/v1/translate';\n\n if (config.debug) {\n console.log(`[BeLocal Engine] Creating ${actualTransport} transport with config:`, {\n baseUrl: config.baseUrl,\n path,\n timeoutMs: config.timeoutMs,\n ...(actualTransport === 'browser' && { credentials: config.credentials }),\n ...(actualTransport === 'node' && { retries: config.retries, hasAgent: !!config.agent })\n });\n }\n\n if (actualTransport === 'browser') {\n return createBrowserTransport({\n baseUrl: config.baseUrl,\n path: path,\n credentials: config.credentials,\n headers: config.headers,\n timeoutMs: config.timeoutMs,\n debug: config.debug,\n });\n } else {\n return createNodeTransport({\n baseUrl: config.baseUrl,\n path: path,\n headers: config.headers,\n timeoutMs: config.timeoutMs,\n agent: config.agent,\n retries: config.retries,\n debug: config.debug,\n });\n }\n }\n\n /**\n * Автоматически определяет среду выполнения\n */\n private detectEnvironment(): 'browser' | 'node' {\n if (typeof window !== 'undefined' && typeof window.document !== 'undefined') {\n return 'browser';\n }\n \n if (typeof process !== 'undefined' && process.versions && process.versions.node) {\n return 'node';\n }\n\n return 'node';\n }\n}\n"]}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { setGlobalDispatcher, Agent } from 'undici';
|
|
2
|
+
|
|
1
3
|
// src/transports/browser.ts
|
|
2
4
|
function createBrowserTransport(config) {
|
|
3
5
|
return async ({ text, lang, ctx }) => {
|
|
@@ -37,8 +39,13 @@ function createBrowserTransport(config) {
|
|
|
37
39
|
}
|
|
38
40
|
};
|
|
39
41
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
+
setGlobalDispatcher(
|
|
43
|
+
new Agent({
|
|
44
|
+
connections: 200,
|
|
45
|
+
keepAliveTimeout: 1e4,
|
|
46
|
+
keepAliveMaxTimeout: 6e4
|
|
47
|
+
})
|
|
48
|
+
);
|
|
42
49
|
function createNodeTransport(config) {
|
|
43
50
|
return async ({ text, lang, ctx }) => {
|
|
44
51
|
const url = `${config.baseUrl}${config.path}`;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/transports/browser.ts","../src/transports/node.ts","../src/core/engine.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { Transport } from '../core/types';\n\nexport interface BrowserTransportConfig {\n baseUrl: string;\n path?: string;\n credentials?: RequestCredentials;\n headers?: Record<string, string>;\n timeoutMs?: number;\n debug?: boolean;\n}\n\nexport function createBrowserTransport(config: BrowserTransportConfig): Transport {\n return async ({ text, lang, ctx }) => {\n const url = `${config.baseUrl}${config.path}`;\n const controller = new AbortController();\n const timeoutId = config.timeoutMs ? setTimeout(() => controller.abort(), config.timeoutMs) : null;\n\n if (config.debug) {\n console.log(`[BeLocal Browser Transport] Translating \"${text}\" to ${lang} with url ${url}`);\n }\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n body: JSON.stringify({ text, lang, ctx }),\n credentials: config.credentials,\n signal: controller.signal,\n });\n\n if (!response.ok) {\n const errorMsg = `HTTP ${response.status}: ${response.statusText}`;\n if (config.debug) {\n console.error(`[BeLocal Browser Transport] Request failed:`, errorMsg);\n }\n throw new Error(errorMsg);\n }\n\n const result = await response.json();\n if (config.debug) {\n console.log(`[BeLocal Browser Transport] Translation successful: \"${result.text || text}\"`);\n }\n return result.text || text;\n } finally {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n }\n };\n}","import type { Transport } from '../core/types';\n\nexport interface NodeTransportConfig {\n baseUrl: string;\n path: string;\n headers?: Record<string, string>;\n timeoutMs?: number;\n agent?: unknown;\n retries?: number;\n debug?: boolean;\n}\n\nexport function createNodeTransport(config: NodeTransportConfig): Transport {\n return async ({ text, lang, ctx }) => {\n const url = `${config.baseUrl}${config.path}`;\n const maxRetries = config.retries || 0;\n let attempt = 0;\n\n if (config.debug) {\n console.log(`[BeLocal Node Transport] Translating \"${text}\" to ${lang} with url ${url}`);\n }\n\n while (attempt <= maxRetries) {\n try {\n const controller = new AbortController();\n const timeoutId = config.timeoutMs ? setTimeout(() => controller.abort(), config.timeoutMs) : null;\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n body: JSON.stringify({ text, lang, ctx }),\n signal: controller.signal,\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const result = await response.json();\n if (config.debug) {\n console.log(`[BeLocal Node Transport] Translation successful: \"${result.text || text}\"`);\n }\n return result.text || text;\n } finally {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n }\n } catch (error) {\n attempt++;\n if (config.debug) {\n console.error(`[BeLocal Node Transport] Attempt ${attempt} failed:`, error instanceof Error ? error.message : String(error));\n }\n if (attempt > maxRetries) {\n throw error;\n }\n // Exponential backoff\n await new Promise(resolve => setTimeout(resolve, Math.pow(2, attempt) * 1000));\n }\n }\n\n return text; // fallback\n };\n}","import type { BelocalEngineOptions, KV, Lang, Transport } from './types';\nimport { createBrowserTransport } from '../transports/browser';\nimport { createNodeTransport } from '../transports/node';\n\nexport class BelocalEngine {\n private transport: Transport;\n private debug: boolean;\n\n constructor(options: BelocalEngineOptions) {\n const {\n apiKey,\n baseUrl = 'https://dynamic.belocal.dev',\n transport = 'auto',\n timeoutMs = 10000,\n retries = 3,\n credentials,\n headers = {},\n agent,\n debug = false\n } = options;\n\n this.debug = debug;\n\n const authHeaders = {\n 'Authorization': `Bearer ${apiKey}`,\n ...headers\n };\n\n this.transport = this.createTransport(transport, {\n baseUrl,\n timeoutMs,\n retries,\n credentials,\n headers: authHeaders,\n agent,\n debug: this.debug\n });\n }\n\n async t(text: string, lang: Lang, ctx?: KV): Promise<string> {\n return this.transport({ text, lang, ctx });\n }\n\n private createTransport(\n transportType: 'browser' | 'node' | 'auto',\n config: {\n baseUrl: string;\n timeoutMs: number;\n retries: number;\n credentials?: RequestCredentials;\n headers: Record<string, string>;\n agent?: unknown;\n debug: boolean;\n }\n ): Transport {\n const actualTransport = transportType === 'auto' ? this.detectEnvironment() : transportType;\n const path = '/v1/translate';\n\n if (config.debug) {\n console.log(`[BeLocal Engine] Creating ${actualTransport} transport with config:`, {\n baseUrl: config.baseUrl,\n path,\n timeoutMs: config.timeoutMs,\n ...(actualTransport === 'browser' && { credentials: config.credentials }),\n ...(actualTransport === 'node' && { retries: config.retries, hasAgent: !!config.agent })\n });\n }\n\n if (actualTransport === 'browser') {\n return createBrowserTransport({\n baseUrl: config.baseUrl,\n path: path,\n credentials: config.credentials,\n headers: config.headers,\n timeoutMs: config.timeoutMs,\n debug: config.debug,\n });\n } else {\n return createNodeTransport({\n baseUrl: config.baseUrl,\n path: path,\n headers: config.headers,\n timeoutMs: config.timeoutMs,\n agent: config.agent,\n retries: config.retries,\n debug: config.debug,\n });\n }\n }\n\n /**\n * Автоматически определяет среду выполнения\n */\n private detectEnvironment(): 'browser' | 'node' {\n if (typeof window !== 'undefined' && typeof window.document !== 'undefined') {\n return 'browser';\n }\n \n if (typeof process !== 'undefined' && process.versions && process.versions.node) {\n return 'node';\n }\n\n return 'node';\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/transports/browser.ts","../src/transports/node.ts","../src/core/engine.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { Transport } from '../core/types';\n\nexport interface BrowserTransportConfig {\n baseUrl: string;\n path?: string;\n credentials?: RequestCredentials;\n headers?: Record<string, string>;\n timeoutMs?: number;\n debug?: boolean;\n}\n\nexport function createBrowserTransport(config: BrowserTransportConfig): Transport {\n return async ({ text, lang, ctx }) => {\n const url = `${config.baseUrl}${config.path}`;\n const controller = new AbortController();\n const timeoutId = config.timeoutMs ? setTimeout(() => controller.abort(), config.timeoutMs) : null;\n\n if (config.debug) {\n console.log(`[BeLocal Browser Transport] Translating \"${text}\" to ${lang} with url ${url}`);\n }\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n body: JSON.stringify({ text, lang, ctx }),\n credentials: config.credentials,\n signal: controller.signal,\n });\n\n if (!response.ok) {\n const errorMsg = `HTTP ${response.status}: ${response.statusText}`;\n if (config.debug) {\n console.error(`[BeLocal Browser Transport] Request failed:`, errorMsg);\n }\n throw new Error(errorMsg);\n }\n\n const result = await response.json();\n if (config.debug) {\n console.log(`[BeLocal Browser Transport] Translation successful: \"${result.text || text}\"`);\n }\n return result.text || text;\n } finally {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n }\n };\n}","import { Agent, setGlobalDispatcher } from 'undici';\nimport type { Transport } from '../core/types';\n\nsetGlobalDispatcher(\n new Agent({\n connections: 200,\n keepAliveTimeout: 10_000,\n keepAliveMaxTimeout: 60_000,\n}));\n\nexport interface NodeTransportConfig {\n baseUrl: string;\n path: string;\n headers?: Record<string, string>;\n timeoutMs?: number;\n agent?: unknown;\n retries?: number;\n debug?: boolean;\n}\n\nexport function createNodeTransport(config: NodeTransportConfig): Transport {\n return async ({ text, lang, ctx }) => {\n const url = `${config.baseUrl}${config.path}`;\n const maxRetries = config.retries || 0;\n let attempt = 0;\n\n if (config.debug) {\n console.log(`[BeLocal Node Transport] Translating \"${text}\" to ${lang} with url ${url}`);\n }\n\n while (attempt <= maxRetries) {\n try {\n const controller = new AbortController();\n const timeoutId = config.timeoutMs ? setTimeout(() => controller.abort(), config.timeoutMs) : null;\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n body: JSON.stringify({ text, lang, ctx }),\n signal: controller.signal,\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const result = await response.json();\n if (config.debug) {\n console.log(`[BeLocal Node Transport] Translation successful: \"${result.text || text}\"`);\n }\n return result.text || text;\n } finally {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n }\n } catch (error) {\n attempt++;\n if (config.debug) {\n console.error(`[BeLocal Node Transport] Attempt ${attempt} failed:`, error instanceof Error ? error.message : String(error));\n }\n if (attempt > maxRetries) {\n throw error;\n }\n\n await new Promise(resolve => setTimeout(resolve, Math.pow(2, attempt) * 1000));\n }\n }\n\n return text;\n };\n}","import type { BelocalEngineOptions, KV, Lang, Transport } from './types';\nimport { createBrowserTransport } from '../transports/browser';\nimport { createNodeTransport } from '../transports/node';\n\nexport class BelocalEngine {\n private transport: Transport;\n private debug: boolean;\n\n constructor(options: BelocalEngineOptions) {\n const {\n apiKey,\n baseUrl = 'https://dynamic.belocal.dev',\n transport = 'auto',\n timeoutMs = 10000,\n retries = 3,\n credentials,\n headers = {},\n agent,\n debug = false\n } = options;\n\n this.debug = debug;\n\n const authHeaders = {\n 'Authorization': `Bearer ${apiKey}`,\n ...headers\n };\n\n this.transport = this.createTransport(transport, {\n baseUrl,\n timeoutMs,\n retries,\n credentials,\n headers: authHeaders,\n agent,\n debug: this.debug\n });\n }\n\n async t(text: string, lang: Lang, ctx?: KV): Promise<string> {\n return this.transport({ text, lang, ctx });\n }\n\n private createTransport(\n transportType: 'browser' | 'node' | 'auto',\n config: {\n baseUrl: string;\n timeoutMs: number;\n retries: number;\n credentials?: RequestCredentials;\n headers: Record<string, string>;\n agent?: unknown;\n debug: boolean;\n }\n ): Transport {\n const actualTransport = transportType === 'auto' ? this.detectEnvironment() : transportType;\n const path = '/v1/translate';\n\n if (config.debug) {\n console.log(`[BeLocal Engine] Creating ${actualTransport} transport with config:`, {\n baseUrl: config.baseUrl,\n path,\n timeoutMs: config.timeoutMs,\n ...(actualTransport === 'browser' && { credentials: config.credentials }),\n ...(actualTransport === 'node' && { retries: config.retries, hasAgent: !!config.agent })\n });\n }\n\n if (actualTransport === 'browser') {\n return createBrowserTransport({\n baseUrl: config.baseUrl,\n path: path,\n credentials: config.credentials,\n headers: config.headers,\n timeoutMs: config.timeoutMs,\n debug: config.debug,\n });\n } else {\n return createNodeTransport({\n baseUrl: config.baseUrl,\n path: path,\n headers: config.headers,\n timeoutMs: config.timeoutMs,\n agent: config.agent,\n retries: config.retries,\n debug: config.debug,\n });\n }\n }\n\n /**\n * Автоматически определяет среду выполнения\n */\n private detectEnvironment(): 'browser' | 'node' {\n if (typeof window !== 'undefined' && typeof window.document !== 'undefined') {\n return 'browser';\n }\n \n if (typeof process !== 'undefined' && process.versions && process.versions.node) {\n return 'node';\n }\n\n return 'node';\n }\n}\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
function c(r){return async({text:t,lang:e,ctx:o})=>{let n=`${r.baseUrl}${r.path}`,u=new AbortController,a=r.timeoutMs?setTimeout(()=>u.abort(),r.timeoutMs):null;r.debug&&console.log(`[BeLocal Browser Transport] Translating "${t}" to ${e} with url ${n}`);try{let s=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json",...r.headers},body:JSON.stringify({text:t,lang:e,ctx:o}),credentials:r.credentials,signal:u.signal});if(!s.ok){let l=`HTTP ${s.status}: ${s.statusText}`;throw r.debug&&console.error("[BeLocal Browser Transport] Request failed:",l),new Error(l)}let i=await s.json();return r.debug&&console.log(`[BeLocal Browser Transport] Translation successful: "${i.text||t}"`),i.text||t}finally{a&&clearTimeout(a);}}}function
|
|
1
|
+
import {setGlobalDispatcher,Agent}from'undici';function c(r){return async({text:t,lang:e,ctx:o})=>{let n=`${r.baseUrl}${r.path}`,u=new AbortController,a=r.timeoutMs?setTimeout(()=>u.abort(),r.timeoutMs):null;r.debug&&console.log(`[BeLocal Browser Transport] Translating "${t}" to ${e} with url ${n}`);try{let s=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json",...r.headers},body:JSON.stringify({text:t,lang:e,ctx:o}),credentials:r.credentials,signal:u.signal});if(!s.ok){let l=`HTTP ${s.status}: ${s.statusText}`;throw r.debug&&console.error("[BeLocal Browser Transport] Request failed:",l),new Error(l)}let i=await s.json();return r.debug&&console.log(`[BeLocal Browser Transport] Translation successful: "${i.text||t}"`),i.text||t}finally{a&&clearTimeout(a);}}}setGlobalDispatcher(new Agent({connections:200,keepAliveTimeout:1e4,keepAliveMaxTimeout:6e4}));function m(r){return async({text:t,lang:e,ctx:o})=>{let n=`${r.baseUrl}${r.path}`,u=r.retries||0,a=0;for(r.debug&&console.log(`[BeLocal Node Transport] Translating "${t}" to ${e} with url ${n}`);a<=u;)try{let s=new AbortController,i=r.timeoutMs?setTimeout(()=>s.abort(),r.timeoutMs):null;try{let l=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json",...r.headers},body:JSON.stringify({text:t,lang:e,ctx:o}),signal:s.signal});if(!l.ok)throw new Error(`HTTP ${l.status}: ${l.statusText}`);let p=await l.json();return r.debug&&console.log(`[BeLocal Node Transport] Translation successful: "${p.text||t}"`),p.text||t}finally{i&&clearTimeout(i);}}catch(s){if(a++,r.debug&&console.error(`[BeLocal Node Transport] Attempt ${a} failed:`,s instanceof Error?s.message:String(s)),a>u)throw s;await new Promise(i=>setTimeout(i,Math.pow(2,a)*1e3));}return t}}var d=class{constructor(t){let{apiKey:e,baseUrl:o="https://dynamic.belocal.dev",transport:n="auto",timeoutMs:u=1e4,retries:a=3,credentials:s,headers:i={},agent:l,debug:p=false}=t;this.debug=p;let b={Authorization:`Bearer ${e}`,...i};this.transport=this.createTransport(n,{baseUrl:o,timeoutMs:u,retries:a,credentials:s,headers:b,agent:l,debug:this.debug});}async t(t,e,o){return this.transport({text:t,lang:e,ctx:o})}createTransport(t,e){let o=t==="auto"?this.detectEnvironment():t,n="/v1/translate";return e.debug&&console.log(`[BeLocal Engine] Creating ${o} transport with config:`,{baseUrl:e.baseUrl,path:n,timeoutMs:e.timeoutMs,...o==="browser"&&{credentials:e.credentials},...o==="node"&&{retries:e.retries,hasAgent:!!e.agent}}),o==="browser"?c({baseUrl:e.baseUrl,path:n,credentials:e.credentials,headers:e.headers,timeoutMs:e.timeoutMs,debug:e.debug}):m({baseUrl:e.baseUrl,path:n,headers:e.headers,timeoutMs:e.timeoutMs,agent:e.agent,retries:e.retries,debug:e.debug})}detectEnvironment(){return typeof window<"u"&&typeof window.document<"u"?"browser":(typeof process<"u"&&process.versions&&process.versions.node,"node")}};
|
|
2
2
|
export{d as BelocalEngine};//# sourceMappingURL=index.mjs.map
|
|
3
3
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/transports/browser.ts","../src/transports/node.ts","../src/core/engine.ts"],"names":["createBrowserTransport","config","text","lang","ctx","url","controller","timeoutId","response","errorMsg","result","createNodeTransport","maxRetries","attempt","error","resolve","BelocalEngine","options","apiKey","baseUrl","transport","timeoutMs","retries","credentials","headers","agent","debug","authHeaders","transportType","actualTransport","path"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { Transport } from '../core/types';\n\nexport interface BrowserTransportConfig {\n baseUrl: string;\n path?: string;\n credentials?: RequestCredentials;\n headers?: Record<string, string>;\n timeoutMs?: number;\n debug?: boolean;\n}\n\nexport function createBrowserTransport(config: BrowserTransportConfig): Transport {\n return async ({ text, lang, ctx }) => {\n const url = `${config.baseUrl}${config.path}`;\n const controller = new AbortController();\n const timeoutId = config.timeoutMs ? setTimeout(() => controller.abort(), config.timeoutMs) : null;\n\n if (config.debug) {\n console.log(`[BeLocal Browser Transport] Translating \"${text}\" to ${lang} with url ${url}`);\n }\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n body: JSON.stringify({ text, lang, ctx }),\n credentials: config.credentials,\n signal: controller.signal,\n });\n\n if (!response.ok) {\n const errorMsg = `HTTP ${response.status}: ${response.statusText}`;\n if (config.debug) {\n console.error(`[BeLocal Browser Transport] Request failed:`, errorMsg);\n }\n throw new Error(errorMsg);\n }\n\n const result = await response.json();\n if (config.debug) {\n console.log(`[BeLocal Browser Transport] Translation successful: \"${result.text || text}\"`);\n }\n return result.text || text;\n } finally {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n }\n };\n}","import type { Transport } from '../core/types';\n\nexport interface NodeTransportConfig {\n baseUrl: string;\n path: string;\n headers?: Record<string, string>;\n timeoutMs?: number;\n agent?: unknown;\n retries?: number;\n debug?: boolean;\n}\n\nexport function createNodeTransport(config: NodeTransportConfig): Transport {\n return async ({ text, lang, ctx }) => {\n const url = `${config.baseUrl}${config.path}`;\n const maxRetries = config.retries || 0;\n let attempt = 0;\n\n if (config.debug) {\n console.log(`[BeLocal Node Transport] Translating \"${text}\" to ${lang} with url ${url}`);\n }\n\n while (attempt <= maxRetries) {\n try {\n const controller = new AbortController();\n const timeoutId = config.timeoutMs ? setTimeout(() => controller.abort(), config.timeoutMs) : null;\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n body: JSON.stringify({ text, lang, ctx }),\n signal: controller.signal,\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const result = await response.json();\n if (config.debug) {\n console.log(`[BeLocal Node Transport] Translation successful: \"${result.text || text}\"`);\n }\n return result.text || text;\n } finally {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n }\n } catch (error) {\n attempt++;\n if (config.debug) {\n console.error(`[BeLocal Node Transport] Attempt ${attempt} failed:`, error instanceof Error ? error.message : String(error));\n }\n if (attempt > maxRetries) {\n throw error;\n }\n // Exponential backoff\n await new Promise(resolve => setTimeout(resolve, Math.pow(2, attempt) * 1000));\n }\n }\n\n return text; // fallback\n };\n}","import type { BelocalEngineOptions, KV, Lang, Transport } from './types';\nimport { createBrowserTransport } from '../transports/browser';\nimport { createNodeTransport } from '../transports/node';\n\nexport class BelocalEngine {\n private transport: Transport;\n private debug: boolean;\n\n constructor(options: BelocalEngineOptions) {\n const {\n apiKey,\n baseUrl = 'https://dynamic.belocal.dev',\n transport = 'auto',\n timeoutMs = 10000,\n retries = 3,\n credentials,\n headers = {},\n agent,\n debug = false\n } = options;\n\n this.debug = debug;\n\n const authHeaders = {\n 'Authorization': `Bearer ${apiKey}`,\n ...headers\n };\n\n this.transport = this.createTransport(transport, {\n baseUrl,\n timeoutMs,\n retries,\n credentials,\n headers: authHeaders,\n agent,\n debug: this.debug\n });\n }\n\n async t(text: string, lang: Lang, ctx?: KV): Promise<string> {\n return this.transport({ text, lang, ctx });\n }\n\n private createTransport(\n transportType: 'browser' | 'node' | 'auto',\n config: {\n baseUrl: string;\n timeoutMs: number;\n retries: number;\n credentials?: RequestCredentials;\n headers: Record<string, string>;\n agent?: unknown;\n debug: boolean;\n }\n ): Transport {\n const actualTransport = transportType === 'auto' ? this.detectEnvironment() : transportType;\n const path = '/v1/translate';\n\n if (config.debug) {\n console.log(`[BeLocal Engine] Creating ${actualTransport} transport with config:`, {\n baseUrl: config.baseUrl,\n path,\n timeoutMs: config.timeoutMs,\n ...(actualTransport === 'browser' && { credentials: config.credentials }),\n ...(actualTransport === 'node' && { retries: config.retries, hasAgent: !!config.agent })\n });\n }\n\n if (actualTransport === 'browser') {\n return createBrowserTransport({\n baseUrl: config.baseUrl,\n path: path,\n credentials: config.credentials,\n headers: config.headers,\n timeoutMs: config.timeoutMs,\n debug: config.debug,\n });\n } else {\n return createNodeTransport({\n baseUrl: config.baseUrl,\n path: path,\n headers: config.headers,\n timeoutMs: config.timeoutMs,\n agent: config.agent,\n retries: config.retries,\n debug: config.debug,\n });\n }\n }\n\n /**\n * Автоматически определяет среду выполнения\n */\n private detectEnvironment(): 'browser' | 'node' {\n if (typeof window !== 'undefined' && typeof window.document !== 'undefined') {\n return 'browser';\n }\n \n if (typeof process !== 'undefined' && process.versions && process.versions.node) {\n return 'node';\n }\n\n return 'node';\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/transports/browser.ts","../src/transports/node.ts","../src/core/engine.ts"],"names":["createBrowserTransport","config","text","lang","ctx","url","controller","timeoutId","response","errorMsg","result","setGlobalDispatcher","Agent","createNodeTransport","maxRetries","attempt","error","resolve","BelocalEngine","options","apiKey","baseUrl","transport","timeoutMs","retries","credentials","headers","agent","debug","authHeaders","transportType","actualTransport","path"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { Transport } from '../core/types';\n\nexport interface BrowserTransportConfig {\n baseUrl: string;\n path?: string;\n credentials?: RequestCredentials;\n headers?: Record<string, string>;\n timeoutMs?: number;\n debug?: boolean;\n}\n\nexport function createBrowserTransport(config: BrowserTransportConfig): Transport {\n return async ({ text, lang, ctx }) => {\n const url = `${config.baseUrl}${config.path}`;\n const controller = new AbortController();\n const timeoutId = config.timeoutMs ? setTimeout(() => controller.abort(), config.timeoutMs) : null;\n\n if (config.debug) {\n console.log(`[BeLocal Browser Transport] Translating \"${text}\" to ${lang} with url ${url}`);\n }\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n body: JSON.stringify({ text, lang, ctx }),\n credentials: config.credentials,\n signal: controller.signal,\n });\n\n if (!response.ok) {\n const errorMsg = `HTTP ${response.status}: ${response.statusText}`;\n if (config.debug) {\n console.error(`[BeLocal Browser Transport] Request failed:`, errorMsg);\n }\n throw new Error(errorMsg);\n }\n\n const result = await response.json();\n if (config.debug) {\n console.log(`[BeLocal Browser Transport] Translation successful: \"${result.text || text}\"`);\n }\n return result.text || text;\n } finally {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n }\n };\n}","import { Agent, setGlobalDispatcher } from 'undici';\nimport type { Transport } from '../core/types';\n\nsetGlobalDispatcher(\n new Agent({\n connections: 200,\n keepAliveTimeout: 10_000,\n keepAliveMaxTimeout: 60_000,\n}));\n\nexport interface NodeTransportConfig {\n baseUrl: string;\n path: string;\n headers?: Record<string, string>;\n timeoutMs?: number;\n agent?: unknown;\n retries?: number;\n debug?: boolean;\n}\n\nexport function createNodeTransport(config: NodeTransportConfig): Transport {\n return async ({ text, lang, ctx }) => {\n const url = `${config.baseUrl}${config.path}`;\n const maxRetries = config.retries || 0;\n let attempt = 0;\n\n if (config.debug) {\n console.log(`[BeLocal Node Transport] Translating \"${text}\" to ${lang} with url ${url}`);\n }\n\n while (attempt <= maxRetries) {\n try {\n const controller = new AbortController();\n const timeoutId = config.timeoutMs ? setTimeout(() => controller.abort(), config.timeoutMs) : null;\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n body: JSON.stringify({ text, lang, ctx }),\n signal: controller.signal,\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const result = await response.json();\n if (config.debug) {\n console.log(`[BeLocal Node Transport] Translation successful: \"${result.text || text}\"`);\n }\n return result.text || text;\n } finally {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n }\n } catch (error) {\n attempt++;\n if (config.debug) {\n console.error(`[BeLocal Node Transport] Attempt ${attempt} failed:`, error instanceof Error ? error.message : String(error));\n }\n if (attempt > maxRetries) {\n throw error;\n }\n\n await new Promise(resolve => setTimeout(resolve, Math.pow(2, attempt) * 1000));\n }\n }\n\n return text;\n };\n}","import type { BelocalEngineOptions, KV, Lang, Transport } from './types';\nimport { createBrowserTransport } from '../transports/browser';\nimport { createNodeTransport } from '../transports/node';\n\nexport class BelocalEngine {\n private transport: Transport;\n private debug: boolean;\n\n constructor(options: BelocalEngineOptions) {\n const {\n apiKey,\n baseUrl = 'https://dynamic.belocal.dev',\n transport = 'auto',\n timeoutMs = 10000,\n retries = 3,\n credentials,\n headers = {},\n agent,\n debug = false\n } = options;\n\n this.debug = debug;\n\n const authHeaders = {\n 'Authorization': `Bearer ${apiKey}`,\n ...headers\n };\n\n this.transport = this.createTransport(transport, {\n baseUrl,\n timeoutMs,\n retries,\n credentials,\n headers: authHeaders,\n agent,\n debug: this.debug\n });\n }\n\n async t(text: string, lang: Lang, ctx?: KV): Promise<string> {\n return this.transport({ text, lang, ctx });\n }\n\n private createTransport(\n transportType: 'browser' | 'node' | 'auto',\n config: {\n baseUrl: string;\n timeoutMs: number;\n retries: number;\n credentials?: RequestCredentials;\n headers: Record<string, string>;\n agent?: unknown;\n debug: boolean;\n }\n ): Transport {\n const actualTransport = transportType === 'auto' ? this.detectEnvironment() : transportType;\n const path = '/v1/translate';\n\n if (config.debug) {\n console.log(`[BeLocal Engine] Creating ${actualTransport} transport with config:`, {\n baseUrl: config.baseUrl,\n path,\n timeoutMs: config.timeoutMs,\n ...(actualTransport === 'browser' && { credentials: config.credentials }),\n ...(actualTransport === 'node' && { retries: config.retries, hasAgent: !!config.agent })\n });\n }\n\n if (actualTransport === 'browser') {\n return createBrowserTransport({\n baseUrl: config.baseUrl,\n path: path,\n credentials: config.credentials,\n headers: config.headers,\n timeoutMs: config.timeoutMs,\n debug: config.debug,\n });\n } else {\n return createNodeTransport({\n baseUrl: config.baseUrl,\n path: path,\n headers: config.headers,\n timeoutMs: config.timeoutMs,\n agent: config.agent,\n retries: config.retries,\n debug: config.debug,\n });\n }\n }\n\n /**\n * Автоматически определяет среду выполнения\n */\n private detectEnvironment(): 'browser' | 'node' {\n if (typeof window !== 'undefined' && typeof window.document !== 'undefined') {\n return 'browser';\n }\n \n if (typeof process !== 'undefined' && process.versions && process.versions.node) {\n return 'node';\n }\n\n return 'node';\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@belocal/js-sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"description": "BeLocal runtime JS SDK for on-demand translation (browser + node)",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
@@ -44,5 +44,8 @@
|
|
|
44
44
|
"dist",
|
|
45
45
|
"README.md",
|
|
46
46
|
"LICENSE"
|
|
47
|
-
]
|
|
47
|
+
],
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"undici": "^7.16.0"
|
|
50
|
+
}
|
|
48
51
|
}
|