sanity-plugin-studio-smartling 4.3.0-beta → 4.3.0-beta.2
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.esm.js +2 -2
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/src/adapter/createTask.ts +4 -5
package/dist/index.esm.js
CHANGED
|
@@ -198,8 +198,8 @@ const uploadFileToBatch = (batchUid, documentId, document, secrets, localeIds, a
|
|
|
198
198
|
const htmlBuffer = Buffer.from(document.content, "utf-8");
|
|
199
199
|
formData.append("file", new Blob([htmlBuffer]), "".concat(document.name, ".html"));
|
|
200
200
|
localeIds.forEach(localeId => formData.append("localeIdsToAuthorize[]", localeId));
|
|
201
|
-
if (callbackUrl
|
|
202
|
-
formData.append("callbackUrl", callbackUrl
|
|
201
|
+
if (callbackUrl) {
|
|
202
|
+
formData.append("callbackUrl", callbackUrl);
|
|
203
203
|
}
|
|
204
204
|
return fetch(proxy, {
|
|
205
205
|
method: "POST",
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/adapter/helpers.ts","../src/adapter/getLocales.ts","../src/adapter/getTranslationTask.ts","../src/adapter/createTask.ts","../src/adapter/getTranslation.ts","../src/adapter/index.ts","../src/index.ts"],"sourcesContent":["import {Secrets} from 'sanity-translations-tab'\n\ninterface Headers {\n [key: string]: string\n}\n\nexport const authenticate = (secrets: Secrets): Promise<string> => {\n const url = 'https://api.smartling.com/auth-api/v2/authenticate'\n const headers = {\n 'content-type': 'application/json',\n 'X-URL': url,\n }\n const {secret, proxy} = secrets\n if (!secret || !proxy) {\n throw new Error(\n 'The Smartling adapter requires a secret key and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n return fetch(proxy, {\n headers,\n method: 'POST',\n body: JSON.stringify(secret),\n })\n .then((res) => res.json())\n .then((res) => res.response.data.accessToken)\n}\n\nexport const getHeaders = (url: string, accessToken: string): Headers => ({\n Authorization: `Bearer ${accessToken}`,\n 'X-URL': url,\n})\n\nexport const findExistingJob = async (\n documentId: string,\n secrets: Secrets,\n accessToken: string,\n): Promise<string> => {\n const {project, proxy} = secrets\n if (!project || !proxy) {\n throw new Error(\n 'The Smartling adapter requires a Smartling project identifier and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n const url = `https://api.smartling.com/jobs-api/v3/projects/${project}/jobs?jobName=${documentId}`\n //first, try fetching from name resolution\n let items = await fetch(proxy, {\n headers: getHeaders(url, accessToken),\n })\n .then((res) => res.json())\n .then((res) => res?.response?.data?.items)\n\n if (!items || !items.length) {\n //if that fails, try fetching by fileUri and check the referenceNumber\n const refUrl = `https://api.smartling.com/jobs-api/v3/projects/${project}/jobs/search`\n items = await fetch(proxy, {\n headers: {\n ...getHeaders(refUrl, accessToken),\n 'content-type': 'application/json',\n },\n method: 'POST',\n body: JSON.stringify({\n fileUris: [documentId],\n }),\n })\n .then((res) => res.json())\n .then((res) => res?.response?.data?.items)\n }\n\n if (items.length) {\n //smartling will fuzzy match job names. We need to be precise.\n const correctJob = items\n .filter((item: {jobStatus: string}) => item.jobStatus !== 'DELETED')\n .find(\n (item: {jobName: string; referenceNumber: string}) =>\n (item.jobName && item.jobName === documentId) ||\n (item.referenceNumber && item.referenceNumber === documentId),\n )\n\n if (correctJob) {\n return correctJob.translationJobUid\n }\n }\n return ''\n}\n","import {authenticate, getHeaders} from './helpers'\nimport {Secrets} from 'sanity-translations-tab'\nimport {Adapter} from 'sanity-translations-tab'\n\nexport const getLocales: Adapter['getLocales'] = async (secrets: Secrets | null) => {\n if (!secrets?.project || !secrets?.secret || !secrets?.proxy) {\n return []\n }\n const {project, proxy} = secrets\n const url = `https://api.smartling.com/projects-api/v2/projects/${project}`\n const accessToken = await authenticate(secrets)\n return fetch(proxy, {\n method: 'GET',\n headers: getHeaders(url, accessToken),\n })\n .then((res) => res.json())\n .then((res) => res.response.data.targetLocales)\n}\n","import {authenticate, getHeaders, findExistingJob} from './helpers'\nimport {Adapter, Secrets} from 'sanity-translations-tab'\n\ninterface WorkflowProgressItem {\n workflowStepSummaryReportItemList: {\n wordCount: number\n }[]\n}\n\ninterface SmartlingProgressItem {\n targetLocaleId: string\n progress: {\n percentComplete: number\n totalWordCount: number\n }\n workflowProgressReportList: WorkflowProgressItem[]\n}\n\nexport const getTranslationTask: Adapter['getTranslationTask'] = async (\n documentId: string,\n secrets: Secrets | null,\n) => {\n if (!secrets?.project || !secrets?.secret || !secrets?.proxy) {\n return {\n documentId,\n taskId: documentId,\n locales: [],\n }\n }\n\n const {project, proxy} = secrets\n\n const accessToken = await authenticate(secrets)\n const taskId = await findExistingJob(documentId, secrets, accessToken)\n if (!taskId) {\n return {\n documentId,\n taskId: documentId,\n locales: [],\n }\n }\n\n const progressUrl = `https://api.smartling.com/jobs-api/v3/projects/${project}/jobs/${taskId}/progress`\n const smartlingTask = await fetch(proxy, {\n method: 'GET',\n headers: getHeaders(progressUrl, accessToken),\n })\n .then((res) => res.json())\n .then((res) => res.response.data)\n\n let locales = []\n if (smartlingTask && smartlingTask.contentProgressReport) {\n locales = smartlingTask.contentProgressReport.map((item: SmartlingProgressItem) => {\n let progress = item.progress ? item.progress.percentComplete : 0\n if (\n item.workflowProgressReportList &&\n item.workflowProgressReportList.length > 0 &&\n item.progress\n ) {\n //default to the first workflow -- it's likely what is being used\n const progressItem = item.workflowProgressReportList[0]\n //this is a list of the various steps in the workflow\n if (\n progressItem.workflowStepSummaryReportItemList &&\n progressItem.workflowStepSummaryReportItemList.length > 1\n ) {\n //get the last step in the workflow -- usually \"published\"\n const lastStep = progressItem.workflowStepSummaryReportItemList.at(-1)\n //get the percentage of how many words have reached the last step\n if (lastStep && lastStep.wordCount >= 0) {\n progress = Math.floor((lastStep.wordCount / item.progress.totalWordCount) * 100) ?? 0\n }\n }\n }\n return {\n localeId: item.targetLocaleId,\n progress,\n }\n })\n }\n\n return {\n documentId,\n locales,\n //since our download is tied to document id for smartling, keep track of it as a task\n taskId: documentId,\n linkToVendorTask: `https://dashboard.smartling.com/app/projects/${project}/account-jobs/${project}:${taskId}`,\n }\n}\n","import {authenticate, getHeaders, findExistingJob} from './helpers'\nimport {Adapter, Secrets, SerializedDocument} from 'sanity-translations-tab'\nimport {getTranslationTask} from './getTranslationTask'\nimport {Buffer} from 'buffer'\n\nconst createJob = (\n jobName: string,\n secrets: Secrets,\n localeIds: string[],\n accessToken: string,\n documentId: string,\n) => {\n const {project, proxy} = secrets\n if (!project || !proxy) {\n throw new Error(\n 'The Smartling adapter requires a Smartling project identifier and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n\n const url = `https://api.smartling.com/jobs-api/v3/projects/${project}/jobs`\n return fetch(proxy, {\n method: 'POST',\n headers: {\n ...getHeaders(url, accessToken),\n 'content-type': 'application/json',\n },\n body: JSON.stringify({\n jobName,\n targetLocaleIds: localeIds,\n referenceNumber: documentId,\n }),\n })\n .then((res) => res.json())\n .then((res) => res.response.data.translationJobUid)\n}\n\n/* we're using batches here because it eliminates some\n * new string authorization issues for updating existing jobs,\n * and is able to be used for new bulk\n * job functionality.\n */\n\nconst createJobBatch = (\n jobId: string,\n secrets: Secrets,\n documentId: string,\n accessToken: string,\n localeIds: string[],\n workflowUid?: string,\n //eslint-disable-next-line max-params\n) => {\n const {project, proxy} = secrets\n if (!project || !proxy) {\n throw new Error(\n 'The Smartling adapter requires a Smartling project identifier and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n const url = `https://api.smartling.com/job-batches-api/v2/projects/${project}/batches`\n const reqBody: {\n authorize: boolean\n translationJobUid: string\n fileUris: string[]\n localeWorkflows?: {targetLocaleId: string; workflowUid: string}[]\n } = {\n authorize: true,\n translationJobUid: jobId,\n fileUris: [documentId],\n }\n\n if (workflowUid) {\n reqBody.localeWorkflows = localeIds.map((l) => ({\n targetLocaleId: l,\n workflowUid,\n }))\n }\n\n return fetch(proxy, {\n method: 'POST',\n headers: {\n ...getHeaders(url, accessToken),\n 'content-type': 'application/json',\n },\n body: JSON.stringify(reqBody),\n })\n .then((res) => res.json())\n .then((res) => res.response.data.batchUid)\n}\n\nconst uploadFileToBatch = (\n batchUid: string,\n documentId: string,\n document: SerializedDocument,\n secrets: Secrets,\n localeIds: string[],\n accessToken: string,\n callbackUrl?: (serializedDocument: SerializedDocument) => string,\n //eslint-disable-next-line max-params\n) => {\n const {project, proxy} = secrets\n if (!project || !proxy) {\n throw new Error(\n 'The Smartling adapter requires a Smartling project identifier and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n const url = `https://api.smartling.com/job-batches-api/v2/projects/${project}/batches/${batchUid}/file`\n const formData = new FormData()\n formData.append('fileUri', documentId)\n formData.append('fileType', 'html')\n const htmlBuffer = Buffer.from(document.content, 'utf-8')\n formData.append('file', new Blob([htmlBuffer]), `${document.name}.html`)\n localeIds.forEach((localeId) => formData.append('localeIdsToAuthorize[]', localeId))\n\n if (callbackUrl && typeof callbackUrl === 'function') {\n formData.append('callbackUrl', callbackUrl(document))\n }\n\n return fetch(proxy, {\n method: 'POST',\n headers: getHeaders(url, accessToken),\n body: formData,\n }).then((res) => res.json())\n}\n\nexport const createTask: Adapter['createTask'] = async (\n documentId: string,\n document: SerializedDocument,\n localeIds: string[],\n secrets: Secrets | null,\n workflowUid?: string,\n callbackUrl?: (serializedDocument: SerializedDocument) => string,\n // eslint-disable-next-line max-params\n) => {\n if (!secrets?.project || !secrets?.secret || !secrets?.proxy) {\n throw new Error(\n 'The Smartling adapter requires a project ID, a secret key, and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n\n const accessToken = await authenticate(secrets)\n\n let taskId = await findExistingJob(document.name, secrets, accessToken)\n if (!taskId) {\n taskId = await createJob(document.name, secrets, localeIds, accessToken, documentId)\n }\n\n const batchUid = await createJobBatch(\n taskId,\n secrets,\n documentId,\n accessToken,\n localeIds,\n workflowUid,\n )\n const uploadFileRes = await uploadFileToBatch(\n batchUid,\n documentId,\n document,\n secrets,\n localeIds,\n accessToken,\n callbackUrl,\n )\n //eslint-disable-next-line no-console -- for developer debugging\n console.info('Upload status from Smartling: ', uploadFileRes)\n\n return getTranslationTask(documentId, secrets)\n}\n","import {authenticate, getHeaders} from './helpers'\nimport {Adapter, Secrets} from 'sanity-translations-tab'\n\nexport const getTranslation: Adapter['getTranslation'] = async (\n taskId: string,\n localeId: string,\n secrets: Secrets | null,\n) => {\n if (!secrets?.project || !secrets?.secret || !secrets?.proxy) {\n throw new Error(\n 'The Smartling adapter requires a project ID, a secret key, and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n\n const {project, proxy} = secrets\n\n const url = `https://api.smartling.com/files-api/v2/projects/${project}/locales/${localeId}/file?fileUri=${taskId}&retrievalType=pending`\n const accessToken = await authenticate(secrets)\n const translatedHTML = await fetch(proxy, {\n method: 'GET',\n headers: getHeaders(url, accessToken),\n })\n .then((res) => res.json())\n .then((res) => {\n if (res.body) {\n return res.body\n } else if (res.response.errors) {\n const errMsg =\n res.response.errors[0]?.message || 'Error retrieving translation from Smartling'\n throw new Error(errMsg)\n }\n return ''\n })\n\n return translatedHTML\n}\n","import {Adapter} from 'sanity-translations-tab'\nimport {getLocales} from './getLocales'\nimport {getTranslationTask} from './getTranslationTask'\nimport {createTask} from './createTask'\nimport {getTranslation} from './getTranslation'\n\nexport const SmartlingAdapter: Adapter = {\n getLocales,\n getTranslationTask,\n createTask,\n getTranslation,\n}\n","import {\n TranslationsTab,\n baseDocumentLevelConfig,\n legacyDocumentLevelConfig as baseLegacyDocumentLevelConfig,\n baseFieldLevelConfig,\n findLatestDraft,\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n legacyDocumentLevelPatch,\n documentLevelPatch,\n fieldLevelPatch,\n TranslationFunctionContext,\n TranslationsTabConfigOptions,\n} from 'sanity-translations-tab'\nimport {SmartlingAdapter} from './adapter'\n\nconst defaultDocumentLevelConfig: TranslationsTabConfigOptions = {\n ...baseDocumentLevelConfig,\n adapter: SmartlingAdapter,\n}\n\nconst legacyDocumentLevelConfig: TranslationsTabConfigOptions = {\n ...baseLegacyDocumentLevelConfig,\n adapter: SmartlingAdapter,\n}\n\nconst defaultFieldLevelConfig: TranslationsTabConfigOptions = {\n ...baseFieldLevelConfig,\n adapter: SmartlingAdapter,\n}\n\nexport {\n TranslationsTab,\n findLatestDraft,\n legacyDocumentLevelPatch,\n documentLevelPatch,\n fieldLevelPatch,\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n SmartlingAdapter,\n legacyDocumentLevelConfig,\n defaultDocumentLevelConfig,\n defaultFieldLevelConfig,\n}\n\nexport type {TranslationFunctionContext, TranslationsTabConfigOptions}\n"],"names":["authenticate","secrets","url","headers","secret","proxy","Error","fetch","method","body","JSON","stringify","then","res","json","response","data","accessToken","getHeaders","Authorization","concat","findExistingJob","documentId","project","items","_a","_b","length","refUrl","fileUris","correctJob","filter","item","jobStatus","find","jobName","referenceNumber","translationJobUid","getLocales","targetLocales","getTranslationTask","taskId","locales","progressUrl","smartlingTask","contentProgressReport","map","progress","percentComplete","workflowProgressReportList","progressItem","workflowStepSummaryReportItemList","lastStep","at","wordCount","Math","floor","totalWordCount","localeId","targetLocaleId","linkToVendorTask","createJob","localeIds","targetLocaleIds","createJobBatch","jobId","workflowUid","reqBody","authorize","localeWorkflows","l","batchUid","uploadFileToBatch","document","callbackUrl","formData","FormData","append","htmlBuffer","Buffer","from","content","Blob","name","forEach","createTask","uploadFileRes","console","info","getTranslation","translatedHTML","errors","errMsg","message","SmartlingAdapter","defaultDocumentLevelConfig","baseDocumentLevelConfig","adapter","legacyDocumentLevelConfig","baseLegacyDocumentLevelConfig","defaultFieldLevelConfig","baseFieldLevelConfig"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/adapter/helpers.ts","../src/adapter/getLocales.ts","../src/adapter/getTranslationTask.ts","../src/adapter/createTask.ts","../src/adapter/getTranslation.ts","../src/adapter/index.ts","../src/index.ts"],"sourcesContent":["import {Secrets} from 'sanity-translations-tab'\n\ninterface Headers {\n [key: string]: string\n}\n\nexport const authenticate = (secrets: Secrets): Promise<string> => {\n const url = 'https://api.smartling.com/auth-api/v2/authenticate'\n const headers = {\n 'content-type': 'application/json',\n 'X-URL': url,\n }\n const {secret, proxy} = secrets\n if (!secret || !proxy) {\n throw new Error(\n 'The Smartling adapter requires a secret key and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n return fetch(proxy, {\n headers,\n method: 'POST',\n body: JSON.stringify(secret),\n })\n .then((res) => res.json())\n .then((res) => res.response.data.accessToken)\n}\n\nexport const getHeaders = (url: string, accessToken: string): Headers => ({\n Authorization: `Bearer ${accessToken}`,\n 'X-URL': url,\n})\n\nexport const findExistingJob = async (\n documentId: string,\n secrets: Secrets,\n accessToken: string,\n): Promise<string> => {\n const {project, proxy} = secrets\n if (!project || !proxy) {\n throw new Error(\n 'The Smartling adapter requires a Smartling project identifier and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n const url = `https://api.smartling.com/jobs-api/v3/projects/${project}/jobs?jobName=${documentId}`\n //first, try fetching from name resolution\n let items = await fetch(proxy, {\n headers: getHeaders(url, accessToken),\n })\n .then((res) => res.json())\n .then((res) => res?.response?.data?.items)\n\n if (!items || !items.length) {\n //if that fails, try fetching by fileUri and check the referenceNumber\n const refUrl = `https://api.smartling.com/jobs-api/v3/projects/${project}/jobs/search`\n items = await fetch(proxy, {\n headers: {\n ...getHeaders(refUrl, accessToken),\n 'content-type': 'application/json',\n },\n method: 'POST',\n body: JSON.stringify({\n fileUris: [documentId],\n }),\n })\n .then((res) => res.json())\n .then((res) => res?.response?.data?.items)\n }\n\n if (items.length) {\n //smartling will fuzzy match job names. We need to be precise.\n const correctJob = items\n .filter((item: {jobStatus: string}) => item.jobStatus !== 'DELETED')\n .find(\n (item: {jobName: string; referenceNumber: string}) =>\n (item.jobName && item.jobName === documentId) ||\n (item.referenceNumber && item.referenceNumber === documentId),\n )\n\n if (correctJob) {\n return correctJob.translationJobUid\n }\n }\n return ''\n}\n","import {authenticate, getHeaders} from './helpers'\nimport {Secrets} from 'sanity-translations-tab'\nimport {Adapter} from 'sanity-translations-tab'\n\nexport const getLocales: Adapter['getLocales'] = async (secrets: Secrets | null) => {\n if (!secrets?.project || !secrets?.secret || !secrets?.proxy) {\n return []\n }\n const {project, proxy} = secrets\n const url = `https://api.smartling.com/projects-api/v2/projects/${project}`\n const accessToken = await authenticate(secrets)\n return fetch(proxy, {\n method: 'GET',\n headers: getHeaders(url, accessToken),\n })\n .then((res) => res.json())\n .then((res) => res.response.data.targetLocales)\n}\n","import {authenticate, getHeaders, findExistingJob} from './helpers'\nimport {Adapter, Secrets} from 'sanity-translations-tab'\n\ninterface WorkflowProgressItem {\n workflowStepSummaryReportItemList: {\n wordCount: number\n }[]\n}\n\ninterface SmartlingProgressItem {\n targetLocaleId: string\n progress: {\n percentComplete: number\n totalWordCount: number\n }\n workflowProgressReportList: WorkflowProgressItem[]\n}\n\nexport const getTranslationTask: Adapter['getTranslationTask'] = async (\n documentId: string,\n secrets: Secrets | null,\n) => {\n if (!secrets?.project || !secrets?.secret || !secrets?.proxy) {\n return {\n documentId,\n taskId: documentId,\n locales: [],\n }\n }\n\n const {project, proxy} = secrets\n\n const accessToken = await authenticate(secrets)\n const taskId = await findExistingJob(documentId, secrets, accessToken)\n if (!taskId) {\n return {\n documentId,\n taskId: documentId,\n locales: [],\n }\n }\n\n const progressUrl = `https://api.smartling.com/jobs-api/v3/projects/${project}/jobs/${taskId}/progress`\n const smartlingTask = await fetch(proxy, {\n method: 'GET',\n headers: getHeaders(progressUrl, accessToken),\n })\n .then((res) => res.json())\n .then((res) => res.response.data)\n\n let locales = []\n if (smartlingTask && smartlingTask.contentProgressReport) {\n locales = smartlingTask.contentProgressReport.map((item: SmartlingProgressItem) => {\n let progress = item.progress ? item.progress.percentComplete : 0\n if (\n item.workflowProgressReportList &&\n item.workflowProgressReportList.length > 0 &&\n item.progress\n ) {\n //default to the first workflow -- it's likely what is being used\n const progressItem = item.workflowProgressReportList[0]\n //this is a list of the various steps in the workflow\n if (\n progressItem.workflowStepSummaryReportItemList &&\n progressItem.workflowStepSummaryReportItemList.length > 1\n ) {\n //get the last step in the workflow -- usually \"published\"\n const lastStep = progressItem.workflowStepSummaryReportItemList.at(-1)\n //get the percentage of how many words have reached the last step\n if (lastStep && lastStep.wordCount >= 0) {\n progress = Math.floor((lastStep.wordCount / item.progress.totalWordCount) * 100) ?? 0\n }\n }\n }\n return {\n localeId: item.targetLocaleId,\n progress,\n }\n })\n }\n\n return {\n documentId,\n locales,\n //since our download is tied to document id for smartling, keep track of it as a task\n taskId: documentId,\n linkToVendorTask: `https://dashboard.smartling.com/app/projects/${project}/account-jobs/${project}:${taskId}`,\n }\n}\n","import {authenticate, getHeaders, findExistingJob} from './helpers'\nimport {Adapter, Secrets, SerializedDocument} from 'sanity-translations-tab'\nimport {getTranslationTask} from './getTranslationTask'\nimport {Buffer} from 'buffer'\n\nconst createJob = (\n jobName: string,\n secrets: Secrets,\n localeIds: string[],\n accessToken: string,\n documentId: string,\n) => {\n const {project, proxy} = secrets\n if (!project || !proxy) {\n throw new Error(\n 'The Smartling adapter requires a Smartling project identifier and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n\n const url = `https://api.smartling.com/jobs-api/v3/projects/${project}/jobs`\n return fetch(proxy, {\n method: 'POST',\n headers: {\n ...getHeaders(url, accessToken),\n 'content-type': 'application/json',\n },\n body: JSON.stringify({\n jobName,\n targetLocaleIds: localeIds,\n referenceNumber: documentId,\n }),\n })\n .then((res) => res.json())\n .then((res) => res.response.data.translationJobUid)\n}\n\n/* we're using batches here because it eliminates some\n * new string authorization issues for updating existing jobs,\n * and is able to be used for new bulk\n * job functionality.\n */\n\nconst createJobBatch = (\n jobId: string,\n secrets: Secrets,\n documentId: string,\n accessToken: string,\n localeIds: string[],\n workflowUid?: string,\n //eslint-disable-next-line max-params\n) => {\n const {project, proxy} = secrets\n if (!project || !proxy) {\n throw new Error(\n 'The Smartling adapter requires a Smartling project identifier and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n const url = `https://api.smartling.com/job-batches-api/v2/projects/${project}/batches`\n const reqBody: {\n authorize: boolean\n translationJobUid: string\n fileUris: string[]\n localeWorkflows?: {targetLocaleId: string; workflowUid: string}[]\n } = {\n authorize: true,\n translationJobUid: jobId,\n fileUris: [documentId],\n }\n\n if (workflowUid) {\n reqBody.localeWorkflows = localeIds.map((l) => ({\n targetLocaleId: l,\n workflowUid,\n }))\n }\n\n return fetch(proxy, {\n method: 'POST',\n headers: {\n ...getHeaders(url, accessToken),\n 'content-type': 'application/json',\n },\n body: JSON.stringify(reqBody),\n })\n .then((res) => res.json())\n .then((res) => res.response.data.batchUid)\n}\n\nconst uploadFileToBatch = (\n batchUid: string,\n documentId: string,\n document: SerializedDocument,\n secrets: Secrets,\n localeIds: string[],\n accessToken: string,\n callbackUrl?: string,\n //eslint-disable-next-line max-params\n) => {\n const {project, proxy} = secrets\n if (!project || !proxy) {\n throw new Error(\n 'The Smartling adapter requires a Smartling project identifier and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n const url = `https://api.smartling.com/job-batches-api/v2/projects/${project}/batches/${batchUid}/file`\n const formData = new FormData()\n formData.append('fileUri', documentId)\n formData.append('fileType', 'html')\n const htmlBuffer = Buffer.from(document.content, 'utf-8')\n formData.append('file', new Blob([htmlBuffer]), `${document.name}.html`)\n localeIds.forEach((localeId) => formData.append('localeIdsToAuthorize[]', localeId))\n if (callbackUrl) {\n formData.append('callbackUrl', callbackUrl)\n }\n\n return fetch(proxy, {\n method: 'POST',\n headers: getHeaders(url, accessToken),\n body: formData,\n }).then((res) => res.json())\n}\n\nexport const createTask: Adapter['createTask'] = async (\n documentId: string,\n document: SerializedDocument,\n localeIds: string[],\n secrets: Secrets | null,\n workflowUid?: string,\n callbackUrl?: string,\n // eslint-disable-next-line max-params\n) => {\n if (!secrets?.project || !secrets?.secret || !secrets?.proxy) {\n throw new Error(\n 'The Smartling adapter requires a project ID, a secret key, and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n\n const accessToken = await authenticate(secrets)\n\n let taskId = await findExistingJob(document.name, secrets, accessToken)\n if (!taskId) {\n taskId = await createJob(document.name, secrets, localeIds, accessToken, documentId)\n }\n\n const batchUid = await createJobBatch(\n taskId,\n secrets,\n documentId,\n accessToken,\n localeIds,\n workflowUid,\n )\n const uploadFileRes = await uploadFileToBatch(\n batchUid,\n documentId,\n document,\n secrets,\n localeIds,\n accessToken,\n callbackUrl,\n )\n //eslint-disable-next-line no-console -- for developer debugging\n console.info('Upload status from Smartling: ', uploadFileRes)\n\n return getTranslationTask(documentId, secrets)\n}\n","import {authenticate, getHeaders} from './helpers'\nimport {Adapter, Secrets} from 'sanity-translations-tab'\n\nexport const getTranslation: Adapter['getTranslation'] = async (\n taskId: string,\n localeId: string,\n secrets: Secrets | null,\n) => {\n if (!secrets?.project || !secrets?.secret || !secrets?.proxy) {\n throw new Error(\n 'The Smartling adapter requires a project ID, a secret key, and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n\n const {project, proxy} = secrets\n\n const url = `https://api.smartling.com/files-api/v2/projects/${project}/locales/${localeId}/file?fileUri=${taskId}&retrievalType=pending`\n const accessToken = await authenticate(secrets)\n const translatedHTML = await fetch(proxy, {\n method: 'GET',\n headers: getHeaders(url, accessToken),\n })\n .then((res) => res.json())\n .then((res) => {\n if (res.body) {\n return res.body\n } else if (res.response.errors) {\n const errMsg =\n res.response.errors[0]?.message || 'Error retrieving translation from Smartling'\n throw new Error(errMsg)\n }\n return ''\n })\n\n return translatedHTML\n}\n","import {Adapter} from 'sanity-translations-tab'\nimport {getLocales} from './getLocales'\nimport {getTranslationTask} from './getTranslationTask'\nimport {createTask} from './createTask'\nimport {getTranslation} from './getTranslation'\n\nexport const SmartlingAdapter: Adapter = {\n getLocales,\n getTranslationTask,\n createTask,\n getTranslation,\n}\n","import {\n TranslationsTab,\n baseDocumentLevelConfig,\n legacyDocumentLevelConfig as baseLegacyDocumentLevelConfig,\n baseFieldLevelConfig,\n findLatestDraft,\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n legacyDocumentLevelPatch,\n documentLevelPatch,\n fieldLevelPatch,\n TranslationFunctionContext,\n TranslationsTabConfigOptions,\n} from 'sanity-translations-tab'\nimport {SmartlingAdapter} from './adapter'\n\nconst defaultDocumentLevelConfig: TranslationsTabConfigOptions = {\n ...baseDocumentLevelConfig,\n adapter: SmartlingAdapter,\n}\n\nconst legacyDocumentLevelConfig: TranslationsTabConfigOptions = {\n ...baseLegacyDocumentLevelConfig,\n adapter: SmartlingAdapter,\n}\n\nconst defaultFieldLevelConfig: TranslationsTabConfigOptions = {\n ...baseFieldLevelConfig,\n adapter: SmartlingAdapter,\n}\n\nexport {\n TranslationsTab,\n findLatestDraft,\n legacyDocumentLevelPatch,\n documentLevelPatch,\n fieldLevelPatch,\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n SmartlingAdapter,\n legacyDocumentLevelConfig,\n defaultDocumentLevelConfig,\n defaultFieldLevelConfig,\n}\n\nexport type {TranslationFunctionContext, TranslationsTabConfigOptions}\n"],"names":["authenticate","secrets","url","headers","secret","proxy","Error","fetch","method","body","JSON","stringify","then","res","json","response","data","accessToken","getHeaders","Authorization","concat","findExistingJob","documentId","project","items","_a","_b","length","refUrl","fileUris","correctJob","filter","item","jobStatus","find","jobName","referenceNumber","translationJobUid","getLocales","targetLocales","getTranslationTask","taskId","locales","progressUrl","smartlingTask","contentProgressReport","map","progress","percentComplete","workflowProgressReportList","progressItem","workflowStepSummaryReportItemList","lastStep","at","wordCount","Math","floor","totalWordCount","localeId","targetLocaleId","linkToVendorTask","createJob","localeIds","targetLocaleIds","createJobBatch","jobId","workflowUid","reqBody","authorize","localeWorkflows","l","batchUid","uploadFileToBatch","document","callbackUrl","formData","FormData","append","htmlBuffer","Buffer","from","content","Blob","name","forEach","createTask","uploadFileRes","console","info","getTranslation","translatedHTML","errors","errMsg","message","SmartlingAdapter","defaultDocumentLevelConfig","baseDocumentLevelConfig","adapter","legacyDocumentLevelConfig","baseLegacyDocumentLevelConfig","defaultFieldLevelConfig","baseFieldLevelConfig"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -202,8 +202,8 @@ const uploadFileToBatch = (batchUid, documentId, document, secrets, localeIds, a
|
|
|
202
202
|
const htmlBuffer = buffer.Buffer.from(document.content, "utf-8");
|
|
203
203
|
formData.append("file", new Blob([htmlBuffer]), "".concat(document.name, ".html"));
|
|
204
204
|
localeIds.forEach(localeId => formData.append("localeIdsToAuthorize[]", localeId));
|
|
205
|
-
if (callbackUrl
|
|
206
|
-
formData.append("callbackUrl", callbackUrl
|
|
205
|
+
if (callbackUrl) {
|
|
206
|
+
formData.append("callbackUrl", callbackUrl);
|
|
207
207
|
}
|
|
208
208
|
return fetch(proxy, {
|
|
209
209
|
method: "POST",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/adapter/helpers.ts","../src/adapter/getLocales.ts","../src/adapter/getTranslationTask.ts","../src/adapter/createTask.ts","../src/adapter/getTranslation.ts","../src/adapter/index.ts","../src/index.ts"],"sourcesContent":["import {Secrets} from 'sanity-translations-tab'\n\ninterface Headers {\n [key: string]: string\n}\n\nexport const authenticate = (secrets: Secrets): Promise<string> => {\n const url = 'https://api.smartling.com/auth-api/v2/authenticate'\n const headers = {\n 'content-type': 'application/json',\n 'X-URL': url,\n }\n const {secret, proxy} = secrets\n if (!secret || !proxy) {\n throw new Error(\n 'The Smartling adapter requires a secret key and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n return fetch(proxy, {\n headers,\n method: 'POST',\n body: JSON.stringify(secret),\n })\n .then((res) => res.json())\n .then((res) => res.response.data.accessToken)\n}\n\nexport const getHeaders = (url: string, accessToken: string): Headers => ({\n Authorization: `Bearer ${accessToken}`,\n 'X-URL': url,\n})\n\nexport const findExistingJob = async (\n documentId: string,\n secrets: Secrets,\n accessToken: string,\n): Promise<string> => {\n const {project, proxy} = secrets\n if (!project || !proxy) {\n throw new Error(\n 'The Smartling adapter requires a Smartling project identifier and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n const url = `https://api.smartling.com/jobs-api/v3/projects/${project}/jobs?jobName=${documentId}`\n //first, try fetching from name resolution\n let items = await fetch(proxy, {\n headers: getHeaders(url, accessToken),\n })\n .then((res) => res.json())\n .then((res) => res?.response?.data?.items)\n\n if (!items || !items.length) {\n //if that fails, try fetching by fileUri and check the referenceNumber\n const refUrl = `https://api.smartling.com/jobs-api/v3/projects/${project}/jobs/search`\n items = await fetch(proxy, {\n headers: {\n ...getHeaders(refUrl, accessToken),\n 'content-type': 'application/json',\n },\n method: 'POST',\n body: JSON.stringify({\n fileUris: [documentId],\n }),\n })\n .then((res) => res.json())\n .then((res) => res?.response?.data?.items)\n }\n\n if (items.length) {\n //smartling will fuzzy match job names. We need to be precise.\n const correctJob = items\n .filter((item: {jobStatus: string}) => item.jobStatus !== 'DELETED')\n .find(\n (item: {jobName: string; referenceNumber: string}) =>\n (item.jobName && item.jobName === documentId) ||\n (item.referenceNumber && item.referenceNumber === documentId),\n )\n\n if (correctJob) {\n return correctJob.translationJobUid\n }\n }\n return ''\n}\n","import {authenticate, getHeaders} from './helpers'\nimport {Secrets} from 'sanity-translations-tab'\nimport {Adapter} from 'sanity-translations-tab'\n\nexport const getLocales: Adapter['getLocales'] = async (secrets: Secrets | null) => {\n if (!secrets?.project || !secrets?.secret || !secrets?.proxy) {\n return []\n }\n const {project, proxy} = secrets\n const url = `https://api.smartling.com/projects-api/v2/projects/${project}`\n const accessToken = await authenticate(secrets)\n return fetch(proxy, {\n method: 'GET',\n headers: getHeaders(url, accessToken),\n })\n .then((res) => res.json())\n .then((res) => res.response.data.targetLocales)\n}\n","import {authenticate, getHeaders, findExistingJob} from './helpers'\nimport {Adapter, Secrets} from 'sanity-translations-tab'\n\ninterface WorkflowProgressItem {\n workflowStepSummaryReportItemList: {\n wordCount: number\n }[]\n}\n\ninterface SmartlingProgressItem {\n targetLocaleId: string\n progress: {\n percentComplete: number\n totalWordCount: number\n }\n workflowProgressReportList: WorkflowProgressItem[]\n}\n\nexport const getTranslationTask: Adapter['getTranslationTask'] = async (\n documentId: string,\n secrets: Secrets | null,\n) => {\n if (!secrets?.project || !secrets?.secret || !secrets?.proxy) {\n return {\n documentId,\n taskId: documentId,\n locales: [],\n }\n }\n\n const {project, proxy} = secrets\n\n const accessToken = await authenticate(secrets)\n const taskId = await findExistingJob(documentId, secrets, accessToken)\n if (!taskId) {\n return {\n documentId,\n taskId: documentId,\n locales: [],\n }\n }\n\n const progressUrl = `https://api.smartling.com/jobs-api/v3/projects/${project}/jobs/${taskId}/progress`\n const smartlingTask = await fetch(proxy, {\n method: 'GET',\n headers: getHeaders(progressUrl, accessToken),\n })\n .then((res) => res.json())\n .then((res) => res.response.data)\n\n let locales = []\n if (smartlingTask && smartlingTask.contentProgressReport) {\n locales = smartlingTask.contentProgressReport.map((item: SmartlingProgressItem) => {\n let progress = item.progress ? item.progress.percentComplete : 0\n if (\n item.workflowProgressReportList &&\n item.workflowProgressReportList.length > 0 &&\n item.progress\n ) {\n //default to the first workflow -- it's likely what is being used\n const progressItem = item.workflowProgressReportList[0]\n //this is a list of the various steps in the workflow\n if (\n progressItem.workflowStepSummaryReportItemList &&\n progressItem.workflowStepSummaryReportItemList.length > 1\n ) {\n //get the last step in the workflow -- usually \"published\"\n const lastStep = progressItem.workflowStepSummaryReportItemList.at(-1)\n //get the percentage of how many words have reached the last step\n if (lastStep && lastStep.wordCount >= 0) {\n progress = Math.floor((lastStep.wordCount / item.progress.totalWordCount) * 100) ?? 0\n }\n }\n }\n return {\n localeId: item.targetLocaleId,\n progress,\n }\n })\n }\n\n return {\n documentId,\n locales,\n //since our download is tied to document id for smartling, keep track of it as a task\n taskId: documentId,\n linkToVendorTask: `https://dashboard.smartling.com/app/projects/${project}/account-jobs/${project}:${taskId}`,\n }\n}\n","import {authenticate, getHeaders, findExistingJob} from './helpers'\nimport {Adapter, Secrets, SerializedDocument} from 'sanity-translations-tab'\nimport {getTranslationTask} from './getTranslationTask'\nimport {Buffer} from 'buffer'\n\nconst createJob = (\n jobName: string,\n secrets: Secrets,\n localeIds: string[],\n accessToken: string,\n documentId: string,\n) => {\n const {project, proxy} = secrets\n if (!project || !proxy) {\n throw new Error(\n 'The Smartling adapter requires a Smartling project identifier and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n\n const url = `https://api.smartling.com/jobs-api/v3/projects/${project}/jobs`\n return fetch(proxy, {\n method: 'POST',\n headers: {\n ...getHeaders(url, accessToken),\n 'content-type': 'application/json',\n },\n body: JSON.stringify({\n jobName,\n targetLocaleIds: localeIds,\n referenceNumber: documentId,\n }),\n })\n .then((res) => res.json())\n .then((res) => res.response.data.translationJobUid)\n}\n\n/* we're using batches here because it eliminates some\n * new string authorization issues for updating existing jobs,\n * and is able to be used for new bulk\n * job functionality.\n */\n\nconst createJobBatch = (\n jobId: string,\n secrets: Secrets,\n documentId: string,\n accessToken: string,\n localeIds: string[],\n workflowUid?: string,\n //eslint-disable-next-line max-params\n) => {\n const {project, proxy} = secrets\n if (!project || !proxy) {\n throw new Error(\n 'The Smartling adapter requires a Smartling project identifier and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n const url = `https://api.smartling.com/job-batches-api/v2/projects/${project}/batches`\n const reqBody: {\n authorize: boolean\n translationJobUid: string\n fileUris: string[]\n localeWorkflows?: {targetLocaleId: string; workflowUid: string}[]\n } = {\n authorize: true,\n translationJobUid: jobId,\n fileUris: [documentId],\n }\n\n if (workflowUid) {\n reqBody.localeWorkflows = localeIds.map((l) => ({\n targetLocaleId: l,\n workflowUid,\n }))\n }\n\n return fetch(proxy, {\n method: 'POST',\n headers: {\n ...getHeaders(url, accessToken),\n 'content-type': 'application/json',\n },\n body: JSON.stringify(reqBody),\n })\n .then((res) => res.json())\n .then((res) => res.response.data.batchUid)\n}\n\nconst uploadFileToBatch = (\n batchUid: string,\n documentId: string,\n document: SerializedDocument,\n secrets: Secrets,\n localeIds: string[],\n accessToken: string,\n callbackUrl?: (serializedDocument: SerializedDocument) => string,\n //eslint-disable-next-line max-params\n) => {\n const {project, proxy} = secrets\n if (!project || !proxy) {\n throw new Error(\n 'The Smartling adapter requires a Smartling project identifier and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n const url = `https://api.smartling.com/job-batches-api/v2/projects/${project}/batches/${batchUid}/file`\n const formData = new FormData()\n formData.append('fileUri', documentId)\n formData.append('fileType', 'html')\n const htmlBuffer = Buffer.from(document.content, 'utf-8')\n formData.append('file', new Blob([htmlBuffer]), `${document.name}.html`)\n localeIds.forEach((localeId) => formData.append('localeIdsToAuthorize[]', localeId))\n\n if (callbackUrl && typeof callbackUrl === 'function') {\n formData.append('callbackUrl', callbackUrl(document))\n }\n\n return fetch(proxy, {\n method: 'POST',\n headers: getHeaders(url, accessToken),\n body: formData,\n }).then((res) => res.json())\n}\n\nexport const createTask: Adapter['createTask'] = async (\n documentId: string,\n document: SerializedDocument,\n localeIds: string[],\n secrets: Secrets | null,\n workflowUid?: string,\n callbackUrl?: (serializedDocument: SerializedDocument) => string,\n // eslint-disable-next-line max-params\n) => {\n if (!secrets?.project || !secrets?.secret || !secrets?.proxy) {\n throw new Error(\n 'The Smartling adapter requires a project ID, a secret key, and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n\n const accessToken = await authenticate(secrets)\n\n let taskId = await findExistingJob(document.name, secrets, accessToken)\n if (!taskId) {\n taskId = await createJob(document.name, secrets, localeIds, accessToken, documentId)\n }\n\n const batchUid = await createJobBatch(\n taskId,\n secrets,\n documentId,\n accessToken,\n localeIds,\n workflowUid,\n )\n const uploadFileRes = await uploadFileToBatch(\n batchUid,\n documentId,\n document,\n secrets,\n localeIds,\n accessToken,\n callbackUrl,\n )\n //eslint-disable-next-line no-console -- for developer debugging\n console.info('Upload status from Smartling: ', uploadFileRes)\n\n return getTranslationTask(documentId, secrets)\n}\n","import {authenticate, getHeaders} from './helpers'\nimport {Adapter, Secrets} from 'sanity-translations-tab'\n\nexport const getTranslation: Adapter['getTranslation'] = async (\n taskId: string,\n localeId: string,\n secrets: Secrets | null,\n) => {\n if (!secrets?.project || !secrets?.secret || !secrets?.proxy) {\n throw new Error(\n 'The Smartling adapter requires a project ID, a secret key, and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n\n const {project, proxy} = secrets\n\n const url = `https://api.smartling.com/files-api/v2/projects/${project}/locales/${localeId}/file?fileUri=${taskId}&retrievalType=pending`\n const accessToken = await authenticate(secrets)\n const translatedHTML = await fetch(proxy, {\n method: 'GET',\n headers: getHeaders(url, accessToken),\n })\n .then((res) => res.json())\n .then((res) => {\n if (res.body) {\n return res.body\n } else if (res.response.errors) {\n const errMsg =\n res.response.errors[0]?.message || 'Error retrieving translation from Smartling'\n throw new Error(errMsg)\n }\n return ''\n })\n\n return translatedHTML\n}\n","import {Adapter} from 'sanity-translations-tab'\nimport {getLocales} from './getLocales'\nimport {getTranslationTask} from './getTranslationTask'\nimport {createTask} from './createTask'\nimport {getTranslation} from './getTranslation'\n\nexport const SmartlingAdapter: Adapter = {\n getLocales,\n getTranslationTask,\n createTask,\n getTranslation,\n}\n","import {\n TranslationsTab,\n baseDocumentLevelConfig,\n legacyDocumentLevelConfig as baseLegacyDocumentLevelConfig,\n baseFieldLevelConfig,\n findLatestDraft,\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n legacyDocumentLevelPatch,\n documentLevelPatch,\n fieldLevelPatch,\n TranslationFunctionContext,\n TranslationsTabConfigOptions,\n} from 'sanity-translations-tab'\nimport {SmartlingAdapter} from './adapter'\n\nconst defaultDocumentLevelConfig: TranslationsTabConfigOptions = {\n ...baseDocumentLevelConfig,\n adapter: SmartlingAdapter,\n}\n\nconst legacyDocumentLevelConfig: TranslationsTabConfigOptions = {\n ...baseLegacyDocumentLevelConfig,\n adapter: SmartlingAdapter,\n}\n\nconst defaultFieldLevelConfig: TranslationsTabConfigOptions = {\n ...baseFieldLevelConfig,\n adapter: SmartlingAdapter,\n}\n\nexport {\n TranslationsTab,\n findLatestDraft,\n legacyDocumentLevelPatch,\n documentLevelPatch,\n fieldLevelPatch,\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n SmartlingAdapter,\n legacyDocumentLevelConfig,\n defaultDocumentLevelConfig,\n defaultFieldLevelConfig,\n}\n\nexport type {TranslationFunctionContext, TranslationsTabConfigOptions}\n"],"names":["authenticate","secrets","url","headers","secret","proxy","Error","fetch","method","body","JSON","stringify","then","res","json","response","data","accessToken","getHeaders","Authorization","concat","findExistingJob","documentId","project","items","_a","_b","length","refUrl","fileUris","correctJob","filter","item","jobStatus","find","jobName","referenceNumber","translationJobUid","getLocales","targetLocales","getTranslationTask","taskId","locales","progressUrl","smartlingTask","contentProgressReport","map","progress","percentComplete","workflowProgressReportList","progressItem","workflowStepSummaryReportItemList","lastStep","at","wordCount","Math","floor","totalWordCount","localeId","targetLocaleId","linkToVendorTask","createJob","localeIds","targetLocaleIds","createJobBatch","jobId","workflowUid","reqBody","authorize","localeWorkflows","l","batchUid","uploadFileToBatch","document","callbackUrl","formData","FormData","append","htmlBuffer","Buffer","from","content","Blob","name","forEach","createTask","uploadFileRes","console","info","getTranslation","translatedHTML","errors","errMsg","message","SmartlingAdapter","defaultDocumentLevelConfig","baseDocumentLevelConfig","adapter","legacyDocumentLevelConfig","baseLegacyDocumentLevelConfig","defaultFieldLevelConfig","baseFieldLevelConfig"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/adapter/helpers.ts","../src/adapter/getLocales.ts","../src/adapter/getTranslationTask.ts","../src/adapter/createTask.ts","../src/adapter/getTranslation.ts","../src/adapter/index.ts","../src/index.ts"],"sourcesContent":["import {Secrets} from 'sanity-translations-tab'\n\ninterface Headers {\n [key: string]: string\n}\n\nexport const authenticate = (secrets: Secrets): Promise<string> => {\n const url = 'https://api.smartling.com/auth-api/v2/authenticate'\n const headers = {\n 'content-type': 'application/json',\n 'X-URL': url,\n }\n const {secret, proxy} = secrets\n if (!secret || !proxy) {\n throw new Error(\n 'The Smartling adapter requires a secret key and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n return fetch(proxy, {\n headers,\n method: 'POST',\n body: JSON.stringify(secret),\n })\n .then((res) => res.json())\n .then((res) => res.response.data.accessToken)\n}\n\nexport const getHeaders = (url: string, accessToken: string): Headers => ({\n Authorization: `Bearer ${accessToken}`,\n 'X-URL': url,\n})\n\nexport const findExistingJob = async (\n documentId: string,\n secrets: Secrets,\n accessToken: string,\n): Promise<string> => {\n const {project, proxy} = secrets\n if (!project || !proxy) {\n throw new Error(\n 'The Smartling adapter requires a Smartling project identifier and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n const url = `https://api.smartling.com/jobs-api/v3/projects/${project}/jobs?jobName=${documentId}`\n //first, try fetching from name resolution\n let items = await fetch(proxy, {\n headers: getHeaders(url, accessToken),\n })\n .then((res) => res.json())\n .then((res) => res?.response?.data?.items)\n\n if (!items || !items.length) {\n //if that fails, try fetching by fileUri and check the referenceNumber\n const refUrl = `https://api.smartling.com/jobs-api/v3/projects/${project}/jobs/search`\n items = await fetch(proxy, {\n headers: {\n ...getHeaders(refUrl, accessToken),\n 'content-type': 'application/json',\n },\n method: 'POST',\n body: JSON.stringify({\n fileUris: [documentId],\n }),\n })\n .then((res) => res.json())\n .then((res) => res?.response?.data?.items)\n }\n\n if (items.length) {\n //smartling will fuzzy match job names. We need to be precise.\n const correctJob = items\n .filter((item: {jobStatus: string}) => item.jobStatus !== 'DELETED')\n .find(\n (item: {jobName: string; referenceNumber: string}) =>\n (item.jobName && item.jobName === documentId) ||\n (item.referenceNumber && item.referenceNumber === documentId),\n )\n\n if (correctJob) {\n return correctJob.translationJobUid\n }\n }\n return ''\n}\n","import {authenticate, getHeaders} from './helpers'\nimport {Secrets} from 'sanity-translations-tab'\nimport {Adapter} from 'sanity-translations-tab'\n\nexport const getLocales: Adapter['getLocales'] = async (secrets: Secrets | null) => {\n if (!secrets?.project || !secrets?.secret || !secrets?.proxy) {\n return []\n }\n const {project, proxy} = secrets\n const url = `https://api.smartling.com/projects-api/v2/projects/${project}`\n const accessToken = await authenticate(secrets)\n return fetch(proxy, {\n method: 'GET',\n headers: getHeaders(url, accessToken),\n })\n .then((res) => res.json())\n .then((res) => res.response.data.targetLocales)\n}\n","import {authenticate, getHeaders, findExistingJob} from './helpers'\nimport {Adapter, Secrets} from 'sanity-translations-tab'\n\ninterface WorkflowProgressItem {\n workflowStepSummaryReportItemList: {\n wordCount: number\n }[]\n}\n\ninterface SmartlingProgressItem {\n targetLocaleId: string\n progress: {\n percentComplete: number\n totalWordCount: number\n }\n workflowProgressReportList: WorkflowProgressItem[]\n}\n\nexport const getTranslationTask: Adapter['getTranslationTask'] = async (\n documentId: string,\n secrets: Secrets | null,\n) => {\n if (!secrets?.project || !secrets?.secret || !secrets?.proxy) {\n return {\n documentId,\n taskId: documentId,\n locales: [],\n }\n }\n\n const {project, proxy} = secrets\n\n const accessToken = await authenticate(secrets)\n const taskId = await findExistingJob(documentId, secrets, accessToken)\n if (!taskId) {\n return {\n documentId,\n taskId: documentId,\n locales: [],\n }\n }\n\n const progressUrl = `https://api.smartling.com/jobs-api/v3/projects/${project}/jobs/${taskId}/progress`\n const smartlingTask = await fetch(proxy, {\n method: 'GET',\n headers: getHeaders(progressUrl, accessToken),\n })\n .then((res) => res.json())\n .then((res) => res.response.data)\n\n let locales = []\n if (smartlingTask && smartlingTask.contentProgressReport) {\n locales = smartlingTask.contentProgressReport.map((item: SmartlingProgressItem) => {\n let progress = item.progress ? item.progress.percentComplete : 0\n if (\n item.workflowProgressReportList &&\n item.workflowProgressReportList.length > 0 &&\n item.progress\n ) {\n //default to the first workflow -- it's likely what is being used\n const progressItem = item.workflowProgressReportList[0]\n //this is a list of the various steps in the workflow\n if (\n progressItem.workflowStepSummaryReportItemList &&\n progressItem.workflowStepSummaryReportItemList.length > 1\n ) {\n //get the last step in the workflow -- usually \"published\"\n const lastStep = progressItem.workflowStepSummaryReportItemList.at(-1)\n //get the percentage of how many words have reached the last step\n if (lastStep && lastStep.wordCount >= 0) {\n progress = Math.floor((lastStep.wordCount / item.progress.totalWordCount) * 100) ?? 0\n }\n }\n }\n return {\n localeId: item.targetLocaleId,\n progress,\n }\n })\n }\n\n return {\n documentId,\n locales,\n //since our download is tied to document id for smartling, keep track of it as a task\n taskId: documentId,\n linkToVendorTask: `https://dashboard.smartling.com/app/projects/${project}/account-jobs/${project}:${taskId}`,\n }\n}\n","import {authenticate, getHeaders, findExistingJob} from './helpers'\nimport {Adapter, Secrets, SerializedDocument} from 'sanity-translations-tab'\nimport {getTranslationTask} from './getTranslationTask'\nimport {Buffer} from 'buffer'\n\nconst createJob = (\n jobName: string,\n secrets: Secrets,\n localeIds: string[],\n accessToken: string,\n documentId: string,\n) => {\n const {project, proxy} = secrets\n if (!project || !proxy) {\n throw new Error(\n 'The Smartling adapter requires a Smartling project identifier and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n\n const url = `https://api.smartling.com/jobs-api/v3/projects/${project}/jobs`\n return fetch(proxy, {\n method: 'POST',\n headers: {\n ...getHeaders(url, accessToken),\n 'content-type': 'application/json',\n },\n body: JSON.stringify({\n jobName,\n targetLocaleIds: localeIds,\n referenceNumber: documentId,\n }),\n })\n .then((res) => res.json())\n .then((res) => res.response.data.translationJobUid)\n}\n\n/* we're using batches here because it eliminates some\n * new string authorization issues for updating existing jobs,\n * and is able to be used for new bulk\n * job functionality.\n */\n\nconst createJobBatch = (\n jobId: string,\n secrets: Secrets,\n documentId: string,\n accessToken: string,\n localeIds: string[],\n workflowUid?: string,\n //eslint-disable-next-line max-params\n) => {\n const {project, proxy} = secrets\n if (!project || !proxy) {\n throw new Error(\n 'The Smartling adapter requires a Smartling project identifier and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n const url = `https://api.smartling.com/job-batches-api/v2/projects/${project}/batches`\n const reqBody: {\n authorize: boolean\n translationJobUid: string\n fileUris: string[]\n localeWorkflows?: {targetLocaleId: string; workflowUid: string}[]\n } = {\n authorize: true,\n translationJobUid: jobId,\n fileUris: [documentId],\n }\n\n if (workflowUid) {\n reqBody.localeWorkflows = localeIds.map((l) => ({\n targetLocaleId: l,\n workflowUid,\n }))\n }\n\n return fetch(proxy, {\n method: 'POST',\n headers: {\n ...getHeaders(url, accessToken),\n 'content-type': 'application/json',\n },\n body: JSON.stringify(reqBody),\n })\n .then((res) => res.json())\n .then((res) => res.response.data.batchUid)\n}\n\nconst uploadFileToBatch = (\n batchUid: string,\n documentId: string,\n document: SerializedDocument,\n secrets: Secrets,\n localeIds: string[],\n accessToken: string,\n callbackUrl?: string,\n //eslint-disable-next-line max-params\n) => {\n const {project, proxy} = secrets\n if (!project || !proxy) {\n throw new Error(\n 'The Smartling adapter requires a Smartling project identifier and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n const url = `https://api.smartling.com/job-batches-api/v2/projects/${project}/batches/${batchUid}/file`\n const formData = new FormData()\n formData.append('fileUri', documentId)\n formData.append('fileType', 'html')\n const htmlBuffer = Buffer.from(document.content, 'utf-8')\n formData.append('file', new Blob([htmlBuffer]), `${document.name}.html`)\n localeIds.forEach((localeId) => formData.append('localeIdsToAuthorize[]', localeId))\n if (callbackUrl) {\n formData.append('callbackUrl', callbackUrl)\n }\n\n return fetch(proxy, {\n method: 'POST',\n headers: getHeaders(url, accessToken),\n body: formData,\n }).then((res) => res.json())\n}\n\nexport const createTask: Adapter['createTask'] = async (\n documentId: string,\n document: SerializedDocument,\n localeIds: string[],\n secrets: Secrets | null,\n workflowUid?: string,\n callbackUrl?: string,\n // eslint-disable-next-line max-params\n) => {\n if (!secrets?.project || !secrets?.secret || !secrets?.proxy) {\n throw new Error(\n 'The Smartling adapter requires a project ID, a secret key, and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n\n const accessToken = await authenticate(secrets)\n\n let taskId = await findExistingJob(document.name, secrets, accessToken)\n if (!taskId) {\n taskId = await createJob(document.name, secrets, localeIds, accessToken, documentId)\n }\n\n const batchUid = await createJobBatch(\n taskId,\n secrets,\n documentId,\n accessToken,\n localeIds,\n workflowUid,\n )\n const uploadFileRes = await uploadFileToBatch(\n batchUid,\n documentId,\n document,\n secrets,\n localeIds,\n accessToken,\n callbackUrl,\n )\n //eslint-disable-next-line no-console -- for developer debugging\n console.info('Upload status from Smartling: ', uploadFileRes)\n\n return getTranslationTask(documentId, secrets)\n}\n","import {authenticate, getHeaders} from './helpers'\nimport {Adapter, Secrets} from 'sanity-translations-tab'\n\nexport const getTranslation: Adapter['getTranslation'] = async (\n taskId: string,\n localeId: string,\n secrets: Secrets | null,\n) => {\n if (!secrets?.project || !secrets?.secret || !secrets?.proxy) {\n throw new Error(\n 'The Smartling adapter requires a project ID, a secret key, and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.',\n )\n }\n\n const {project, proxy} = secrets\n\n const url = `https://api.smartling.com/files-api/v2/projects/${project}/locales/${localeId}/file?fileUri=${taskId}&retrievalType=pending`\n const accessToken = await authenticate(secrets)\n const translatedHTML = await fetch(proxy, {\n method: 'GET',\n headers: getHeaders(url, accessToken),\n })\n .then((res) => res.json())\n .then((res) => {\n if (res.body) {\n return res.body\n } else if (res.response.errors) {\n const errMsg =\n res.response.errors[0]?.message || 'Error retrieving translation from Smartling'\n throw new Error(errMsg)\n }\n return ''\n })\n\n return translatedHTML\n}\n","import {Adapter} from 'sanity-translations-tab'\nimport {getLocales} from './getLocales'\nimport {getTranslationTask} from './getTranslationTask'\nimport {createTask} from './createTask'\nimport {getTranslation} from './getTranslation'\n\nexport const SmartlingAdapter: Adapter = {\n getLocales,\n getTranslationTask,\n createTask,\n getTranslation,\n}\n","import {\n TranslationsTab,\n baseDocumentLevelConfig,\n legacyDocumentLevelConfig as baseLegacyDocumentLevelConfig,\n baseFieldLevelConfig,\n findLatestDraft,\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n legacyDocumentLevelPatch,\n documentLevelPatch,\n fieldLevelPatch,\n TranslationFunctionContext,\n TranslationsTabConfigOptions,\n} from 'sanity-translations-tab'\nimport {SmartlingAdapter} from './adapter'\n\nconst defaultDocumentLevelConfig: TranslationsTabConfigOptions = {\n ...baseDocumentLevelConfig,\n adapter: SmartlingAdapter,\n}\n\nconst legacyDocumentLevelConfig: TranslationsTabConfigOptions = {\n ...baseLegacyDocumentLevelConfig,\n adapter: SmartlingAdapter,\n}\n\nconst defaultFieldLevelConfig: TranslationsTabConfigOptions = {\n ...baseFieldLevelConfig,\n adapter: SmartlingAdapter,\n}\n\nexport {\n TranslationsTab,\n findLatestDraft,\n legacyDocumentLevelPatch,\n documentLevelPatch,\n fieldLevelPatch,\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n SmartlingAdapter,\n legacyDocumentLevelConfig,\n defaultDocumentLevelConfig,\n defaultFieldLevelConfig,\n}\n\nexport type {TranslationFunctionContext, TranslationsTabConfigOptions}\n"],"names":["authenticate","secrets","url","headers","secret","proxy","Error","fetch","method","body","JSON","stringify","then","res","json","response","data","accessToken","getHeaders","Authorization","concat","findExistingJob","documentId","project","items","_a","_b","length","refUrl","fileUris","correctJob","filter","item","jobStatus","find","jobName","referenceNumber","translationJobUid","getLocales","targetLocales","getTranslationTask","taskId","locales","progressUrl","smartlingTask","contentProgressReport","map","progress","percentComplete","workflowProgressReportList","progressItem","workflowStepSummaryReportItemList","lastStep","at","wordCount","Math","floor","totalWordCount","localeId","targetLocaleId","linkToVendorTask","createJob","localeIds","targetLocaleIds","createJobBatch","jobId","workflowUid","reqBody","authorize","localeWorkflows","l","batchUid","uploadFileToBatch","document","callbackUrl","formData","FormData","append","htmlBuffer","Buffer","from","content","Blob","name","forEach","createTask","uploadFileRes","console","info","getTranslation","translatedHTML","errors","errMsg","message","SmartlingAdapter","defaultDocumentLevelConfig","baseDocumentLevelConfig","adapter","legacyDocumentLevelConfig","baseLegacyDocumentLevelConfig","defaultFieldLevelConfig","baseFieldLevelConfig"],"mappings":";;;;;;;AAMa,MAAAA,YAAA,GAAgBC,OAAsC,IAAA;EACjE,MAAMC,GAAM,GAAA,oDAAA;EACZ,MAAMC,OAAU,GAAA;IACd,cAAgB,EAAA,kBAAA;IAChB,OAAS,EAAAD;EAAA,CACX;EACM,MAAA;IAACE,MAAQ;IAAAC;EAAS,CAAA,GAAAJ,OAAA;EACpB,IAAA,CAACG,MAAU,IAAA,CAACC,KAAO,EAAA;IACrB,MAAM,IAAIC,KAAA,CACR,gJAAA,CACF;EACF;EACA,OAAOC,MAAMF,KAAO,EAAA;IAClBF,OAAA;IACAK,MAAQ,EAAA,MAAA;IACRC,IAAA,EAAMC,IAAK,CAAAC,SAAA,CAAUP,MAAM;EAC5B,CAAA,CAAA,CACEQ,IAAK,CAACC,OAAQA,GAAI,CAAAC,IAAA,CAAA,CAAM,CAAA,CACxBF,KAAMC,GAAA,IAAQA,GAAI,CAAAE,QAAA,CAASC,KAAKC,WAAW,CAAA;AAChD,CAAA;AAEa,MAAAC,UAAA,GAAaA,CAAChB,GAAA,EAAae,WAAkC,MAAA;EACxEE,eAAe,SAAU,CAAAC,MAAA,CAAAH,WAAA,CAAA;EACzB,OAAS,EAAAf;AACX,CAAA,CAAA;AAEO,MAAMmB,eAAkB,GAAA,MAAAA,CAC7BC,UACA,EAAArB,OAAA,EACAgB,WACoB,KAAA;EACd,MAAA;IAACM,OAAS;IAAAlB;EAAS,CAAA,GAAAJ,OAAA;EACrB,IAAA,CAACsB,OAAW,IAAA,CAAClB,KAAO,EAAA;IACtB,MAAM,IAAIC,KAAA,CACR,kKAAA,CACF;EACF;EACM,MAAAJ,GAAA,GAAM,iDAAkD,CAAAkB,MAAA,CAAAG,OAAA,EAAO,gBAAiB,CAAA,CAAAH,MAAA,CAAAE,UAAA,CAAA;EAElF,IAAAE,KAAA,GAAQ,MAAMjB,KAAA,CAAMF,KAAO,EAAA;IAC7BF,OAAA,EAASe,UAAW,CAAAhB,GAAA,EAAKe,WAAW;EAAA,CACrC,CACE,CAAAL,IAAA,CAAMC,GAAA,IAAQA,GAAI,CAAAC,IAAA,EAAM,CAAA,CACxBF,IAAK,CAACC,GAAK,IAAA;IAjDhB,IAAAY,EAAA,EAAAC,EAAA;IAiDwB,OAAA,CAAAA,EAAA,GAAA,CAAAD,EAAA,GAAAZ,GAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,GAAA,CAAAE,QAAA,KAAL,IAAe,GAAA,KAAA,CAAA,GAAAU,EAAA,CAAAT,IAAA,KAAf,IAAqB,GAAA,KAAA,CAAA,GAAAU,EAAA,CAAAF,KAAA;EAAA,CAAK,CAAA;EAE3C,IAAI,CAACA,KAAA,IAAS,CAACA,KAAA,CAAMG,MAAQ,EAAA;IAErB,MAAAC,MAAA,GAAS,kDAAkDR,MAAO,CAAAG,OAAA,EAAA,cAAA,CAAA;IAChEC,KAAA,GAAA,MAAMjB,MAAMF,KAAO,EAAA;MACzBF,OAAS,EAAA;QACP,GAAGe,UAAW,CAAAU,MAAA,EAAQX,WAAW,CAAA;QACjC,cAAgB,EAAA;MAClB,CAAA;MACAT,MAAQ,EAAA,MAAA;MACRC,IAAA,EAAMC,KAAKC,SAAU,CAAA;QACnBkB,QAAA,EAAU,CAACP,UAAU;MAAA,CACtB;IAAA,CACF,CACE,CAAAV,IAAA,CAAMC,GAAA,IAAQA,GAAI,CAAAC,IAAA,EAAM,CAAA,CACxBF,IAAK,CAACC,GAAK,IAAA;MAjElB,IAAAY,EAAA,EAAAC,EAAA;MAiE0B,OAAA,CAAAA,EAAA,GAAA,CAAAD,EAAA,GAAAZ,GAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,GAAA,CAAAE,QAAA,KAAL,IAAe,GAAA,KAAA,CAAA,GAAAU,EAAA,CAAAT,IAAA,KAAf,IAAqB,GAAA,KAAA,CAAA,GAAAU,EAAA,CAAAF,KAAA;IAAA,CAAK,CAAA;EAC7C;EAEA,IAAIA,MAAMG,MAAQ,EAAA;IAEV,MAAAG,UAAA,GAAaN,MAChBO,MAAO,CAACC,QAA8BA,IAAK,CAAAC,SAAA,KAAc,SAAS,CAClE,CAAAC,IAAA,CACEF,IACE,IAAAA,IAAA,CAAKG,OAAW,IAAAH,IAAA,CAAKG,YAAYb,UACjC,IAAAU,IAAA,CAAKI,eAAmB,IAAAJ,IAAA,CAAKI,eAAoB,KAAAd,UAAA,CACtD;IAEF,IAAIQ,UAAY,EAAA;MACd,OAAOA,UAAW,CAAAO,iBAAA;IACpB;EACF;EACO,OAAA,EAAA;AACT,CAAA;AC/Ea,MAAAC,UAAA,GAAoC,MAAOrC,OAA4B,IAAA;EAC9E,IAAA,EAACA,mCAASsB,OAAW,CAAA,IAAA,EAACtB,mCAASG,MAAU,CAAA,IAAA,EAACH,mCAASI,KAAO,CAAA,EAAA;IAC5D,OAAO,EAAC;EACV;EACM,MAAA;IAACkB,OAAS;IAAAlB;EAAS,CAAA,GAAAJ,OAAA;EACzB,MAAMC,MAAM,qDAAsD,CAAAkB,MAAA,CAAAG,OAAA,CAAA;EAC5D,MAAAN,WAAA,GAAc,MAAMjB,YAAA,CAAaC,OAAO,CAAA;EAC9C,OAAOM,MAAMF,KAAO,EAAA;IAClBG,MAAQ,EAAA,KAAA;IACRL,OAAA,EAASe,UAAW,CAAAhB,GAAA,EAAKe,WAAW;EACrC,CAAA,CAAA,CACEL,IAAK,CAACC,OAAQA,GAAI,CAAAC,IAAA,CAAA,CAAM,CAAA,CACxBF,KAAMC,GAAA,IAAQA,GAAI,CAAAE,QAAA,CAASC,KAAKuB,aAAa,CAAA;AAClD,CAAA;ACCa,MAAAC,kBAAA,GAAoD,MAAAA,CAC/DlB,UAAA,EACArB,OACG,KAAA;EACC,IAAA,EAACA,mCAASsB,OAAW,CAAA,IAAA,EAACtB,mCAASG,MAAU,CAAA,IAAA,EAACH,mCAASI,KAAO,CAAA,EAAA;IACrD,OAAA;MACLiB,UAAA;MACAmB,MAAQ,EAAAnB,UAAA;MACRoB,SAAS;IAAC,CACZ;EACF;EAEM,MAAA;IAACnB,OAAS;IAAAlB;EAAS,CAAA,GAAAJ,OAAA;EAEnB,MAAAgB,WAAA,GAAc,MAAMjB,YAAA,CAAaC,OAAO,CAAA;EAC9C,MAAMwC,MAAS,GAAA,MAAMpB,eAAgB,CAAAC,UAAA,EAAYrB,SAASgB,WAAW,CAAA;EACrE,IAAI,CAACwB,MAAQ,EAAA;IACJ,OAAA;MACLnB,UAAA;MACAmB,MAAQ,EAAAnB,UAAA;MACRoB,SAAS;IAAC,CACZ;EACF;EAEA,MAAMC,WAAc,GAAA,iDAAA,CAAkDvB,MAAO,CAAAG,OAAA,EAAA,QAAA,CAAA,CAASH,MAAM,CAAAqB,MAAA,EAAA,WAAA,CAAA;EACtF,MAAAG,aAAA,GAAgB,MAAMrC,KAAA,CAAMF,KAAO,EAAA;IACvCG,MAAQ,EAAA,KAAA;IACRL,OAAA,EAASe,UAAW,CAAAyB,WAAA,EAAa1B,WAAW;EAC7C,CAAA,CAAA,CACEL,IAAK,CAACC,OAAQA,GAAI,CAAAC,IAAA,CAAM,CAAA,CAAA,CACxBF,IAAK,CAACC,GAAQ,IAAAA,GAAA,CAAIE,SAASC,IAAI,CAAA;EAElC,IAAI0B,UAAU,EAAC;EACX,IAAAE,aAAA,IAAiBA,cAAcC,qBAAuB,EAAA;IACxDH,OAAA,GAAUE,aAAc,CAAAC,qBAAA,CAAsBC,GAAI,CAACd,IAAgC,IAAA;MApDvF,IAAAP,EAAA;MAqDM,IAAIsB,QAAW,GAAAf,IAAA,CAAKe,QAAW,GAAAf,IAAA,CAAKe,SAASC,eAAkB,GAAA,CAAA;MAC/D,IACEhB,KAAKiB,0BACL,IAAAjB,IAAA,CAAKiB,2BAA2BtB,MAAS,GAAA,CAAA,IACzCK,KAAKe,QACL,EAAA;QAEM,MAAAG,YAAA,GAAelB,IAAK,CAAAiB,0BAAA,CAA2B,CAAC,CAAA;QAEtD,IACEC,YAAa,CAAAC,iCAAA,IACbD,YAAa,CAAAC,iCAAA,CAAkCxB,SAAS,CACxD,EAAA;UAEA,MAAMyB,QAAW,GAAAF,YAAA,CAAaC,iCAAkC,CAAAE,EAAA,CAAG,CAAE,CAAA,CAAA;UAEjE,IAAAD,QAAA,IAAYA,QAAS,CAAAE,SAAA,IAAa,CAAG,EAAA;YAC5BP,QAAA,GAAA,CAAAtB,EAAA,GAAA8B,IAAA,CAAKC,MAAOJ,QAAS,CAAAE,SAAA,GAAYtB,KAAKe,QAAS,CAAAU,cAAA,GAAkB,GAAG,CAAA,KAApE,IAAyE,GAAAhC,EAAA,GAAA,CAAA;UACtF;QACF;MACF;MACO,OAAA;QACLiC,UAAU1B,IAAK,CAAA2B,cAAA;QACfZ;MAAA,CACF;IAAA,CACD,CAAA;EACH;EAEO,OAAA;IACLzB,UAAA;IACAoB,OAAA;IAAA;IAEAD,MAAQ,EAAAnB,UAAA;IACRsC,gBAAkB,EAAA,+CAAA,CAAgDxC,MAAO,CAAAG,OAAA,EAAA,gBAAA,CAAA,CAAiBH,gBAAO,GAAI,CAAA,CAAAA,MAAA,CAAAqB,MAAA;EAAA,CACvG;AACF,CAAA;ACnFA,MAAMoB,YAAYA,CAChB1B,OAAA,EACAlC,OACA,EAAA6D,SAAA,EACA7C,aACAK,UACG,KAAA;EACG,MAAA;IAACC,OAAS;IAAAlB;EAAS,CAAA,GAAAJ,OAAA;EACrB,IAAA,CAACsB,OAAW,IAAA,CAAClB,KAAO,EAAA;IACtB,MAAM,IAAIC,KAAA,CACR,kKAAA,CACF;EACF;EAEM,MAAAJ,GAAA,GAAM,kDAAkDkB,MAAO,CAAAG,OAAA,EAAA,OAAA,CAAA;EACrE,OAAOhB,MAAMF,KAAO,EAAA;IAClBG,MAAQ,EAAA,MAAA;IACRL,OAAS,EAAA;MACP,GAAGe,UAAW,CAAAhB,GAAA,EAAKe,WAAW,CAAA;MAC9B,cAAgB,EAAA;IAClB,CAAA;IACAR,IAAA,EAAMC,KAAKC,SAAU,CAAA;MACnBwB,OAAA;MACA4B,eAAiB,EAAAD,SAAA;MACjB1B,eAAiB,EAAAd;IAAA,CAClB;EACF,CAAA,CAAA,CACEV,IAAK,CAACC,OAAQA,GAAI,CAAAC,IAAA,CAAA,CAAM,CAAA,CACxBF,KAAMC,GAAA,IAAQA,GAAI,CAAAE,QAAA,CAASC,KAAKqB,iBAAiB,CAAA;AACtD,CAAA;AAQA,MAAM2B,iBAAiBA,CACrBC,KAAA,EACAhE,SACAqB,UACA,EAAAL,WAAA,EACA6C,WACAI,WAEG,KAAA;EACG,MAAA;IAAC3C,OAAS;IAAAlB;EAAS,CAAA,GAAAJ,OAAA;EACrB,IAAA,CAACsB,OAAW,IAAA,CAAClB,KAAO,EAAA;IACtB,MAAM,IAAIC,KAAA,CACR,kKAAA,CACF;EACF;EACM,MAAAJ,GAAA,GAAM,yDAAyDkB,MAAO,CAAAG,OAAA,EAAA,UAAA,CAAA;EAC5E,MAAM4C,OAKF,GAAA;IACFC,SAAW,EAAA,IAAA;IACX/B,iBAAmB,EAAA4B,KAAA;IACnBpC,QAAA,EAAU,CAACP,UAAU;EAAA,CACvB;EAEA,IAAI4C,WAAa,EAAA;IACfC,OAAA,CAAQE,eAAkB,GAAAP,SAAA,CAAUhB,GAAI,CAACwB,CAAO,KAAA;MAC9CX,cAAgB,EAAAW,CAAA;MAChBJ;IACA,CAAA,CAAA,CAAA;EACJ;EAEA,OAAO3D,MAAMF,KAAO,EAAA;IAClBG,MAAQ,EAAA,MAAA;IACRL,OAAS,EAAA;MACP,GAAGe,UAAW,CAAAhB,GAAA,EAAKe,WAAW,CAAA;MAC9B,cAAgB,EAAA;IAClB,CAAA;IACAR,IAAA,EAAMC,IAAK,CAAAC,SAAA,CAAUwD,OAAO;EAC7B,CAAA,CAAA,CACEvD,IAAK,CAACC,OAAQA,GAAI,CAAAC,IAAA,CAAA,CAAM,CAAA,CACxBF,KAAMC,GAAA,IAAQA,GAAI,CAAAE,QAAA,CAASC,KAAKuD,QAAQ,CAAA;AAC7C,CAAA;AAEA,MAAMC,iBAAA,GAAoBA,CACxBD,QACA,EAAAjD,UAAA,EACAmD,UACAxE,OACA,EAAA6D,SAAA,EACA7C,aACAyD,WAEG,KAAA;EACG,MAAA;IAACnD,OAAS;IAAAlB;EAAS,CAAA,GAAAJ,OAAA;EACrB,IAAA,CAACsB,OAAW,IAAA,CAAClB,KAAO,EAAA;IACtB,MAAM,IAAIC,KAAA,CACR,kKAAA,CACF;EACF;EACA,MAAMJ,GAAM,GAAA,wDAAA,CAAyDkB,MAAO,CAAAG,OAAA,EAAA,WAAA,CAAA,CAAYH,MAAQ,CAAAmD,QAAA,EAAA,OAAA,CAAA;EAC1F,MAAAI,QAAA,GAAW,IAAIC,QAAS,EAAA;EACrBD,QAAA,CAAAE,MAAA,CAAO,WAAWvD,UAAU,CAAA;EAC5BqD,QAAA,CAAAE,MAAA,CAAO,YAAY,MAAM,CAAA;EAClC,MAAMC,UAAa,GAAAC,MAAAA,CAAAA,MAAA,CAAOC,IAAK,CAAAP,QAAA,CAASQ,SAAS,OAAO,CAAA;EAC/CN,QAAA,CAAAE,MAAA,CAAO,MAAQ,EAAA,IAAIK,IAAK,CAAA,CAACJ,UAAU,CAAC,CAAG,EAAA,EAAA,CAAG1D,MAAS,CAAAqD,QAAA,CAAAU,IAAA,EAAI,OAAO,CAAA,CAAA;EACvErB,SAAA,CAAUsB,QAAS1B,QAAA,IAAaiB,SAASE,MAAO,CAAA,wBAAA,EAA0BnB,QAAQ,CAAC,CAAA;EACnF,IAAIgB,WAAa,EAAA;IACNC,QAAA,CAAAE,MAAA,CAAO,eAAeH,WAAW,CAAA;EAC5C;EAEA,OAAOnE,MAAMF,KAAO,EAAA;IAClBG,MAAQ,EAAA,MAAA;IACRL,OAAA,EAASe,UAAW,CAAAhB,GAAA,EAAKe,WAAW,CAAA;IACpCR,IAAM,EAAAkE;EAAA,CACP,CAAE,CAAA/D,IAAA,CAAMC,GAAQ,IAAAA,GAAA,CAAIC,KAAM,CAAA,CAAA;AAC7B,CAAA;AAEO,MAAMuE,aAAoC,MAAAA,CAC/C/D,UAAA,EACAmD,UACAX,SACA,EAAA7D,OAAA,EACAiE,aACAQ,WAEG,KAAA;EACC,IAAA,EAACzE,mCAASsB,OAAW,CAAA,IAAA,EAACtB,mCAASG,MAAU,CAAA,IAAA,EAACH,mCAASI,KAAO,CAAA,EAAA;IAC5D,MAAM,IAAIC,KAAA,CACR,+JAAA,CACF;EACF;EAEM,MAAAW,WAAA,GAAc,MAAMjB,YAAA,CAAaC,OAAO,CAAA;EAE9C,IAAIwC,SAAS,MAAMpB,eAAA,CAAgBoD,QAAS,CAAAU,IAAA,EAAMlF,SAASgB,WAAW,CAAA;EACtE,IAAI,CAACwB,MAAQ,EAAA;IACXA,MAAA,GAAS,MAAMoB,SAAU,CAAAY,QAAA,CAASU,MAAMlF,OAAS,EAAA6D,SAAA,EAAW7C,aAAaK,UAAU,CAAA;EACrF;EAEA,MAAMiD,WAAW,MAAMP,cAAA,CACrBvB,MAAA,EACAxC,OAAA,EACAqB,UAAA,EACAL,WAAA,EACA6C,SAAA,EACAI,WAAA,CACF;EACA,MAAMoB,gBAAgB,MAAMd,iBAAA,CAC1BD,QAAA,EACAjD,UAAA,EACAmD,QAAA,EACAxE,OAAA,EACA6D,SAAA,EACA7C,WAAA,EACAyD,WAAA,CACF;EAEQa,OAAA,CAAAC,IAAA,CAAK,kCAAkCF,aAAa,CAAA;EAErD,OAAA9C,kBAAA,CAAmBlB,YAAYrB,OAAO,CAAA;AAC/C,CAAA;AClKO,MAAMwF,cAA4C,GAAA,MAAAA,CACvDhD,MACA,EAAAiB,QAAA,EACAzD,OACG,KAAA;EACC,IAAA,EAACA,mCAASsB,OAAW,CAAA,IAAA,EAACtB,mCAASG,MAAU,CAAA,IAAA,EAACH,mCAASI,KAAO,CAAA,EAAA;IAC5D,MAAM,IAAIC,KAAA,CACR,+JAAA,CACF;EACF;EAEM,MAAA;IAACiB,OAAS;IAAAlB;EAAS,CAAA,GAAAJ,OAAA;EAEzB,MAAMC,MAAM,kDAAmD,CAAAkB,MAAA,CAAAG,OAAA,EAAO,WAAY,CAAA,CAAAH,MAAA,CAAAsC,QAAA,EAAQ,kBAAiBtC,MAAM,CAAAqB,MAAA,EAAA,wBAAA,CAAA;EAC3G,MAAAxB,WAAA,GAAc,MAAMjB,YAAA,CAAaC,OAAO,CAAA;EACxC,MAAAyF,cAAA,GAAiB,MAAMnF,KAAA,CAAMF,KAAO,EAAA;IACxCG,MAAQ,EAAA,KAAA;IACRL,OAAA,EAASe,UAAW,CAAAhB,GAAA,EAAKe,WAAW;EAAA,CACrC,CACE,CAAAL,IAAA,CAAMC,GAAA,IAAQA,GAAI,CAAAC,IAAA,EAAM,CAAA,CACxBF,IAAK,CAACC,GAAQ,IAAA;IAvBnB,IAAAY,EAAA;IAwBM,IAAIZ,IAAIJ,IAAM,EAAA;MACZ,OAAOI,GAAI,CAAAJ,IAAA;IAAA,CACb,MAAA,IAAWI,GAAI,CAAAE,QAAA,CAAS4E,MAAQ,EAAA;MAC9B,MAAMC,WACJnE,EAAI,GAAAZ,GAAA,CAAAE,QAAA,CAAS4E,OAAO,CAAC,CAAA,KAArB,mBAAwBE,OAAW,KAAA,6CAAA;MAC/B,MAAA,IAAIvF,MAAMsF,MAAM,CAAA;IACxB;IACO,OAAA,EAAA;EAAA,CACR,CAAA;EAEI,OAAAF,cAAA;AACT,CAAA;AC7BO,MAAMI,gBAA4B,GAAA;EACvCxD,UAAA;EACAE,kBAAA;EACA6C,UAAA;EACAI;AACF,CAAA;ACQA,MAAMM,0BAA2D,GAAA;EAC/D,GAAGC,qBAAA,CAAAA,uBAAA;EACHC,OAAS,EAAAH;AACX,CAAA;AAEA,MAAMI,yBAA0D,GAAA;EAC9D,GAAGC,qBAAA,CAAAD,yBAAA;EACHD,OAAS,EAAAH;AACX,CAAA;AAEA,MAAMM,uBAAwD,GAAA;EAC5D,GAAGC,qBAAA,CAAAA,oBAAA;EACHJ,OAAS,EAAAH;AACX,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sanity-plugin-studio-smartling",
|
|
3
|
-
"version": "4.3.0-beta",
|
|
3
|
+
"version": "4.3.0-beta.2",
|
|
4
4
|
"description": "!smartling gif",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sanity",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"@sanity/incompatible-plugin": "^1.0.4",
|
|
51
|
-
"sanity-translations-tab": "^4.3.0-beta.
|
|
51
|
+
"sanity-translations-tab": "^4.3.0-beta.5"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@commitlint/cli": "^17.7.1",
|
|
@@ -74,8 +74,8 @@
|
|
|
74
74
|
"react-dom": "^18.2.0",
|
|
75
75
|
"react-is": "^18.2.0",
|
|
76
76
|
"rimraf": "^5.0.1",
|
|
77
|
-
"sanity": "^3.
|
|
78
|
-
"styled-components": "^
|
|
77
|
+
"sanity": "^3.40.0",
|
|
78
|
+
"styled-components": "^6.1",
|
|
79
79
|
"typescript": "^5.2.2"
|
|
80
80
|
},
|
|
81
81
|
"peerDependencies": {
|
|
@@ -93,7 +93,7 @@ const uploadFileToBatch = (
|
|
|
93
93
|
secrets: Secrets,
|
|
94
94
|
localeIds: string[],
|
|
95
95
|
accessToken: string,
|
|
96
|
-
callbackUrl?:
|
|
96
|
+
callbackUrl?: string,
|
|
97
97
|
//eslint-disable-next-line max-params
|
|
98
98
|
) => {
|
|
99
99
|
const {project, proxy} = secrets
|
|
@@ -109,9 +109,8 @@ const uploadFileToBatch = (
|
|
|
109
109
|
const htmlBuffer = Buffer.from(document.content, 'utf-8')
|
|
110
110
|
formData.append('file', new Blob([htmlBuffer]), `${document.name}.html`)
|
|
111
111
|
localeIds.forEach((localeId) => formData.append('localeIdsToAuthorize[]', localeId))
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
formData.append('callbackUrl', callbackUrl(document))
|
|
112
|
+
if (callbackUrl) {
|
|
113
|
+
formData.append('callbackUrl', callbackUrl)
|
|
115
114
|
}
|
|
116
115
|
|
|
117
116
|
return fetch(proxy, {
|
|
@@ -127,7 +126,7 @@ export const createTask: Adapter['createTask'] = async (
|
|
|
127
126
|
localeIds: string[],
|
|
128
127
|
secrets: Secrets | null,
|
|
129
128
|
workflowUid?: string,
|
|
130
|
-
callbackUrl?:
|
|
129
|
+
callbackUrl?: string,
|
|
131
130
|
// eslint-disable-next-line max-params
|
|
132
131
|
) => {
|
|
133
132
|
if (!secrets?.project || !secrets?.secret || !secrets?.proxy) {
|