sanity-plugin-studio-smartling 2.0.5 → 3.0.0-beta

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.
@@ -0,0 +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 = (\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 return fetch(proxy, {\n method: 'POST',\n headers: getHeaders(url, accessToken),\n })\n .then((res) => res.json())\n .then((res) => {\n if (res.response.data.items.length) {\n //smartling will fuzzy match job names. We need to be precise.\n const correctJob = res.response.data.items.find(\n (item: {jobName: string}) => item.jobName && item.jobName === documentId\n )\n if (correctJob) {\n return correctJob.translationJobUid\n }\n return ''\n }\n return ''\n })\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 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 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 SmartlingProgressItem {\n targetLocaleId: string\n progress: {\n percentComplete: number\n }\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 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 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 localeId: item.targetLocaleId,\n progress: item.progress ? item.progress.percentComplete : 0,\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} from 'sanity-translations-tab'\nimport {getTranslationTask} from './getTranslationTask'\nimport {Buffer} from 'buffer'\n\nconst createJob = (jobName: string, secrets: Secrets, localeIds: string[], accessToken: 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\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 }),\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 documentName: 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: [documentName],\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 document: Record<string, any>,\n secrets: Secrets,\n localeIds: string[],\n accessToken: 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 const url = `https://api.smartling.com/job-batches-api/v2/projects/${project}/batches/${batchUid}/file`\n const formData = new FormData()\n formData.append('fileUri', document.name)\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 return fetch(proxy, {\n method: 'POST',\n headers: getHeaders(url, accessToken),\n body: formData,\n }).then((res) => res.json())\n}\n\n//@ts-ignore until return TranslationTask type is added to sanity-translations-tab\nexport const createTask: Adapter['createTask'] = async (\n documentId: string,\n document: Record<string, any>,\n localeIds: string[],\n secrets: Secrets | null,\n workflowUid?: string\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)\n }\n\n const batchUid = await createJobBatch(\n taskId,\n secrets,\n document.name,\n accessToken,\n localeIds,\n workflowUid\n )\n const uploadFileRes = await uploadFileToBatch(batchUid, document, secrets, localeIds, accessToken)\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 {SerializedDocument} from 'sanity-naive-html-serializer'\nimport {\n TranslationsTab,\n baseDocumentLevelConfig,\n baseFieldLevelConfig,\n findLatestDraft,\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n Adapter,\n documentLevelPatch,\n fieldLevelPatch,\n TranslationFunctionContext,\n} from 'sanity-translations-tab'\nimport {SmartlingAdapter} from './adapter'\n\ninterface ConfigOptions {\n adapter: Adapter\n secretsNamespace: string | null\n exportForTranslation: (\n id: string,\n context: TranslationFunctionContext\n ) => Promise<SerializedDocument>\n importTranslation: (\n id: string,\n localeId: string,\n doc: string,\n context: TranslationFunctionContext\n ) => Promise<void>\n}\nconst defaultDocumentLevelConfig: ConfigOptions = {\n ...baseDocumentLevelConfig,\n adapter: SmartlingAdapter,\n}\n\nconst defaultFieldLevelConfig: ConfigOptions = {\n ...baseFieldLevelConfig,\n adapter: SmartlingAdapter,\n}\n\nexport {\n TranslationsTab,\n findLatestDraft,\n documentLevelPatch,\n fieldLevelPatch,\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n SmartlingAdapter,\n defaultDocumentLevelConfig,\n defaultFieldLevelConfig,\n}\n"],"names":["authenticate","secrets","url","headers","secret","proxy","Error","fetch","method","body","JSON","stringify","then","res","json","response","data","accessToken","getHeaders","Authorization","findExistingJob","documentId","project","concat","items","length","correctJob","find","item","jobName","translationJobUid","getLocales","targetLocales","getTranslationTask","taskId","locales","progressUrl","smartlingTask","contentProgressReport","map","localeId","targetLocaleId","progress","percentComplete","linkToVendorTask","createJob","localeIds","targetLocaleIds","createJobBatch","jobId","documentName","workflowUid","reqBody","authorize","fileUris","localeWorkflows","l","batchUid","uploadFileToBatch","document","formData","FormData","append","name","htmlBuffer","Buffer","from","content","Blob","forEach","createTask","uploadFileRes","console","info","getTranslation","translatedHTML","_a","errors","errMsg","message","SmartlingAdapter","defaultDocumentLevelConfig","baseDocumentLevelConfig","adapter","defaultFieldLevelConfig","baseFieldLevelConfig"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,8 +1,287 @@
1
+ 'use strict';
1
2
 
2
- 'use strict'
3
-
4
- if (process.env.NODE_ENV === 'production') {
5
- module.exports = require('./sanity-plugin-studio-smartling.cjs.production.min.js')
6
- } else {
7
- module.exports = require('./sanity-plugin-studio-smartling.cjs.development.js')
8
- }
3
+ Object.defineProperty(exports, '__esModule', {
4
+ value: true
5
+ });
6
+ var sanityTranslationsTab = require('sanity-translations-tab');
7
+ var buffer = require('buffer');
8
+ const authenticate = secrets => {
9
+ const url = "https://api.smartling.com/auth-api/v2/authenticate";
10
+ const headers = {
11
+ "content-type": "application/json",
12
+ "X-URL": url
13
+ };
14
+ const {
15
+ secret,
16
+ proxy
17
+ } = secrets;
18
+ if (!secret || !proxy) {
19
+ throw new Error("The Smartling adapter requires a secret key and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.");
20
+ }
21
+ return fetch(proxy, {
22
+ headers,
23
+ method: "POST",
24
+ body: JSON.stringify(secret)
25
+ }).then(res => res.json()).then(res => res.response.data.accessToken);
26
+ };
27
+ const getHeaders = (url, accessToken) => ({
28
+ Authorization: "Bearer ".concat(accessToken),
29
+ "X-URL": url
30
+ });
31
+ const findExistingJob = (documentId, secrets, accessToken) => {
32
+ const {
33
+ project,
34
+ proxy
35
+ } = secrets;
36
+ if (!project || !proxy) {
37
+ throw new Error("The Smartling adapter requires a Smartling project identifier and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.");
38
+ }
39
+ const url = "https://api.smartling.com/jobs-api/v3/projects/".concat(project, "/jobs?jobName=").concat(documentId);
40
+ return fetch(proxy, {
41
+ method: "POST",
42
+ headers: getHeaders(url, accessToken)
43
+ }).then(res => res.json()).then(res => {
44
+ if (res.response.data.items.length) {
45
+ const correctJob = res.response.data.items.find(item => item.jobName && item.jobName === documentId);
46
+ if (correctJob) {
47
+ return correctJob.translationJobUid;
48
+ }
49
+ return "";
50
+ }
51
+ return "";
52
+ });
53
+ };
54
+ const getLocales = async secrets => {
55
+ if (!(secrets == null ? void 0 : secrets.project) || !(secrets == null ? void 0 : secrets.secret) || !(secrets == null ? void 0 : secrets.proxy)) {
56
+ throw new Error("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.");
57
+ }
58
+ const {
59
+ project,
60
+ proxy
61
+ } = secrets;
62
+ const url = "https://api.smartling.com/projects-api/v2/projects/".concat(project);
63
+ const accessToken = await authenticate(secrets);
64
+ return fetch(proxy, {
65
+ method: "GET",
66
+ headers: getHeaders(url, accessToken)
67
+ }).then(res => res.json()).then(res => res.response.data.targetLocales);
68
+ };
69
+ const getTranslationTask = async (documentId, secrets) => {
70
+ if (!(secrets == null ? void 0 : secrets.project) || !(secrets == null ? void 0 : secrets.secret) || !(secrets == null ? void 0 : secrets.proxy)) {
71
+ throw new Error("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.");
72
+ }
73
+ const {
74
+ project,
75
+ proxy
76
+ } = secrets;
77
+ const accessToken = await authenticate(secrets);
78
+ const taskId = await findExistingJob(documentId, secrets, accessToken);
79
+ if (!taskId) {
80
+ return {
81
+ documentId,
82
+ taskId: documentId,
83
+ locales: []
84
+ };
85
+ }
86
+ const progressUrl = "https://api.smartling.com/jobs-api/v3/projects/".concat(project, "/jobs/").concat(taskId, "/progress");
87
+ const smartlingTask = await fetch(proxy, {
88
+ method: "GET",
89
+ headers: getHeaders(progressUrl, accessToken)
90
+ }).then(res => res.json()).then(res => res.response.data);
91
+ let locales = [];
92
+ if (smartlingTask && smartlingTask.contentProgressReport) {
93
+ locales = smartlingTask.contentProgressReport.map(item => ({
94
+ localeId: item.targetLocaleId,
95
+ progress: item.progress ? item.progress.percentComplete : 0
96
+ }));
97
+ }
98
+ return {
99
+ documentId,
100
+ locales,
101
+ //since our download is tied to document id for smartling, keep track of it as a task
102
+ taskId: documentId,
103
+ linkToVendorTask: "https://dashboard.smartling.com/app/projects/".concat(project, "/account-jobs/").concat(project, ":").concat(taskId)
104
+ };
105
+ };
106
+ const createJob = (jobName, secrets, localeIds, accessToken) => {
107
+ const {
108
+ project,
109
+ proxy
110
+ } = secrets;
111
+ if (!project || !proxy) {
112
+ throw new Error("The Smartling adapter requires a Smartling project identifier and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.");
113
+ }
114
+ const url = "https://api.smartling.com/jobs-api/v3/projects/".concat(project, "/jobs");
115
+ return fetch(proxy, {
116
+ method: "POST",
117
+ headers: {
118
+ ...getHeaders(url, accessToken),
119
+ "content-type": "application/json"
120
+ },
121
+ body: JSON.stringify({
122
+ jobName,
123
+ targetLocaleIds: localeIds
124
+ })
125
+ }).then(res => res.json()).then(res => res.response.data.translationJobUid);
126
+ };
127
+ const createJobBatch = (jobId, secrets, documentName, accessToken, localeIds, workflowUid) => {
128
+ const {
129
+ project,
130
+ proxy
131
+ } = secrets;
132
+ if (!project || !proxy) {
133
+ throw new Error("The Smartling adapter requires a Smartling project identifier and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.");
134
+ }
135
+ const url = "https://api.smartling.com/job-batches-api/v2/projects/".concat(project, "/batches");
136
+ const reqBody = {
137
+ authorize: true,
138
+ translationJobUid: jobId,
139
+ fileUris: [documentName]
140
+ };
141
+ if (workflowUid) {
142
+ reqBody.localeWorkflows = localeIds.map(l => ({
143
+ targetLocaleId: l,
144
+ workflowUid
145
+ }));
146
+ }
147
+ return fetch(proxy, {
148
+ method: "POST",
149
+ headers: {
150
+ ...getHeaders(url, accessToken),
151
+ "content-type": "application/json"
152
+ },
153
+ body: JSON.stringify(reqBody)
154
+ }).then(res => res.json()).then(res => res.response.data.batchUid);
155
+ };
156
+ const uploadFileToBatch = (batchUid, document, secrets, localeIds, accessToken) => {
157
+ const {
158
+ project,
159
+ proxy
160
+ } = secrets;
161
+ if (!project || !proxy) {
162
+ throw new Error("The Smartling adapter requires a Smartling project identifier and a proxy URL. Please check your secrets document in this dataset, per the plugin documentation.");
163
+ }
164
+ const url = "https://api.smartling.com/job-batches-api/v2/projects/".concat(project, "/batches/").concat(batchUid, "/file");
165
+ const formData = new FormData();
166
+ formData.append("fileUri", document.name);
167
+ formData.append("fileType", "html");
168
+ const htmlBuffer = buffer.Buffer.from(document.content, "utf-8");
169
+ formData.append("file", new Blob([htmlBuffer]), "".concat(document.name, ".html"));
170
+ localeIds.forEach(localeId => formData.append("localeIdsToAuthorize[]", localeId));
171
+ return fetch(proxy, {
172
+ method: "POST",
173
+ headers: getHeaders(url, accessToken),
174
+ body: formData
175
+ }).then(res => res.json());
176
+ };
177
+ const createTask = async (documentId, document, localeIds, secrets, workflowUid) => {
178
+ if (!(secrets == null ? void 0 : secrets.project) || !(secrets == null ? void 0 : secrets.secret) || !(secrets == null ? void 0 : secrets.proxy)) {
179
+ throw new Error("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.");
180
+ }
181
+ const accessToken = await authenticate(secrets);
182
+ let taskId = await findExistingJob(document.name, secrets, accessToken);
183
+ if (!taskId) {
184
+ taskId = await createJob(document.name, secrets, localeIds, accessToken);
185
+ }
186
+ const batchUid = await createJobBatch(taskId, secrets, document.name, accessToken, localeIds, workflowUid);
187
+ const uploadFileRes = await uploadFileToBatch(batchUid, document, secrets, localeIds, accessToken);
188
+ console.info("Upload status from Smartling: ", uploadFileRes);
189
+ return getTranslationTask(documentId, secrets);
190
+ };
191
+ const getTranslation = async (taskId, localeId, secrets) => {
192
+ if (!(secrets == null ? void 0 : secrets.project) || !(secrets == null ? void 0 : secrets.secret) || !(secrets == null ? void 0 : secrets.proxy)) {
193
+ throw new Error("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.");
194
+ }
195
+ const {
196
+ project,
197
+ proxy
198
+ } = secrets;
199
+ const url = "https://api.smartling.com/files-api/v2/projects/".concat(project, "/locales/").concat(localeId, "/file?fileUri=").concat(taskId, "&retrievalType=pending");
200
+ const accessToken = await authenticate(secrets);
201
+ const translatedHTML = await fetch(proxy, {
202
+ method: "GET",
203
+ headers: getHeaders(url, accessToken)
204
+ }).then(res => res.json()).then(res => {
205
+ var _a;
206
+ if (res.body) {
207
+ return res.body;
208
+ } else if (res.response.errors) {
209
+ const errMsg = ((_a = res.response.errors[0]) == null ? void 0 : _a.message) || "Error retrieving translation from Smartling";
210
+ throw new Error(errMsg);
211
+ }
212
+ return "";
213
+ });
214
+ return translatedHTML;
215
+ };
216
+ const SmartlingAdapter = {
217
+ getLocales,
218
+ getTranslationTask,
219
+ createTask,
220
+ getTranslation
221
+ };
222
+ const defaultDocumentLevelConfig = {
223
+ ...sanityTranslationsTab.baseDocumentLevelConfig,
224
+ adapter: SmartlingAdapter
225
+ };
226
+ const defaultFieldLevelConfig = {
227
+ ...sanityTranslationsTab.baseFieldLevelConfig,
228
+ adapter: SmartlingAdapter
229
+ };
230
+ Object.defineProperty(exports, 'BaseDocumentDeserializer', {
231
+ enumerable: true,
232
+ get: function () {
233
+ return sanityTranslationsTab.BaseDocumentDeserializer;
234
+ }
235
+ });
236
+ Object.defineProperty(exports, 'BaseDocumentMerger', {
237
+ enumerable: true,
238
+ get: function () {
239
+ return sanityTranslationsTab.BaseDocumentMerger;
240
+ }
241
+ });
242
+ Object.defineProperty(exports, 'BaseDocumentSerializer', {
243
+ enumerable: true,
244
+ get: function () {
245
+ return sanityTranslationsTab.BaseDocumentSerializer;
246
+ }
247
+ });
248
+ Object.defineProperty(exports, 'TranslationsTab', {
249
+ enumerable: true,
250
+ get: function () {
251
+ return sanityTranslationsTab.TranslationsTab;
252
+ }
253
+ });
254
+ Object.defineProperty(exports, 'customSerializers', {
255
+ enumerable: true,
256
+ get: function () {
257
+ return sanityTranslationsTab.customSerializers;
258
+ }
259
+ });
260
+ Object.defineProperty(exports, 'defaultStopTypes', {
261
+ enumerable: true,
262
+ get: function () {
263
+ return sanityTranslationsTab.defaultStopTypes;
264
+ }
265
+ });
266
+ Object.defineProperty(exports, 'documentLevelPatch', {
267
+ enumerable: true,
268
+ get: function () {
269
+ return sanityTranslationsTab.documentLevelPatch;
270
+ }
271
+ });
272
+ Object.defineProperty(exports, 'fieldLevelPatch', {
273
+ enumerable: true,
274
+ get: function () {
275
+ return sanityTranslationsTab.fieldLevelPatch;
276
+ }
277
+ });
278
+ Object.defineProperty(exports, 'findLatestDraft', {
279
+ enumerable: true,
280
+ get: function () {
281
+ return sanityTranslationsTab.findLatestDraft;
282
+ }
283
+ });
284
+ exports.SmartlingAdapter = SmartlingAdapter;
285
+ exports.defaultDocumentLevelConfig = defaultDocumentLevelConfig;
286
+ exports.defaultFieldLevelConfig = defaultFieldLevelConfig;
287
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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 = (\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 return fetch(proxy, {\n method: 'POST',\n headers: getHeaders(url, accessToken),\n })\n .then((res) => res.json())\n .then((res) => {\n if (res.response.data.items.length) {\n //smartling will fuzzy match job names. We need to be precise.\n const correctJob = res.response.data.items.find(\n (item: {jobName: string}) => item.jobName && item.jobName === documentId\n )\n if (correctJob) {\n return correctJob.translationJobUid\n }\n return ''\n }\n return ''\n })\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 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 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 SmartlingProgressItem {\n targetLocaleId: string\n progress: {\n percentComplete: number\n }\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 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 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 localeId: item.targetLocaleId,\n progress: item.progress ? item.progress.percentComplete : 0,\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} from 'sanity-translations-tab'\nimport {getTranslationTask} from './getTranslationTask'\nimport {Buffer} from 'buffer'\n\nconst createJob = (jobName: string, secrets: Secrets, localeIds: string[], accessToken: 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\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 }),\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 documentName: 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: [documentName],\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 document: Record<string, any>,\n secrets: Secrets,\n localeIds: string[],\n accessToken: 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 const url = `https://api.smartling.com/job-batches-api/v2/projects/${project}/batches/${batchUid}/file`\n const formData = new FormData()\n formData.append('fileUri', document.name)\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 return fetch(proxy, {\n method: 'POST',\n headers: getHeaders(url, accessToken),\n body: formData,\n }).then((res) => res.json())\n}\n\n//@ts-ignore until return TranslationTask type is added to sanity-translations-tab\nexport const createTask: Adapter['createTask'] = async (\n documentId: string,\n document: Record<string, any>,\n localeIds: string[],\n secrets: Secrets | null,\n workflowUid?: string\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)\n }\n\n const batchUid = await createJobBatch(\n taskId,\n secrets,\n document.name,\n accessToken,\n localeIds,\n workflowUid\n )\n const uploadFileRes = await uploadFileToBatch(batchUid, document, secrets, localeIds, accessToken)\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 {SerializedDocument} from 'sanity-naive-html-serializer'\nimport {\n TranslationsTab,\n baseDocumentLevelConfig,\n baseFieldLevelConfig,\n findLatestDraft,\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n Adapter,\n documentLevelPatch,\n fieldLevelPatch,\n TranslationFunctionContext,\n} from 'sanity-translations-tab'\nimport {SmartlingAdapter} from './adapter'\n\ninterface ConfigOptions {\n adapter: Adapter\n secretsNamespace: string | null\n exportForTranslation: (\n id: string,\n context: TranslationFunctionContext\n ) => Promise<SerializedDocument>\n importTranslation: (\n id: string,\n localeId: string,\n doc: string,\n context: TranslationFunctionContext\n ) => Promise<void>\n}\nconst defaultDocumentLevelConfig: ConfigOptions = {\n ...baseDocumentLevelConfig,\n adapter: SmartlingAdapter,\n}\n\nconst defaultFieldLevelConfig: ConfigOptions = {\n ...baseFieldLevelConfig,\n adapter: SmartlingAdapter,\n}\n\nexport {\n TranslationsTab,\n findLatestDraft,\n documentLevelPatch,\n fieldLevelPatch,\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n SmartlingAdapter,\n defaultDocumentLevelConfig,\n defaultFieldLevelConfig,\n}\n"],"names":["authenticate","secrets","url","headers","secret","proxy","Error","fetch","method","body","JSON","stringify","then","res","json","response","data","accessToken","getHeaders","Authorization","findExistingJob","documentId","project","concat","items","length","correctJob","find","item","jobName","translationJobUid","getLocales","targetLocales","getTranslationTask","taskId","locales","progressUrl","smartlingTask","contentProgressReport","map","localeId","targetLocaleId","progress","percentComplete","linkToVendorTask","createJob","localeIds","targetLocaleIds","createJobBatch","jobId","documentName","workflowUid","reqBody","authorize","fileUris","localeWorkflows","l","batchUid","uploadFileToBatch","document","formData","FormData","append","name","htmlBuffer","Buffer","from","content","Blob","forEach","createTask","uploadFileRes","console","info","getTranslation","translatedHTML","_a","errors","errMsg","message","SmartlingAdapter","defaultDocumentLevelConfig","baseDocumentLevelConfig","adapter","defaultFieldLevelConfig","baseFieldLevelConfig"],"mappings":"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"}
package/package.json CHANGED
@@ -1,59 +1,88 @@
1
1
  {
2
- "version": "2.0.5",
2
+ "name": "sanity-plugin-studio-smartling",
3
+ "version": "3.0.0-beta",
4
+ "description": "!smartling gif",
5
+ "keywords": [
6
+ "sanity",
7
+ "sanity-plugin"
8
+ ],
9
+ "homepage": "https://github.com/sanity-io/sanity-plugin-studio-smartling#readme",
10
+ "bugs": {
11
+ "url": "https://github.com/sanity-io/sanity-plugin-studio-smartling/issues"
12
+ },
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git@github.com:sanity-io/sanity-plugin-studio-smartling.git"
16
+ },
3
17
  "license": "MIT",
4
- "main": "dist/index.js",
5
- "typings": "dist/index.d.ts",
18
+ "author": "Sanity.io",
19
+ "exports": {
20
+ ".": {
21
+ "types": "./dist/index.d.ts",
22
+ "source": "./src/index.ts",
23
+ "require": "./dist/index.js",
24
+ "import": "./dist/index.esm.js",
25
+ "default": "./dist/index.esm.js"
26
+ },
27
+ "./package.json": "./package.json"
28
+ },
29
+ "main": "./dist/index.js",
30
+ "module": "./dist/index.esm.js",
31
+ "source": "./src/index.ts",
32
+ "types": "./dist/index.d.ts",
6
33
  "files": [
7
34
  "dist",
8
- "src"
35
+ "sanity.json",
36
+ "src",
37
+ "v2-incompatible.js"
9
38
  ],
10
- "engines": {
11
- "node": ">=10"
12
- },
13
39
  "scripts": {
14
- "start": "tsdx watch",
15
- "build": "tsdx build",
16
- "test": "tsdx test",
17
- "lint": "tsdx lint src",
18
- "prepare": "tsdx build",
19
- "size": "size-limit",
20
- "analyze": "size-limit --why"
40
+ "build": "run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict",
41
+ "lint": "eslint . --fix",
42
+ "clean": "rimraf dist",
43
+ "format": "prettier --write --cache --ignore-unknown .",
44
+ "link-watch": "plugin-kit link-watch",
45
+ "prepublishOnly": "run-s build",
46
+ "watch": "pkg-utils watch --strict",
47
+ "prepare": "husky install"
21
48
  },
22
- "husky": {
23
- "hooks": {
24
- "pre-commit": "tsdx lint src"
25
- }
26
- },
27
- "prettier": {
28
- "printWidth": 80,
29
- "semi": false,
30
- "singleQuote": true,
31
- "trailingComma": "es5"
49
+ "dependencies": {
50
+ "@sanity/incompatible-plugin": "^1.0.4",
51
+ "sanity-translations-tab": "^3.0.1"
32
52
  },
33
- "name": "sanity-plugin-studio-smartling",
34
- "author": "Sanity.io",
35
- "module": "dist/sanity-plugin-studio-smartling.esm.js",
36
- "homepage": "https://github.com/sanity-io/sanity-plugin-studio-smartling#readme",
37
- "size-limit": [
38
- {
39
- "path": "dist/sanity-plugin-studio-smartling.cjs.production.min.js",
40
- "limit": "10 KB"
41
- },
42
- {
43
- "path": "dist/sanity-plugin-studio-smartling.esm.js",
44
- "limit": "10 KB"
45
- }
46
- ],
47
53
  "devDependencies": {
48
- "@sanity/types": "^2.22.3",
49
- "@size-limit/preset-small-lib": "^4.7.0",
50
- "husky": "^4.3.0",
51
- "size-limit": "^4.7.0",
52
- "tsdx": "^0.14.1",
53
- "tslib": "^2.0.3",
54
- "typescript": "^4.0.5"
54
+ "@commitlint/cli": "^17.4.4",
55
+ "@commitlint/config-conventional": "^17.4.4",
56
+ "@sanity/pkg-utils": "^2.2.5",
57
+ "@sanity/plugin-kit": "^3.1.7",
58
+ "@sanity/semantic-release-preset": "^4.0.0",
59
+ "@types/react": "^18.0.28",
60
+ "@typescript-eslint/eslint-plugin": "^5.53.0",
61
+ "@typescript-eslint/parser": "^5.53.0",
62
+ "eslint": "^8.34.0",
63
+ "eslint-config-prettier": "^8.6.0",
64
+ "eslint-config-sanity": "^6.0.0",
65
+ "eslint-plugin-prettier": "^4.2.1",
66
+ "eslint-plugin-react": "^7.32.2",
67
+ "eslint-plugin-react-hooks": "^4.6.0",
68
+ "husky": "^8.0.3",
69
+ "lint-staged": "^13.1.2",
70
+ "npm-run-all": "^4.1.5",
71
+ "prettier": "^2.8.4",
72
+ "prettier-plugin-packagejson": "^2.4.3",
73
+ "react": "^18.2.0",
74
+ "react-dom": "^18.2.0",
75
+ "react-is": "^18.2.0",
76
+ "rimraf": "^4.1.2",
77
+ "sanity": "^3.0.0",
78
+ "styled-components": "^5.3.6",
79
+ "typescript": "^4.9.5"
55
80
  },
56
- "dependencies": {
57
- "sanity-translations-tab": "^2.0.5"
81
+ "peerDependencies": {
82
+ "react": "^18",
83
+ "sanity": "^3"
84
+ },
85
+ "engines": {
86
+ "node": ">=14"
58
87
  }
59
88
  }
package/sanity.json ADDED
@@ -0,0 +1,8 @@
1
+ {
2
+ "parts": [
3
+ {
4
+ "implements": "part:@sanity/base/sanity-root",
5
+ "path": "./v2-incompatible.js"
6
+ }
7
+ ]
8
+ }