@ollang-dev/sdk 0.3.1

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.
Files changed (64) hide show
  1. package/bin/tms.js +47 -0
  2. package/dist/browser/index.d.ts +143 -0
  3. package/dist/browser/index.js +2336 -0
  4. package/dist/browser/ollang-browser.min.js +1 -0
  5. package/dist/browser/script-loader.d.ts +1 -0
  6. package/dist/browser/script-loader.js +53 -0
  7. package/dist/client.d.ts +13 -0
  8. package/dist/client.js +60 -0
  9. package/dist/index.d.ts +34 -0
  10. package/dist/index.js +74 -0
  11. package/dist/resources/cms.d.ts +29 -0
  12. package/dist/resources/cms.js +34 -0
  13. package/dist/resources/customInstructions.d.ts +11 -0
  14. package/dist/resources/customInstructions.js +24 -0
  15. package/dist/resources/orders.d.ts +13 -0
  16. package/dist/resources/orders.js +65 -0
  17. package/dist/resources/projects.d.ts +8 -0
  18. package/dist/resources/projects.js +29 -0
  19. package/dist/resources/revisions.d.ts +9 -0
  20. package/dist/resources/revisions.js +18 -0
  21. package/dist/resources/scans.d.ts +38 -0
  22. package/dist/resources/scans.js +52 -0
  23. package/dist/resources/uploads.d.ts +8 -0
  24. package/dist/resources/uploads.js +25 -0
  25. package/dist/tms/config.d.ts +16 -0
  26. package/dist/tms/config.js +172 -0
  27. package/dist/tms/detector/audio-detector.d.ts +27 -0
  28. package/dist/tms/detector/audio-detector.js +168 -0
  29. package/dist/tms/detector/auto-detect.d.ts +1 -0
  30. package/dist/tms/detector/auto-detect.js +152 -0
  31. package/dist/tms/detector/cms-detector.d.ts +17 -0
  32. package/dist/tms/detector/cms-detector.js +94 -0
  33. package/dist/tms/detector/content-type-detector.d.ts +79 -0
  34. package/dist/tms/detector/content-type-detector.js +2 -0
  35. package/dist/tms/detector/hardcoded-detector.d.ts +11 -0
  36. package/dist/tms/detector/hardcoded-detector.js +154 -0
  37. package/dist/tms/detector/i18n-detector.d.ts +16 -0
  38. package/dist/tms/detector/i18n-detector.js +311 -0
  39. package/dist/tms/detector/image-detector.d.ts +11 -0
  40. package/dist/tms/detector/image-detector.js +170 -0
  41. package/dist/tms/detector/text-detector.d.ts +9 -0
  42. package/dist/tms/detector/text-detector.js +35 -0
  43. package/dist/tms/detector/video-detector.d.ts +12 -0
  44. package/dist/tms/detector/video-detector.js +188 -0
  45. package/dist/tms/index.d.ts +12 -0
  46. package/dist/tms/index.js +38 -0
  47. package/dist/tms/multi-content-tms.d.ts +42 -0
  48. package/dist/tms/multi-content-tms.js +230 -0
  49. package/dist/tms/server/index.d.ts +1 -0
  50. package/dist/tms/server/index.js +1473 -0
  51. package/dist/tms/server/strapi-pusher.d.ts +31 -0
  52. package/dist/tms/server/strapi-pusher.js +296 -0
  53. package/dist/tms/server/strapi-schema.d.ts +47 -0
  54. package/dist/tms/server/strapi-schema.js +93 -0
  55. package/dist/tms/tms.d.ts +48 -0
  56. package/dist/tms/tms.js +875 -0
  57. package/dist/tms/types.d.ts +189 -0
  58. package/dist/tms/types.js +2 -0
  59. package/dist/tms/ui-dist/assets/index-5U1Hw3uo.css +1 -0
  60. package/dist/tms/ui-dist/assets/index-HvrqZV5Z.js +149 -0
  61. package/dist/tms/ui-dist/index.html +14 -0
  62. package/dist/types/index.d.ts +174 -0
  63. package/dist/types/index.js +2 -0
  64. package/package.json +98 -0
@@ -0,0 +1,230 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MultiContentTMS = void 0;
4
+ const index_js_1 = require("../index.js");
5
+ const text_detector_js_1 = require("./detector/text-detector.js");
6
+ const video_detector_js_1 = require("./detector/video-detector.js");
7
+ const image_detector_js_1 = require("./detector/image-detector.js");
8
+ const config_js_1 = require("./config.js");
9
+ class MultiContentTMS {
10
+ constructor(customConfig = {}) {
11
+ this.configManager = new config_js_1.ConfigManager();
12
+ this.config = this.configManager.load(customConfig);
13
+ this.ollangClient = new index_js_1.Ollang({
14
+ apiKey: this.config.ollang.apiKey,
15
+ baseUrl: this.config.ollang.baseUrl,
16
+ });
17
+ this.textDetector = new text_detector_js_1.TextDetector();
18
+ this.videoDetector = new video_detector_js_1.VideoDetector();
19
+ this.imageDetector = new image_detector_js_1.ImageDetector();
20
+ }
21
+ async scanAll() {
22
+ console.log('🔍 Scanning project for all content types...');
23
+ const detectionConfig = {
24
+ includePaths: this.config.detection.includePaths.map((p) => `${this.config.projectRoot}/${p}`),
25
+ excludePaths: this.config.detection.excludePaths,
26
+ includePatterns: this.config.detection.includePatterns,
27
+ };
28
+ const [i18nTexts, videos, images] = await Promise.all([
29
+ this.scanI18n(),
30
+ this.videoDetector.detect(this.config.projectRoot, detectionConfig),
31
+ this.imageDetector.detect(this.config.projectRoot, detectionConfig),
32
+ ]);
33
+ const i18nContent = i18nTexts.map((text) => ({
34
+ id: text.id,
35
+ type: 'i18n',
36
+ path: text.source.file,
37
+ metadata: {
38
+ key: text.i18nKey || text.id,
39
+ namespace: text.i18nNamespace,
40
+ text: text.text,
41
+ },
42
+ }));
43
+ const result = {
44
+ i18n: i18nContent,
45
+ videos,
46
+ images,
47
+ total: i18nContent.length + videos.length + images.length,
48
+ };
49
+ return result;
50
+ }
51
+ async scanI18n() {
52
+ const scanConfig = {
53
+ includePaths: this.config.detection.includePaths.map((p) => `${this.config.projectRoot}/${p}`),
54
+ excludePaths: this.config.detection.excludePaths,
55
+ includePatterns: this.config.detection.includePatterns,
56
+ detectI18n: true,
57
+ detectHardcoded: true,
58
+ detectCMS: false,
59
+ sourceLanguage: this.config.sourceLanguage,
60
+ };
61
+ return this.textDetector.scan(scanConfig);
62
+ }
63
+ async translate(request) {
64
+ const level = request.level || this.config.ollang.defaultLevel;
65
+ switch (request.contentType) {
66
+ case 'video':
67
+ return this.translateVideos(request.items, request.targetLanguage, level);
68
+ case 'image':
69
+ return this.translateImages(request.items, request.targetLanguage, level);
70
+ case 'i18n':
71
+ return this.translateI18n(request.items, request.targetLanguage, level);
72
+ default:
73
+ throw new Error(`Unsupported content type: ${request.contentType}`);
74
+ }
75
+ }
76
+ async translateVideos(videos, targetLanguage, level) {
77
+ console.log('🎬 Creating AI Dubbing orders for videos...');
78
+ if (videos.length === 0) {
79
+ throw new Error('No videos to translate');
80
+ }
81
+ const video = videos[0];
82
+ const FormData = require('form-data');
83
+ const fs = require('fs');
84
+ const formData = new FormData();
85
+ formData.append('file', fs.createReadStream(video.path));
86
+ formData.append('name', `Video-Dubbing-${Date.now()}`);
87
+ formData.append('sourceLanguage', this.config.sourceLanguage);
88
+ const uploadResponse = await this.ollangClient
89
+ .getClient()
90
+ .uploadFile('/integration/upload/direct', formData);
91
+ const projectId = uploadResponse.projectId;
92
+ const orderParams = {
93
+ orderType: 'aiDubbing',
94
+ level,
95
+ projectId,
96
+ targetLanguageConfigs: [
97
+ {
98
+ language: targetLanguage,
99
+ isRush: false,
100
+ },
101
+ ],
102
+ };
103
+ const order = await this.ollangClient.orders.create(orderParams);
104
+ return {
105
+ orderId: order.id,
106
+ orderType: 'aiDubbing',
107
+ status: 'pending',
108
+ contentType: 'video',
109
+ itemCount: videos.length,
110
+ };
111
+ }
112
+ async translateImages(images, targetLanguage, level) {
113
+ if (images.length === 0) {
114
+ throw new Error('No images to translate');
115
+ }
116
+ const image = images[0];
117
+ const FormData = require('form-data');
118
+ const fs = require('fs');
119
+ const formData = new FormData();
120
+ formData.append('file', fs.createReadStream(image.path));
121
+ formData.append('name', `Image-Translation-${Date.now()}`);
122
+ formData.append('sourceLanguage', this.config.sourceLanguage);
123
+ const uploadResponse = await this.ollangClient
124
+ .getClient()
125
+ .uploadFile('/integration/upload/direct', formData);
126
+ const projectId = uploadResponse.projectId;
127
+ const orderParams = {
128
+ orderType: 'document',
129
+ level,
130
+ projectId,
131
+ targetLanguageConfigs: [
132
+ {
133
+ language: targetLanguage,
134
+ isRush: false,
135
+ },
136
+ ],
137
+ };
138
+ const order = await this.ollangClient.orders.create(orderParams);
139
+ return {
140
+ orderId: order.id,
141
+ orderType: 'document',
142
+ status: 'pending',
143
+ contentType: 'image',
144
+ itemCount: images.length,
145
+ };
146
+ }
147
+ async translateI18n(items, targetLanguage, level) {
148
+ const documentData = {
149
+ metadata: {
150
+ filename: `i18n-translation-${Date.now()}.json`,
151
+ createdAt: new Date().toISOString(),
152
+ type: 'i18n',
153
+ sourceLanguage: this.config.sourceLanguage,
154
+ targetLanguage,
155
+ totalTexts: items.length,
156
+ },
157
+ slides: [
158
+ {
159
+ id: 'i18n_content',
160
+ index: 1,
161
+ textElements: items.map((item) => ({
162
+ id: item.id,
163
+ text: item.metadata.text,
164
+ })),
165
+ },
166
+ ],
167
+ };
168
+ const FormData = require('form-data');
169
+ const formData = new FormData();
170
+ const jsonContent = JSON.stringify(documentData, null, 2);
171
+ const jsonBlob = Buffer.from(jsonContent, 'utf-8');
172
+ formData.append('file', jsonBlob, {
173
+ filename: `i18n-translation-${Date.now()}.json`,
174
+ contentType: 'application/json',
175
+ });
176
+ formData.append('name', `I18n-Translation-${Date.now()}`);
177
+ formData.append('sourceLanguage', this.config.sourceLanguage);
178
+ const uploadResponse = await this.ollangClient
179
+ .getClient()
180
+ .uploadFile('/integration/upload/direct', formData);
181
+ const projectId = uploadResponse.projectId;
182
+ const orderParams = {
183
+ orderType: 'document',
184
+ level,
185
+ projectId,
186
+ targetLanguageConfigs: [
187
+ {
188
+ language: targetLanguage,
189
+ isRush: false,
190
+ },
191
+ ],
192
+ };
193
+ const order = await this.ollangClient.orders.create(orderParams);
194
+ return {
195
+ orderId: order.id,
196
+ orderType: 'document',
197
+ status: 'pending',
198
+ contentType: 'i18n',
199
+ itemCount: items.length,
200
+ };
201
+ }
202
+ async getOrderStatus(orderId) {
203
+ return this.ollangClient.orders.get(orderId);
204
+ }
205
+ async waitForCompletion(orderId, maxWaitSeconds = 600) {
206
+ const maxAttempts = maxWaitSeconds / 5;
207
+ let attempts = 0;
208
+ console.log(`⏳ Waiting for order ${orderId} to complete...`);
209
+ while (attempts < maxAttempts) {
210
+ const order = await this.ollangClient.orders.get(orderId);
211
+ if (order.status === 'completed') {
212
+ console.log(`✅ Order ${orderId} completed!`);
213
+ return order;
214
+ }
215
+ if (order.status === 'failed' || order.status === 'cancelled') {
216
+ throw new Error(`Order ${orderId} ${order.status}`);
217
+ }
218
+ await new Promise((resolve) => setTimeout(resolve, 5000));
219
+ attempts++;
220
+ }
221
+ throw new Error(`Order ${orderId} timed out after ${maxWaitSeconds} seconds`);
222
+ }
223
+ getSDK() {
224
+ return this.ollangClient;
225
+ }
226
+ getConfig() {
227
+ return { ...this.config };
228
+ }
229
+ }
230
+ exports.MultiContentTMS = MultiContentTMS;
@@ -0,0 +1 @@
1
+ export {};