@translated/lara 2.0.0-beta.1 → 2.0.0-beta.10
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/index.d.mts +240 -0
- package/lib/index.d.ts +240 -2
- package/lib/index.js +3 -2
- package/lib/index.js.map +1 -0
- package/lib/index.mjs +3 -0
- package/lib/index.mjs.map +1 -0
- package/package.json +10 -5
- package/lib/Documents.d.ts +0 -12
- package/lib/Documents.js +0 -71
- package/lib/Glossaries.d.ts +0 -17
- package/lib/Glossaries.js +0 -68
- package/lib/Memories.d.ts +0 -18
- package/lib/Memories.js +0 -95
- package/lib/Translator.d.ts +0 -24
- package/lib/Translator.js +0 -151
- package/lib/models/Authentication.d.ts +0 -12
- package/lib/models/Authentication.js +0 -1
- package/lib/models/UploadableFile.d.ts +0 -1
- package/lib/models/UploadableFile.js +0 -1
- package/lib/models/documents.d.ts +0 -51
- package/lib/models/documents.js +0 -10
- package/lib/models/glossaries.d.ts +0 -19
- package/lib/models/glossaries.js +0 -1
- package/lib/models/index.d.ts +0 -6
- package/lib/models/index.js +0 -6
- package/lib/models/memories.d.ts +0 -19
- package/lib/models/memories.js +0 -1
- package/lib/models/translator.d.ts +0 -48
- package/lib/models/translator.js +0 -1
- package/lib/sdk-version.d.ts +0 -1
- package/lib/sdk-version.js +0 -1
- package/lib/utils/errors.d.ts +0 -10
- package/lib/utils/errors.js +0 -12
- package/lib/utils/formdata/browser.d.ts +0 -2
- package/lib/utils/formdata/browser.js +0 -15
- package/lib/utils/formdata/index.d.ts +0 -4
- package/lib/utils/formdata/index.js +0 -10
- package/lib/utils/formdata/node.d.ts +0 -5
- package/lib/utils/formdata/node.js +0 -16
- package/lib/utils/sleep.d.ts +0 -2
- package/lib/utils/sleep.js +0 -1
- package/lib/utils/toCamelCase.d.ts +0 -2
- package/lib/utils/toCamelCase.js +0 -16
- package/lib/utils/toSnakeCase.d.ts +0 -2
- package/lib/utils/toSnakeCase.js +0 -16
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Translator.ts","../src/utils/errors.ts","../src/utils/formdata/browser.ts","../src/utils/formdata/node.ts","../src/utils/formdata/index.ts","../src/utils/sleep.ts","../src/Memories.ts","../src/sdk-version.ts","../src/utils/toQueryString.ts","../src/utils/isNode.ts","../src/Glossaries.ts","../src/Documents.ts","../src/models/documents.ts","../src/utils/toSnakeCase.ts","../src/utils/downloadFromS3/browser.ts","../src/utils/downloadFromS3/node.ts","../src/utils/downloadFromS3/index.ts","../src/utils/toCamelCase.ts"],"sourcesContent":["import axios, { AxiosInstance } from 'axios';\nimport {\n AccessKey,\n Credentials,\n AuthToken,\n TranslatorOptions,\n TextBlock,\n TranslateOptions,\n TextResult,\n AuthenticationResponse,\n} from './models';\nimport Memories from './Memories';\nimport { version } from './sdk-version';\nimport Glossaries from './Glossaries';\nimport Documents from './Documents';\nimport toCamelCase from './utils/toCamelCase';\nimport { LaraApiError } from './utils/errors';\n\nconst DEFAULT_BASE_URL = 'https://api.laratranslate.com';\n\nexport class Translator {\n private readonly accessKey?: AccessKey;\n private readonly credentials?: Credentials;\n private authToken?: AuthToken;\n\n public readonly memories: Memories;\n public readonly glossaries: Glossaries;\n public readonly documents: Documents;\n\n private token?: string;\n private refreshToken?: string;\n\n private readonly options?: TranslatorOptions;\n\n private readonly client: AxiosInstance;\n\n constructor(accessKey?: AccessKey, credentials?: Credentials, authToken?: AuthToken, options?: TranslatorOptions) {\n this.accessKey = accessKey;\n this.credentials = credentials;\n this.authToken = authToken;\n\n this.options = options || {};\n\n this.client = axios.create({\n baseURL: options?.serverUrl ?? DEFAULT_BASE_URL,\n headers: {\n 'X-Lara-SDK-Name': 'lara-node',\n 'X-Lara-SDK-Version': version,\n 'X-Lara-Date': new Date().toUTCString(),\n ...(options?.extraHeaders || {}),\n },\n });\n\n // Intercept request to add authentication header\n this.client.interceptors.request.use(async (request) => {\n const token = await this.authenticate();\n\n console.log('request', request.url, request.method);\n\n request.headers.Authorization = `Bearer ${token}`;\n return request;\n }, Promise.reject);\n\n // Intercepts errors to handle authentication errors\n this.client.interceptors.response.use(\n (response) => {\n console.log(response.config.responseType);\n // Convert payload in camel case if needed\n if (response.config.responseType !== 'stream' && response.data && typeof response.data === 'object') {\n response.data = toCamelCase(response.data);\n }\n\n return response;\n },\n async (error) => {\n const originalRequest = error.config;\n\n if (!originalRequest.isRetry && error.response && error.response.status === 401 && error.response.data.message === 'jwt expired') {\n this.token = undefined;\n const token = await this.authenticate();\n originalRequest.isRetry = true;\n originalRequest.headers.Authorization = `Bearer ${token}`;\n return this.client(originalRequest);\n }\n\n return Promise.reject(\n new LaraApiError(\n error.response?.status ?? 500,\n error.response?.data?.message ?? error.message,\n error.response?.headers['x-transaction-id'],\n ),\n );\n },\n );\n\n this.memories = new Memories(this.client);\n this.glossaries = new Glossaries(this.client);\n this.documents = new Documents(this.client);\n }\n\n private async authenticate(): Promise<string> {\n // If the token is set, return it\n if (this.token) return this.token;\n\n // If we have a refresh token, use it to get a new token\n if (this.refreshToken) {\n const { data, headers } = await axios.post<AuthenticationResponse>(\n `${this.options?.serverUrl ?? DEFAULT_BASE_URL}/v2/auth/refresh`,\n null,\n {\n headers: {\n authorization: `Bearer ${this.refreshToken}`,\n 'X-Lara-Date': new Date().toUTCString(),\n },\n },\n );\n\n this.token = data.token;\n this.refreshToken = headers['x-lara-refresh-token'];\n return this.token;\n } else if (this.accessKey) {\n // Use access key to get a new token\n const { data, headers } = await axios.post<AuthenticationResponse>(\n `${this.options?.serverUrl ?? DEFAULT_BASE_URL}/v2/auth`,\n this.accessKey,\n {\n headers: {\n 'X-Lara-Date': new Date().toUTCString(),\n },\n },\n );\n\n this.token = data.token;\n this.refreshToken = headers['x-lara-refresh-token'];\n return this.token;\n } else if (this.credentials) {\n // Use credentials to get a new token\n const { data, headers } = await axios.post<AuthenticationResponse>(\n //FIXME: client id should be set\n `${this.options?.serverUrl ?? DEFAULT_BASE_URL}/v2/auth/Unknown/login`,\n this.credentials,\n {\n headers: {\n 'X-Lara-Date': new Date().toUTCString(),\n },\n },\n );\n\n this.token = data.token;\n this.refreshToken = headers['x-lara-refresh-token'];\n return this.token;\n } else if (this.authToken) {\n // Use the provided auth token\n this.token = this.authToken.token;\n this.refreshToken = this.authToken.refresh_token;\n this.authToken = undefined;\n return this.token;\n } else {\n throw new Error('No authentication method provided');\n }\n }\n\n async translate<T extends string | string[] | TextBlock[]>(\n text: T,\n source: string | undefined,\n target: string,\n options?: TranslateOptions,\n ): Promise<TextResult<T>> {\n const headers: Record<string, string> = {};\n\n if (options?.headers) {\n for (const [name, value] of Object.entries(options.headers)) {\n headers[name] = value;\n }\n }\n\n if (options?.noTrace) headers['X-No-Trace'] = 'true';\n\n const { data: stream } = await this.client.post(\n `/v2/translate`,\n {\n q: text,\n source: !!source ? source : undefined,\n target,\n source_hint: options?.sourceHint,\n content_type: options?.contentType,\n multiline: options?.multiline !== false,\n adapt_to: options?.adaptTo,\n glossaries: options?.glossaries,\n instructions: options?.instructions,\n timeout: options?.timeoutInMillis,\n priority: options?.priority,\n use_cache: options?.useCache,\n cache_ttl: options?.cacheTTLSeconds,\n verbose: options?.verbose,\n style: options?.style,\n reasoning: options?.reasoning,\n },\n { headers, responseType: 'stream' },\n );\n\n let lastResult: TextResult<T> | undefined;\n\n for await (const partialResult of this.parseResponseStream(stream)) {\n lastResult = partialResult as TextResult<T>;\n }\n\n if (!lastResult) {\n throw new Error('No translation received from the server');\n }\n\n return lastResult;\n }\n\n private async *parseResponseStream(stream: NodeJS.ReadableStream): AsyncGenerator<TextResult<string | string[] | TextBlock[]>> {\n const parseResponse = (data: any) => {\n if (typeof data === 'string') {\n try {\n data = toCamelCase(JSON.parse(data));\n } catch (e) {\n // DO NOTHING\n }\n }\n return data;\n };\n\n let buffer = '';\n\n for await (const chunk of stream) {\n buffer += chunk.toString();\n let newlineIndex;\n while ((newlineIndex = buffer.indexOf('\\n')) !== -1) {\n const line = buffer.substring(0, newlineIndex).trim();\n buffer = buffer.substring(newlineIndex + 1);\n if (line) {\n yield parseResponse(line);\n }\n }\n }\n\n if (buffer.trim()) {\n yield parseResponse(buffer.trim());\n }\n }\n\n async getLanguages(): Promise<string[]> {\n const { data } = await this.client.get<string[]>(`/v2/languages`);\n return data;\n }\n\n static async getLoginUrl(serverUrl?: string): Promise<string> {\n const { data } = await axios.get<string>(`${serverUrl ?? DEFAULT_BASE_URL}/v2/auth/login-page`);\n return data;\n }\n\n static byAccessKey(id: string, secret: string, options?: TranslatorOptions): Translator {\n return new Translator({ id, secret }, undefined, undefined, options);\n }\n\n static byCredentials(email: string, password: string, options?: TranslatorOptions): Translator {\n return new Translator(undefined, { email, password }, undefined, options);\n }\n\n static byAuthToken(token: string, refresh_token: string, options?: TranslatorOptions): Translator {\n return new Translator(undefined, undefined, { token, refresh_token }, options);\n }\n}\n","export class LaraError extends Error {}\n\nexport class LaraTimeoutError extends LaraError {}\n\nexport class LaraApiError extends LaraError {\n public readonly statusCode: number;\n public readonly message: string;\n public readonly idTransaction: string;\n\n constructor(statusCode: number, message: string, idTransaction: string) {\n super(message);\n this.statusCode = statusCode;\n this.message = message;\n this.idTransaction = idTransaction;\n }\n}\n","export default (data: Record<string, any>) => {\n const formData = new FormData();\n for (const [key, value] of Object.entries(data)) {\n if (!value) continue;\n if (Array.isArray(value)) {\n for (const v of value) formData.append(key, v);\n } else {\n formData.append(key, value);\n }\n }\n\n return [formData, {}];\n};\n","import FormData from 'form-data';\n\nexport default (data: Record<string, any>): [FormData, { [key: string]: any }] => {\n const formData = new FormData();\n for (const [key, value] of Object.entries(data)) {\n if (!value) continue;\n if (Array.isArray(value)) {\n for (const v of value) formData.append(key, v);\n } else {\n formData.append(key, value);\n }\n }\n\n return [formData, { ...formData.getHeaders() }];\n};\n","import browserForm from './browser.js';\nimport nodeForm from './node.js';\n\nlet form;\n\nif (typeof window !== 'undefined') {\n form = browserForm;\n} else {\n form = nodeForm;\n}\n\nexport default form as (data: Record<string, any>) => [any, { [key: string]: any }];\n","export default (millis: number) => new Promise((resolve) => setTimeout(resolve, millis));\n","import { AxiosInstance } from 'axios';\nimport { LaraTimeoutError } from './utils/errors';\nimport { Memory, MemoryImport, UploadableFile } from './models';\nimport toFormData from './utils/formdata';\nimport sleep from './utils/sleep';\n\nexport default class Memories {\n private readonly client: AxiosInstance;\n private readonly pollingInterval: number = 2000;\n\n constructor(client: AxiosInstance) {\n this.client = client;\n }\n\n public async list(): Promise<Memory[]> {\n const { data } = await this.client.get<Memory[]>('/v2/memories');\n return data;\n }\n\n public async create(name: string, externalId?: string): Promise<Memory> {\n const { data } = await this.client.post<Memory>('/v2/memories', {\n name,\n external_id: externalId,\n });\n return data;\n }\n\n public async get(id: string): Promise<Memory> {\n const { data } = await this.client.get<Memory>(`/v2/memories/${id}`);\n return data;\n }\n\n public async delete(id: string): Promise<Memory> {\n const { data } = await this.client.delete<Memory>(`/v2/memories/${id}`);\n return data;\n }\n\n public async update(id: string, name: string): Promise<Memory> {\n const { data } = await this.client.put<Memory>(`/v2/memories/${id}`, { name });\n return data;\n }\n\n public async addTranslation(\n id: string | string[],\n source: string,\n target: string,\n sentence: string,\n translation: string,\n tuid?: string,\n sentenceBefore?: string,\n sentenceAfter?: string,\n headers?: Record<string, any>,\n ): Promise<MemoryImport> {\n const url = Array.isArray(id) ? '/v2/memories/content' : `/v2/memories/${id}/content`;\n const { data } = await this.client.put<MemoryImport>(\n url,\n {\n ids: Array.isArray(id) ? id : undefined,\n source,\n target,\n sentence,\n translation,\n tuid,\n sentence_before: sentenceBefore,\n sentence_after: sentenceAfter,\n },\n {\n headers,\n },\n );\n return data;\n }\n\n public async deleteTranslation(\n id: string | string[],\n source: string,\n target: string,\n sentence?: string,\n translation?: string,\n tuid?: string,\n sentenceBefore?: string,\n sentenceAfter?: string,\n ): Promise<MemoryImport> {\n const url = Array.isArray(id) ? '/v2/memories/content' : `/v2/memories/${id}/content`;\n const { data } = await this.client.delete<MemoryImport>(url, {\n data: {\n ids: Array.isArray(id) ? id : undefined,\n source,\n target,\n sentence,\n translation,\n tuid,\n sentence_before: sentenceBefore,\n sentence_after: sentenceAfter,\n },\n });\n return data;\n }\n\n public async importTmx(id: string, tmx: UploadableFile, gzip: boolean = false) {\n const [formData, headers] = toFormData({\n tmx,\n compression: gzip ? 'gzip' : undefined,\n });\n\n const { data } = await this.client.post<MemoryImport>(`/v2/memories/${id}/import`, formData, {\n headers,\n });\n\n return data;\n }\n\n public async getImportStatus(id: string): Promise<MemoryImport> {\n const { data } = await this.client.get(`/v2/memories/imports/${id}`);\n return data;\n }\n\n public async waitForImport(\n mImport: MemoryImport,\n updateCallback?: (mImport: MemoryImport) => void,\n maxWaitTime?: number,\n ): Promise<MemoryImport> {\n const start = Date.now();\n\n while (mImport.progress < 1.0) {\n if (maxWaitTime && Date.now() - start > maxWaitTime) throw new LaraTimeoutError();\n\n await sleep(this.pollingInterval);\n\n mImport = await this.getImportStatus(mImport.id);\n\n updateCallback && updateCallback(mImport);\n }\n\n return mImport;\n }\n\n public async connect<T extends string | string[]>(ids: T): Promise<T extends string ? Memory : Memory[]> {\n const { data } = await this.client.post<Memory[]>('/v2/memories/connect', {\n ids: Array.isArray(ids) ? ids : [ids],\n });\n\n return (Array.isArray(ids) ? data : data[0]) as T extends string ? Memory : Memory[];\n }\n}\n","export const version = '2.0.0-beta.9';\n","export default (params: Record<string, any>): string =>\n Object.entries(params)\n .reduce((acc, [key, value]) => {\n if (value !== undefined && value !== null) {\n acc.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);\n }\n return acc;\n }, [] as string[])\n .join('&');\n","export default typeof window === 'undefined';\n","import { Readable } from 'node:stream';\nimport { blob } from 'stream/consumers';\nimport { AxiosInstance } from 'axios';\nimport { LaraTimeoutError } from './utils/errors';\nimport { DownloadResult, Glossary, GlossaryCounts, GlossaryImport, UploadableFile } from './models';\nimport toFormData from './utils/formdata';\nimport sleep from './utils/sleep';\nimport toQueryString from './utils/toQueryString';\nimport isNode from './utils/isNode';\n\nexport default class Glossaries {\n private readonly client: AxiosInstance;\n private readonly pollingInterval: number = 2000;\n\n constructor(client: AxiosInstance) {\n this.client = client;\n }\n\n public async list(): Promise<Glossary[]> {\n const { data } = await this.client.get<Glossary[]>('/v2/glossaries');\n return data;\n }\n\n public async create(name: string): Promise<Glossary> {\n const { data } = await this.client.post<Glossary>('/v2/glossaries', {\n name,\n });\n return data;\n }\n\n public async get(id: string): Promise<Glossary> {\n const { data } = await this.client.get<Glossary>(`/v2/glossaries/${id}`);\n return data;\n }\n\n public async delete(id: string): Promise<Glossary> {\n const { data } = await this.client.delete<Glossary>(`/v2/glossaries/${id}`);\n return data;\n }\n\n public async update(id: string, name: string): Promise<Glossary> {\n const { data } = await this.client.put<Glossary>(`/v2/glossaries/${id}`, { name });\n return data;\n }\n\n public async importCsv(id: string, csv: UploadableFile, gzip: boolean = false): Promise<GlossaryImport> {\n const [formData, headers] = toFormData({\n csv,\n compression: gzip ? 'gzip' : undefined,\n });\n\n const { data } = await this.client.post<GlossaryImport>(`/v2/glossaries/${id}/import`, formData, { headers });\n return data;\n }\n\n public async getImportStatus(id: string): Promise<GlossaryImport> {\n const { data } = await this.client.get<GlossaryImport>(`/v2/glossaries/imports/${id}`);\n return data;\n }\n\n public async waitForImport(\n gImport: GlossaryImport,\n updateCallback?: (mImport: GlossaryImport) => void,\n maxWaitTime?: number,\n ): Promise<GlossaryImport> {\n const start = Date.now();\n\n while (gImport.progress < 1.0) {\n if (maxWaitTime && Date.now() - start > maxWaitTime) throw new LaraTimeoutError();\n\n await sleep(this.pollingInterval);\n\n gImport = await this.getImportStatus(gImport.id);\n\n updateCallback && updateCallback(gImport);\n }\n\n return gImport;\n }\n\n public async counts(id: string): Promise<GlossaryCounts> {\n const { data } = await this.client.get<GlossaryCounts>(`/v2/glossaries/${id}/counts`);\n return data;\n }\n\n public async export(id: string, contentType: 'csv/table-uni', source?: string): Promise<DownloadResult> {\n const queryString = toQueryString({\n content_type: contentType,\n source,\n });\n\n if (isNode) {\n const { data } = await this.client.get<Readable>(`/v2/glossaries/${id}/export?${queryString}`, {\n responseType: 'stream',\n });\n return data;\n } else {\n const { data } = await this.client.get<Blob>(`/v2/glossaries/${id}/export?${queryString}`, {\n responseType: 'blob',\n });\n return data.stream();\n }\n }\n}\n","import axios, { AxiosInstance } from 'axios';\nimport {\n Document,\n DocumentDownloadOptions,\n DocumentStatus,\n DocumentTranslateOptions,\n DocumentUploadOptions,\n DownloadResult,\n UploadableFile,\n UploadUrlData,\n} from './models';\nimport toFormData from './utils/formdata';\nimport toSnakeCase from './utils/toSnakeCase';\nimport sleep from './utils/sleep';\nimport { LaraApiError, LaraTimeoutError } from './utils/errors';\nimport toQueryString from './utils/toQueryString';\nimport downloadFromS3 from './utils/downloadFromS3';\n\nexport default class Documents {\n private readonly client: AxiosInstance;\n private readonly pollingInterval: number = 2000;\n private readonly maxWaitTime: number = 1000 * 60 * 15; // 15 minutes\n\n constructor(client: AxiosInstance) {\n this.client = client;\n }\n\n public async upload(\n file: UploadableFile,\n filename: string,\n source: string | undefined,\n target: string,\n options?: DocumentUploadOptions,\n ): Promise<Document> {\n const { data: s3UploadUrlData } = await this.client.get<UploadUrlData>(\n `/v2/documents/upload-url?filename=${encodeURIComponent(filename)}`,\n );\n const { url, fields } = s3UploadUrlData;\n\n const [formData, headers] = toFormData({\n ...fields,\n file,\n });\n\n await axios.post(url, formData, { headers });\n\n const noTraceHeader = options?.noTrace ? { 'X-Lara-No-Trace': 'true' } : undefined;\n\n const { data } = await this.client.post<Document>(\n `/v2/documents`,\n {\n source,\n target,\n s3key: fields.key,\n adapt_to: options?.adaptTo,\n glossaries: options?.glossaries,\n style: options?.style,\n password: options?.password,\n extraction_params: options?.extractionParams ? toSnakeCase(options.extractionParams) : undefined,\n },\n noTraceHeader ? { headers: noTraceHeader } : undefined,\n );\n\n return data;\n }\n\n public async status(id: string): Promise<Document> {\n const { data } = await this.client.get<Document>(`/v2/documents/${id}`);\n return data;\n }\n\n public async download(id: string, options?: DocumentDownloadOptions): Promise<DownloadResult> {\n const queryString = toQueryString({\n output_format: options?.outputFormat,\n });\n\n const { data } = await this.client.get<{ url: string }>(`/v2/documents/${id}/download-url?${queryString}`);\n\n return await downloadFromS3(data.url);\n }\n\n public async translate(\n file: UploadableFile,\n filenane: string,\n source: string | undefined,\n target: string,\n options?: DocumentTranslateOptions,\n ): Promise<DownloadResult> {\n const uploadOptions: DocumentUploadOptions = {\n adaptTo: options?.adaptTo,\n glossaries: options?.glossaries,\n noTrace: options?.noTrace,\n style: options?.style,\n password: options?.password,\n extractionParams: options?.extractionParams,\n };\n\n const { id } = await this.upload(file, filenane, source, target, uploadOptions);\n\n const downloadOptions: DocumentDownloadOptions = {\n outputFormat: options?.outputFormat,\n };\n\n const start = Date.now();\n\n while (Date.now() - start < this.maxWaitTime) {\n await sleep(this.pollingInterval);\n\n const { status, errorReason } = await this.status(id);\n\n if (status === DocumentStatus.TRANSLATED) return await this.download(id, downloadOptions);\n if (status === DocumentStatus.ERROR) throw new LaraApiError(500, errorReason as string, 'unknown');\n }\n\n throw new LaraTimeoutError();\n }\n}\n","import { TranslationStyle } from './translator';\n\nexport interface Document {\n readonly id: string;\n readonly status: DocumentStatus;\n readonly source?: string;\n readonly target: string;\n readonly filename: string;\n readonly createdAt: Date;\n readonly updatedAt: Date;\n readonly options?: DocumentOptions;\n readonly translatedChars?: number;\n readonly totalChars?: number;\n readonly errorReason?: string;\n}\n\nexport enum DocumentStatus {\n INITIALIZED = 'initialized', // just been created\n ANALYZING = 'analyzing', // being analyzed for language detection and chars count\n PAUSED = 'paused', // paused after analysis, needs user confirm\n READY = 'ready', // ready to be translated\n TRANSLATING = 'translating',\n TRANSLATED = 'translated',\n ERROR = 'error',\n}\nexport type DocumentOptions = {\n adaptTo?: string[];\n glossaries?: string[];\n noTrace?: boolean;\n style?: TranslationStyle;\n};\n\nexport type DocumentUploadOptions = DocumentOptions & {\n password?: string;\n extractionParams?: DocxExtractionParams;\n};\n\nexport type DocumentDownloadOptions = {\n outputFormat?: string;\n};\n\nexport type DocumentTranslateOptions = DocumentUploadOptions & DocumentDownloadOptions;\n\nexport interface DocxExtractionParams {\n extractComments?: boolean;\n accepsRevisions?: boolean;\n}\n\ninterface S3UploadFields {\n acl: string;\n bucket: string;\n key: string;\n}\n\nexport interface UploadUrlData {\n url: string;\n fields: S3UploadFields;\n}\n","const toSnakeCase = (content: any): any => {\n if (typeof content === 'string') return content;\n if (Array.isArray(content)) return content.map(toSnakeCase);\n\n if (typeof content === 'object' && content !== null) {\n const result: Record<string, any> = {};\n for (const [key, value] of Object.entries(content)) {\n const snakeKey = key.replace(/([A-Z])/g, '_$1').toLowerCase();\n result[snakeKey] = toSnakeCase(value);\n }\n return result;\n }\n\n return content;\n};\n\nexport default toSnakeCase;\n","import axios from 'axios';\n\nexport default async (url: string) => {\n const { data } = await axios.get<Blob>(url, {\n responseType: 'blob',\n });\n return data.stream();\n};\n","import { Readable } from 'node:stream';\nimport axios from 'axios';\n\nexport default async (url: string) => {\n const { data } = await axios.get<Readable>(url, {\n responseType: 'stream',\n });\n return data;\n};\n","import isNode from '../isNode';\nimport { DownloadResult } from '../../models';\nimport browserDownload from './browser';\nimport nodeDownload from './node';\n\nlet downloadFromS3;\n\nif (isNode) {\n downloadFromS3 = nodeDownload;\n} else {\n downloadFromS3 = browserDownload;\n}\n\nexport default downloadFromS3 as (url: string) => Promise<DownloadResult>;\n","const toCamelCase = (content: any): any => {\n if (typeof content === 'string') return content;\n if (Array.isArray(content)) return content.map(toCamelCase);\n\n if (typeof content === 'object' && content !== null) {\n const result: Record<string, any> = {};\n for (const [key, value] of Object.entries(content)) {\n const camelKey = key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());\n result[camelKey] = toCamelCase(value);\n }\n return result;\n }\n\n return content;\n};\n\nexport default toCamelCase;\n"],"mappings":"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","names":["axios","LaraError","LaraTimeoutError","LaraApiError","statusCode","message","idTransaction","browser_default","data","formData","key","value","v","FormData","node_default","data","formData","key","value","v","form","browser_default","node_default","formdata_default","sleep_default","millis","resolve","Memories","client","data","name","externalId","id","source","target","sentence","translation","tuid","sentenceBefore","sentenceAfter","headers","url","tmx","gzip","formData","formdata_default","mImport","updateCallback","maxWaitTime","start","LaraTimeoutError","sleep_default","ids","version","toQueryString_default","params","acc","key","value","isNode_default","Glossaries","client","data","name","id","csv","gzip","formData","headers","formdata_default","gImport","updateCallback","maxWaitTime","start","LaraTimeoutError","sleep_default","contentType","source","queryString","toQueryString_default","isNode_default","axios","DocumentStatus","toSnakeCase","content","result","key","value","snakeKey","toSnakeCase_default","axios","browser_default","url","data","axios","node_default","url","data","downloadFromS3","isNode_default","node_default","browser_default","downloadFromS3_default","Documents","client","file","filename","source","target","options","s3UploadUrlData","url","fields","formData","headers","formdata_default","axios","noTraceHeader","data","toSnakeCase_default","id","queryString","toQueryString_default","downloadFromS3_default","filenane","uploadOptions","downloadOptions","start","sleep_default","status","errorReason","LaraApiError","LaraTimeoutError","toCamelCase","content","result","key","value","camelKey","_","letter","toCamelCase_default","DEFAULT_BASE_URL","Translator","_Translator","accessKey","credentials","authToken","options","_a","axios","version","request","token","response","toCamelCase_default","error","_b","_c","_d","_e","_f","originalRequest","LaraApiError","Memories","Glossaries","Documents","data","headers","text","source","target","name","value","stream","lastResult","partialResult","parseResponse","buffer","chunk","newlineIndex","line","serverUrl","id","secret","email","password","refresh_token"]}
|
package/package.json
CHANGED
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@translated/lara",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.10",
|
|
4
4
|
"main": "./lib/index.js",
|
|
5
5
|
"types": "./lib/index.d.ts",
|
|
6
6
|
"engines": {
|
|
7
7
|
"node": ">=12.*"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
|
-
"build": "rm -rf lib/* lib-browser/* && node scripts/generate-sdk-version.js && tsc && webpack",
|
|
11
|
-
"_build": "rm -rf lib/* && tsc",
|
|
12
|
-
"version": "node scripts/generate-sdk-version.js && git add src/sdk-version.ts",
|
|
13
10
|
"lint:fix": "eslint --fix .",
|
|
14
|
-
"lint:check": "eslint ."
|
|
11
|
+
"lint:check": "eslint .",
|
|
12
|
+
"version": "node scripts/generate-sdk-version.js && git add src/sdk-version.ts",
|
|
13
|
+
"sdk-version": "node scripts/generate-sdk-version.js",
|
|
14
|
+
"preversion": "pnpm lint:check",
|
|
15
|
+
"compile": "tsup && webpack",
|
|
16
|
+
"dev": "tsup --watch",
|
|
17
|
+
"build:clean": "rm -rf ./lib/* ./lib-browser/*",
|
|
18
|
+
"build": "npm run build:clean && npm run sdk-version && npm run compile",
|
|
19
|
+
"__prepare": "npm run build"
|
|
15
20
|
},
|
|
16
21
|
"files": [
|
|
17
22
|
"lib",
|
package/lib/Documents.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { AxiosInstance } from 'axios';
|
|
2
|
-
import { Document, DocumentDownloadOptions, DocumentTranslateOptions, DocumentUploadOptions, UploadableFile } from './models';
|
|
3
|
-
export default class Documents {
|
|
4
|
-
private readonly client;
|
|
5
|
-
private readonly pollingInterval;
|
|
6
|
-
private readonly maxWaitTime;
|
|
7
|
-
constructor(client: AxiosInstance);
|
|
8
|
-
upload(file: UploadableFile, filenane: string, source: string | null, target: string, options?: DocumentUploadOptions): Promise<Document>;
|
|
9
|
-
status(id: string): Promise<Document>;
|
|
10
|
-
download(id: string, options?: DocumentDownloadOptions): Promise<Blob | Buffer>;
|
|
11
|
-
translate(file: UploadableFile, filenane: string, source: string | null, target: string, options?: DocumentTranslateOptions): Promise<Blob | Buffer>;
|
|
12
|
-
}
|
package/lib/Documents.js
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import axios from 'axios';
|
|
2
|
-
import { DocumentStatus, } from './models';
|
|
3
|
-
import toFormData from './utils/formdata';
|
|
4
|
-
import toSnakeCase from './utils/toSnakeCase';
|
|
5
|
-
import sleep from './utils/sleep';
|
|
6
|
-
import { LaraApiError, TimeoutError } from './utils/errors';
|
|
7
|
-
export default class Documents {
|
|
8
|
-
constructor(client) {
|
|
9
|
-
this.pollingInterval = 2000;
|
|
10
|
-
this.maxWaitTime = 1000 * 60 * 15; // 15 minutes
|
|
11
|
-
this.client = client;
|
|
12
|
-
}
|
|
13
|
-
async upload(file, filenane, source, target, options) {
|
|
14
|
-
const { data: s3UploadUrlData } = await this.client.get(`/v2/documents/upload-url?filename=${encodeURIComponent(filenane)}`);
|
|
15
|
-
const { url, fields } = s3UploadUrlData;
|
|
16
|
-
const [formData, headers] = toFormData({
|
|
17
|
-
file,
|
|
18
|
-
...fields,
|
|
19
|
-
});
|
|
20
|
-
await axios.post(url, formData, { headers });
|
|
21
|
-
const noTraceHeader = (options === null || options === void 0 ? void 0 : options.noTrace) ? { 'X-Lara-No-Trace': 'true' } : undefined;
|
|
22
|
-
const { data } = await this.client.post(`/v2/documents`, {
|
|
23
|
-
source,
|
|
24
|
-
target,
|
|
25
|
-
s3key: fields.key,
|
|
26
|
-
adapt_to: options === null || options === void 0 ? void 0 : options.adaptTo,
|
|
27
|
-
glossaries: options === null || options === void 0 ? void 0 : options.glossaries,
|
|
28
|
-
style: options === null || options === void 0 ? void 0 : options.style,
|
|
29
|
-
password: options === null || options === void 0 ? void 0 : options.password,
|
|
30
|
-
extraction_params: (options === null || options === void 0 ? void 0 : options.extractionParams) ? toSnakeCase(options.extractionParams) : undefined,
|
|
31
|
-
}, noTraceHeader ? { headers: noTraceHeader } : undefined);
|
|
32
|
-
return data;
|
|
33
|
-
}
|
|
34
|
-
async status(id) {
|
|
35
|
-
const { data } = await this.client.get(`/v2/documents/${id}`);
|
|
36
|
-
return data;
|
|
37
|
-
}
|
|
38
|
-
async download(id, options) {
|
|
39
|
-
const { data } = await this.client.get(`/v2/documents/${id}/download-url`, {
|
|
40
|
-
data: {
|
|
41
|
-
output_format: options === null || options === void 0 ? void 0 : options.outputFormat,
|
|
42
|
-
},
|
|
43
|
-
});
|
|
44
|
-
const { data: downloadedData } = await axios.get(data.url);
|
|
45
|
-
return downloadedData;
|
|
46
|
-
}
|
|
47
|
-
async translate(file, filenane, source, target, options) {
|
|
48
|
-
const uploadOptions = {
|
|
49
|
-
adaptTo: options === null || options === void 0 ? void 0 : options.adaptTo,
|
|
50
|
-
glossaries: options === null || options === void 0 ? void 0 : options.glossaries,
|
|
51
|
-
noTrace: options === null || options === void 0 ? void 0 : options.noTrace,
|
|
52
|
-
style: options === null || options === void 0 ? void 0 : options.style,
|
|
53
|
-
password: options === null || options === void 0 ? void 0 : options.password,
|
|
54
|
-
extractionParams: options === null || options === void 0 ? void 0 : options.extractionParams,
|
|
55
|
-
};
|
|
56
|
-
const { id } = await this.upload(file, filenane, source, target, uploadOptions);
|
|
57
|
-
const downloadOptions = {
|
|
58
|
-
outputFormat: options === null || options === void 0 ? void 0 : options.outputFormat,
|
|
59
|
-
};
|
|
60
|
-
const start = Date.now();
|
|
61
|
-
while (Date.now() - start < this.maxWaitTime) {
|
|
62
|
-
await sleep(this.pollingInterval);
|
|
63
|
-
const { status, errorReason } = await this.status(id);
|
|
64
|
-
if (status === DocumentStatus.TRANSLATED)
|
|
65
|
-
return await this.download(id, downloadOptions);
|
|
66
|
-
if (status === DocumentStatus.ERROR)
|
|
67
|
-
throw new LaraApiError(500, 'DocumentError', errorReason);
|
|
68
|
-
}
|
|
69
|
-
throw new TimeoutError();
|
|
70
|
-
}
|
|
71
|
-
}
|
package/lib/Glossaries.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { AxiosInstance } from 'axios';
|
|
2
|
-
import { Glossary, GlossaryCounts, GlossaryImport, UploadableFile } from './models';
|
|
3
|
-
export default class Glossaries {
|
|
4
|
-
private readonly client;
|
|
5
|
-
private readonly pollingInterval;
|
|
6
|
-
constructor(client: AxiosInstance);
|
|
7
|
-
list(): Promise<Glossary[]>;
|
|
8
|
-
create(name: string): Promise<Glossary>;
|
|
9
|
-
get(id: string): Promise<Glossary>;
|
|
10
|
-
delete(id: string): Promise<Glossary>;
|
|
11
|
-
update(id: string, name: string): Promise<Glossary>;
|
|
12
|
-
importCsv(id: string, csv: UploadableFile, gzip?: boolean): Promise<GlossaryImport>;
|
|
13
|
-
getImportStatus(id: string): Promise<GlossaryImport>;
|
|
14
|
-
waitForImport(gImport: GlossaryImport, updateCallback?: (mImport: GlossaryImport) => void, maxWaitTime?: number): Promise<GlossaryImport>;
|
|
15
|
-
counts(id: string): Promise<GlossaryCounts>;
|
|
16
|
-
export(id: string, contentType: 'csv/table-uni', source?: string): Promise<string>;
|
|
17
|
-
}
|
package/lib/Glossaries.js
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { TimeoutError } from './utils/errors';
|
|
2
|
-
import toFormData from './utils/formdata';
|
|
3
|
-
import sleep from './utils/sleep';
|
|
4
|
-
export default class Glossaries {
|
|
5
|
-
constructor(client) {
|
|
6
|
-
this.pollingInterval = 2000;
|
|
7
|
-
this.client = client;
|
|
8
|
-
}
|
|
9
|
-
async list() {
|
|
10
|
-
const { data } = await this.client.get('/v2/glossaries');
|
|
11
|
-
return data;
|
|
12
|
-
}
|
|
13
|
-
async create(name) {
|
|
14
|
-
const { data } = await this.client.post('/v2/glossaries', {
|
|
15
|
-
name,
|
|
16
|
-
});
|
|
17
|
-
return data;
|
|
18
|
-
}
|
|
19
|
-
async get(id) {
|
|
20
|
-
const { data } = await this.client.get(`/v2/glossaries/${id}`);
|
|
21
|
-
return data;
|
|
22
|
-
}
|
|
23
|
-
async delete(id) {
|
|
24
|
-
const { data } = await this.client.delete(`/v2/glossaries/${id}`);
|
|
25
|
-
return data;
|
|
26
|
-
}
|
|
27
|
-
async update(id, name) {
|
|
28
|
-
const { data } = await this.client.put(`/v2/glossaries/${id}`, { name });
|
|
29
|
-
return data;
|
|
30
|
-
}
|
|
31
|
-
async importCsv(id, csv, gzip = false) {
|
|
32
|
-
const [formData, headers] = toFormData({
|
|
33
|
-
csv,
|
|
34
|
-
compression: gzip ? 'gzip' : undefined,
|
|
35
|
-
});
|
|
36
|
-
const { data } = await this.client.post(`/v2/glossaries/${id}/import`, formData, { headers });
|
|
37
|
-
return data;
|
|
38
|
-
}
|
|
39
|
-
async getImportStatus(id) {
|
|
40
|
-
const { data } = await this.client.get(`/v2/glossaries/imports/${id}`);
|
|
41
|
-
return data;
|
|
42
|
-
}
|
|
43
|
-
async waitForImport(gImport, updateCallback, maxWaitTime) {
|
|
44
|
-
const start = Date.now();
|
|
45
|
-
while (gImport.progress < 1.0) {
|
|
46
|
-
if (maxWaitTime && Date.now() - start > maxWaitTime)
|
|
47
|
-
throw new TimeoutError();
|
|
48
|
-
await sleep(this.pollingInterval);
|
|
49
|
-
gImport = await this.getImportStatus(gImport.id);
|
|
50
|
-
updateCallback && updateCallback(gImport);
|
|
51
|
-
}
|
|
52
|
-
return gImport;
|
|
53
|
-
}
|
|
54
|
-
async counts(id) {
|
|
55
|
-
const { data } = await this.client.get(`/v2/glossaries/${id}/countes`);
|
|
56
|
-
return data;
|
|
57
|
-
}
|
|
58
|
-
// FIXME: this method should return a Blob or Buffer
|
|
59
|
-
async export(id, contentType, source) {
|
|
60
|
-
const { data } = await this.client.get(`/v2/glossaries/${id}/export`, {
|
|
61
|
-
data: {
|
|
62
|
-
content_type: contentType,
|
|
63
|
-
source: !!source ? source : undefined,
|
|
64
|
-
},
|
|
65
|
-
});
|
|
66
|
-
return data;
|
|
67
|
-
}
|
|
68
|
-
}
|
package/lib/Memories.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { AxiosInstance } from 'axios';
|
|
2
|
-
import { Memory, MemoryImport, UploadableFile } from './models';
|
|
3
|
-
export default class Memories {
|
|
4
|
-
private readonly client;
|
|
5
|
-
private readonly pollingInterval;
|
|
6
|
-
constructor(client: AxiosInstance);
|
|
7
|
-
list(): Promise<Memory[]>;
|
|
8
|
-
create(name: string, externalId?: string): Promise<Memory>;
|
|
9
|
-
get(id: string): Promise<Memory>;
|
|
10
|
-
delete(id: string): Promise<Memory>;
|
|
11
|
-
update(id: string, name: string): Promise<Memory>;
|
|
12
|
-
addTranslation(id: string | string[], source: string, target: string, sentence: string, translation: string, tuid?: string, sentenceBefore?: string, sentenceAfter?: string, headers?: Record<string, any>): Promise<MemoryImport>;
|
|
13
|
-
deleteTranslation(id: string | string[], source: string, target: string, sentence?: string, translation?: string, tuid?: string, sentenceBefore?: string, sentenceAfter?: string): Promise<MemoryImport>;
|
|
14
|
-
importTmx(id: string, tmx: UploadableFile, gzip?: boolean): Promise<MemoryImport>;
|
|
15
|
-
getImportStatus(id: string): Promise<MemoryImport>;
|
|
16
|
-
waitForImport(mImport: MemoryImport, updateCallback?: (mImport: MemoryImport) => void, maxWaitTime?: number): Promise<MemoryImport>;
|
|
17
|
-
connect<T extends string | string[]>(ids: T): Promise<T extends string ? Memory : Memory[]>;
|
|
18
|
-
}
|
package/lib/Memories.js
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import { TimeoutError } from './utils/errors';
|
|
2
|
-
import toFormData from './utils/formdata';
|
|
3
|
-
import sleep from './utils/sleep';
|
|
4
|
-
export default class Memories {
|
|
5
|
-
constructor(client) {
|
|
6
|
-
this.pollingInterval = 2000;
|
|
7
|
-
this.client = client;
|
|
8
|
-
}
|
|
9
|
-
async list() {
|
|
10
|
-
const { data } = await this.client.get('/v2/memories');
|
|
11
|
-
return data;
|
|
12
|
-
}
|
|
13
|
-
async create(name, externalId) {
|
|
14
|
-
const { data } = await this.client.post('/v2/memories', {
|
|
15
|
-
name,
|
|
16
|
-
external_id: externalId,
|
|
17
|
-
});
|
|
18
|
-
return data;
|
|
19
|
-
}
|
|
20
|
-
async get(id) {
|
|
21
|
-
const { data } = await this.client.get(`/v2/memories/${id}`);
|
|
22
|
-
return data;
|
|
23
|
-
}
|
|
24
|
-
async delete(id) {
|
|
25
|
-
const { data } = await this.client.delete(`/v2/memories/${id}`);
|
|
26
|
-
return data;
|
|
27
|
-
}
|
|
28
|
-
async update(id, name) {
|
|
29
|
-
const { data } = await this.client.put(`/v2/memories/${id}`, { name });
|
|
30
|
-
return data;
|
|
31
|
-
}
|
|
32
|
-
async addTranslation(id, source, target, sentence, translation, tuid, sentenceBefore, sentenceAfter, headers) {
|
|
33
|
-
const url = Array.isArray(id) ? '/v2/memories/content' : `/v2/memories/${id}/content`;
|
|
34
|
-
const { data } = await this.client.put(url, {
|
|
35
|
-
ids: Array.isArray(id) ? id : undefined,
|
|
36
|
-
source,
|
|
37
|
-
target,
|
|
38
|
-
sentence,
|
|
39
|
-
translation,
|
|
40
|
-
tuid,
|
|
41
|
-
sentence_before: sentenceBefore,
|
|
42
|
-
sentence_after: sentenceAfter,
|
|
43
|
-
}, {
|
|
44
|
-
headers,
|
|
45
|
-
});
|
|
46
|
-
return data;
|
|
47
|
-
}
|
|
48
|
-
async deleteTranslation(id, source, target, sentence, translation, tuid, sentenceBefore, sentenceAfter) {
|
|
49
|
-
const url = Array.isArray(id) ? '/v2/memories/content' : `/v2/memories/${id}/content`;
|
|
50
|
-
const { data } = await this.client.delete(url, {
|
|
51
|
-
data: {
|
|
52
|
-
ids: Array.isArray(id) ? id : undefined,
|
|
53
|
-
source,
|
|
54
|
-
target,
|
|
55
|
-
sentence,
|
|
56
|
-
translation,
|
|
57
|
-
tuid,
|
|
58
|
-
sentence_before: sentenceBefore,
|
|
59
|
-
sentence_after: sentenceAfter,
|
|
60
|
-
},
|
|
61
|
-
});
|
|
62
|
-
return data;
|
|
63
|
-
}
|
|
64
|
-
async importTmx(id, tmx, gzip = false) {
|
|
65
|
-
const [formData, headers] = toFormData({
|
|
66
|
-
tmx,
|
|
67
|
-
compression: gzip ? 'gzip' : undefined,
|
|
68
|
-
});
|
|
69
|
-
const { data } = await this.client.post(`/v2/memories/${id}/import`, formData, {
|
|
70
|
-
headers,
|
|
71
|
-
});
|
|
72
|
-
return data;
|
|
73
|
-
}
|
|
74
|
-
async getImportStatus(id) {
|
|
75
|
-
const { data } = await this.client.get(`/v2/memories/imports/${id}`);
|
|
76
|
-
return data;
|
|
77
|
-
}
|
|
78
|
-
async waitForImport(mImport, updateCallback, maxWaitTime) {
|
|
79
|
-
const start = Date.now();
|
|
80
|
-
while (mImport.progress < 1.0) {
|
|
81
|
-
if (maxWaitTime && Date.now() - start > maxWaitTime)
|
|
82
|
-
throw new TimeoutError();
|
|
83
|
-
await sleep(this.pollingInterval);
|
|
84
|
-
mImport = await this.getImportStatus(mImport.id);
|
|
85
|
-
updateCallback && updateCallback(mImport);
|
|
86
|
-
}
|
|
87
|
-
return mImport;
|
|
88
|
-
}
|
|
89
|
-
async connect(ids) {
|
|
90
|
-
const { data } = await this.client.post('/v2/memories/connect', {
|
|
91
|
-
ids: Array.isArray(ids) ? ids : [ids],
|
|
92
|
-
});
|
|
93
|
-
return (Array.isArray(ids) ? data : data[0]);
|
|
94
|
-
}
|
|
95
|
-
}
|
package/lib/Translator.d.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { AccessKey, Credentials, AuthToken, TranslatorOptions, TextBlock, TranslateOptions, TextResult } from './models';
|
|
2
|
-
import Memories from './Memories';
|
|
3
|
-
import Glossaries from './Glossaries';
|
|
4
|
-
import Documents from './Documents';
|
|
5
|
-
export declare class Translator {
|
|
6
|
-
private readonly accessKey?;
|
|
7
|
-
private readonly credentials?;
|
|
8
|
-
private authToken?;
|
|
9
|
-
readonly memories: Memories;
|
|
10
|
-
readonly glossaries: Glossaries;
|
|
11
|
-
readonly documents: Documents;
|
|
12
|
-
private token?;
|
|
13
|
-
private refreshToken?;
|
|
14
|
-
private readonly options?;
|
|
15
|
-
private readonly client;
|
|
16
|
-
constructor(accessKey?: AccessKey, credentials?: Credentials, authToken?: AuthToken, options?: TranslatorOptions);
|
|
17
|
-
private authenticate;
|
|
18
|
-
translate<T extends string | string[] | TextBlock[]>(text: T, source: string | null, target: string, options?: TranslateOptions): Promise<TextResult<T>>;
|
|
19
|
-
getLanguages(): Promise<string[]>;
|
|
20
|
-
static getLoginUrl(serverUrl?: string): Promise<string>;
|
|
21
|
-
static byAccessKey(id: string, secret: string, options?: TranslatorOptions): Translator;
|
|
22
|
-
static byCredentials(email: string, password: string, options?: TranslatorOptions): Translator;
|
|
23
|
-
static byAuthToken(token: string, refresh_token: string, options?: TranslatorOptions): Translator;
|
|
24
|
-
}
|
package/lib/Translator.js
DELETED
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import axios from 'axios';
|
|
2
|
-
import Memories from './Memories';
|
|
3
|
-
import { version } from './sdk-version';
|
|
4
|
-
import Glossaries from './Glossaries';
|
|
5
|
-
import Documents from './Documents';
|
|
6
|
-
import toCamelCase from './utils/toCamelCase';
|
|
7
|
-
const DEFAULT_BASE_URL = 'https://api.laratranslate.com';
|
|
8
|
-
export class Translator {
|
|
9
|
-
constructor(accessKey, credentials, authToken, options) {
|
|
10
|
-
var _a;
|
|
11
|
-
this.accessKey = accessKey;
|
|
12
|
-
this.credentials = credentials;
|
|
13
|
-
this.authToken = authToken;
|
|
14
|
-
this.options = options || {};
|
|
15
|
-
this.client = axios.create({
|
|
16
|
-
baseURL: (_a = options === null || options === void 0 ? void 0 : options.serverUrl) !== null && _a !== void 0 ? _a : DEFAULT_BASE_URL,
|
|
17
|
-
headers: {
|
|
18
|
-
'X-Lara-SDK-Name': 'lara-node',
|
|
19
|
-
'X-Lara-SDK-Version': version,
|
|
20
|
-
'X-Lara-Date': new Date().toUTCString(),
|
|
21
|
-
...((options === null || options === void 0 ? void 0 : options.extraHeaders) || {}),
|
|
22
|
-
},
|
|
23
|
-
});
|
|
24
|
-
// Intercept request to add authentication header
|
|
25
|
-
this.client.interceptors.request.use(async (request) => {
|
|
26
|
-
const token = await this.authenticate();
|
|
27
|
-
request.headers.Authorization = `Bearer ${token}`;
|
|
28
|
-
return request;
|
|
29
|
-
}, Promise.reject);
|
|
30
|
-
// Intercepts errors to handle authentication errors
|
|
31
|
-
this.client.interceptors.response.use((response) => {
|
|
32
|
-
// Convert payload in camel case if needed
|
|
33
|
-
if (response.data && typeof response.data === 'object') {
|
|
34
|
-
response.data = toCamelCase(response.data);
|
|
35
|
-
}
|
|
36
|
-
return response;
|
|
37
|
-
}, async (error) => {
|
|
38
|
-
const originalRequest = error.config;
|
|
39
|
-
if (originalRequest.isRetry)
|
|
40
|
-
return Promise.reject(error);
|
|
41
|
-
if (error.response && error.response.status === 401 && error.response.message === 'jwt expired') {
|
|
42
|
-
this.token = undefined;
|
|
43
|
-
const token = await this.authenticate();
|
|
44
|
-
originalRequest.isRetry = true;
|
|
45
|
-
originalRequest.headers.Authorization = `Bearer ${token}`;
|
|
46
|
-
return this.client(originalRequest);
|
|
47
|
-
}
|
|
48
|
-
return Promise.reject(error);
|
|
49
|
-
});
|
|
50
|
-
this.memories = new Memories(this.client);
|
|
51
|
-
this.glossaries = new Glossaries(this.client);
|
|
52
|
-
this.documents = new Documents(this.client);
|
|
53
|
-
}
|
|
54
|
-
async authenticate() {
|
|
55
|
-
var _a, _b, _c, _d, _e, _f;
|
|
56
|
-
// If the token is set, return it
|
|
57
|
-
if (this.token)
|
|
58
|
-
return this.token;
|
|
59
|
-
// If we have a refresh token, use it to get a new token
|
|
60
|
-
if (this.refreshToken) {
|
|
61
|
-
const { data } = await axios.post(`${(_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.serverUrl) !== null && _b !== void 0 ? _b : DEFAULT_BASE_URL}/v2/auth/refresh`, null, {
|
|
62
|
-
headers: {
|
|
63
|
-
authorization: `Bearer ${this.refreshToken}`,
|
|
64
|
-
'X-Lara-Date': new Date().toUTCString(),
|
|
65
|
-
},
|
|
66
|
-
});
|
|
67
|
-
this.token = data.token;
|
|
68
|
-
this.refreshToken = data.refresh_token;
|
|
69
|
-
return this.token;
|
|
70
|
-
}
|
|
71
|
-
else if (this.accessKey) {
|
|
72
|
-
// Use access key to get a new token
|
|
73
|
-
const { data } = await axios.post(`${(_d = (_c = this.options) === null || _c === void 0 ? void 0 : _c.serverUrl) !== null && _d !== void 0 ? _d : DEFAULT_BASE_URL}/v2/auth`, this.accessKey, {
|
|
74
|
-
headers: {
|
|
75
|
-
'X-Lara-Date': new Date().toUTCString(),
|
|
76
|
-
},
|
|
77
|
-
});
|
|
78
|
-
this.token = data.token;
|
|
79
|
-
this.refreshToken = data.refresh_token;
|
|
80
|
-
return this.token;
|
|
81
|
-
}
|
|
82
|
-
else if (this.credentials) {
|
|
83
|
-
// Use credentials to get a new token
|
|
84
|
-
const { data } = await axios.post(
|
|
85
|
-
//FIXME: client id should be set
|
|
86
|
-
`${(_f = (_e = this.options) === null || _e === void 0 ? void 0 : _e.serverUrl) !== null && _f !== void 0 ? _f : DEFAULT_BASE_URL}/v2/auth/Unknown/login`, this.credentials, {
|
|
87
|
-
headers: {
|
|
88
|
-
'X-Lara-Date': new Date().toUTCString(),
|
|
89
|
-
},
|
|
90
|
-
});
|
|
91
|
-
this.token = data.token;
|
|
92
|
-
this.refreshToken = data.refresh_token;
|
|
93
|
-
return this.token;
|
|
94
|
-
}
|
|
95
|
-
else if (this.authToken) {
|
|
96
|
-
// Use the provided auth token
|
|
97
|
-
this.token = this.authToken.token;
|
|
98
|
-
this.refreshToken = this.authToken.refresh_token;
|
|
99
|
-
this.authToken = undefined;
|
|
100
|
-
return this.token;
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
throw new Error('No authentication method provided');
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
async translate(text, source, target, options) {
|
|
107
|
-
const headers = {};
|
|
108
|
-
if (options === null || options === void 0 ? void 0 : options.headers) {
|
|
109
|
-
for (const [name, value] of Object.entries(options.headers)) {
|
|
110
|
-
headers[name] = value;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
if (options === null || options === void 0 ? void 0 : options.noTrace)
|
|
114
|
-
headers['X-No-Trace'] = 'true';
|
|
115
|
-
const { data } = await this.client.post(`/v2/translate`, {
|
|
116
|
-
q: text,
|
|
117
|
-
source: !!source ? source : undefined,
|
|
118
|
-
target,
|
|
119
|
-
source_hint: options === null || options === void 0 ? void 0 : options.sourceHint,
|
|
120
|
-
content_type: options === null || options === void 0 ? void 0 : options.contentType,
|
|
121
|
-
multiline: (options === null || options === void 0 ? void 0 : options.multiline) !== false,
|
|
122
|
-
adapt_to: options === null || options === void 0 ? void 0 : options.adaptTo,
|
|
123
|
-
glossaries: options === null || options === void 0 ? void 0 : options.glossaries,
|
|
124
|
-
instructions: options === null || options === void 0 ? void 0 : options.instructions,
|
|
125
|
-
timeout: options === null || options === void 0 ? void 0 : options.timeoutInMillis,
|
|
126
|
-
priority: options === null || options === void 0 ? void 0 : options.priority,
|
|
127
|
-
use_cache: options === null || options === void 0 ? void 0 : options.useCache,
|
|
128
|
-
cache_ttl: options === null || options === void 0 ? void 0 : options.cacheTTLSeconds,
|
|
129
|
-
verbose: options === null || options === void 0 ? void 0 : options.verbose,
|
|
130
|
-
style: options === null || options === void 0 ? void 0 : options.style,
|
|
131
|
-
}, headers);
|
|
132
|
-
return data;
|
|
133
|
-
}
|
|
134
|
-
async getLanguages() {
|
|
135
|
-
const { data } = await this.client.get(`/v2/languages`);
|
|
136
|
-
return data;
|
|
137
|
-
}
|
|
138
|
-
static async getLoginUrl(serverUrl) {
|
|
139
|
-
const { data } = await axios.get(`${serverUrl !== null && serverUrl !== void 0 ? serverUrl : DEFAULT_BASE_URL}/v2/auth/login-page`);
|
|
140
|
-
return data;
|
|
141
|
-
}
|
|
142
|
-
static byAccessKey(id, secret, options) {
|
|
143
|
-
return new Translator({ id, secret }, undefined, undefined, options);
|
|
144
|
-
}
|
|
145
|
-
static byCredentials(email, password, options) {
|
|
146
|
-
return new Translator(undefined, { email, password }, undefined, options);
|
|
147
|
-
}
|
|
148
|
-
static byAuthToken(token, refresh_token, options) {
|
|
149
|
-
return new Translator(undefined, undefined, { token, refresh_token }, options);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export type UploadableFile = File | import('stream').Readable;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|