@sw-tsdk/plugin-connector 3.13.1 → 3.13.2-next.3dfd44a

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 (74) hide show
  1. package/README.md +18 -18
  2. package/lib/commands/connector/build.js +168 -44
  3. package/lib/commands/connector/build.js.map +1 -1
  4. package/lib/commands/connector/sign.js +108 -12
  5. package/lib/commands/connector/sign.js.map +1 -1
  6. package/lib/commands/connector/validate.js +110 -10
  7. package/lib/commands/connector/validate.js.map +1 -1
  8. package/lib/commands/migrator/convert.d.ts +3 -0
  9. package/lib/commands/migrator/convert.js +201 -20
  10. package/lib/commands/migrator/convert.js.map +1 -1
  11. package/lib/templates/migrator-runners/plugin_override.txt +76 -4
  12. package/lib/templates/migrator-runners/runner_override.txt +30 -0
  13. package/lib/templates/migrator-runners/script_override.txt +77 -5
  14. package/lib/templates/swimlane/__init__.py +18 -0
  15. package/lib/templates/swimlane/core/__init__.py +0 -0
  16. package/lib/templates/swimlane/core/adapters/__init__.py +10 -0
  17. package/lib/templates/swimlane/core/adapters/app.py +59 -0
  18. package/lib/templates/swimlane/core/adapters/app_revision.py +49 -0
  19. package/lib/templates/swimlane/core/adapters/helper.py +84 -0
  20. package/lib/templates/swimlane/core/adapters/record.py +468 -0
  21. package/lib/templates/swimlane/core/adapters/record_revision.py +43 -0
  22. package/lib/templates/swimlane/core/adapters/report.py +65 -0
  23. package/lib/templates/swimlane/core/adapters/task.py +58 -0
  24. package/lib/templates/swimlane/core/adapters/usergroup.py +183 -0
  25. package/lib/templates/swimlane/core/bulk.py +48 -0
  26. package/lib/templates/swimlane/core/cache.py +165 -0
  27. package/lib/templates/swimlane/core/client.py +466 -0
  28. package/lib/templates/swimlane/core/cursor.py +100 -0
  29. package/lib/templates/swimlane/core/fields/__init__.py +46 -0
  30. package/lib/templates/swimlane/core/fields/attachment.py +82 -0
  31. package/lib/templates/swimlane/core/fields/base/__init__.py +15 -0
  32. package/lib/templates/swimlane/core/fields/base/cursor.py +90 -0
  33. package/lib/templates/swimlane/core/fields/base/field.py +149 -0
  34. package/lib/templates/swimlane/core/fields/base/multiselect.py +116 -0
  35. package/lib/templates/swimlane/core/fields/comment.py +48 -0
  36. package/lib/templates/swimlane/core/fields/datetime.py +112 -0
  37. package/lib/templates/swimlane/core/fields/history.py +28 -0
  38. package/lib/templates/swimlane/core/fields/list.py +266 -0
  39. package/lib/templates/swimlane/core/fields/number.py +38 -0
  40. package/lib/templates/swimlane/core/fields/reference.py +169 -0
  41. package/lib/templates/swimlane/core/fields/text.py +30 -0
  42. package/lib/templates/swimlane/core/fields/tracking.py +10 -0
  43. package/lib/templates/swimlane/core/fields/usergroup.py +137 -0
  44. package/lib/templates/swimlane/core/fields/valueslist.py +70 -0
  45. package/lib/templates/swimlane/core/resolver.py +46 -0
  46. package/lib/templates/swimlane/core/resources/__init__.py +0 -0
  47. package/lib/templates/swimlane/core/resources/app.py +136 -0
  48. package/lib/templates/swimlane/core/resources/app_revision.py +43 -0
  49. package/lib/templates/swimlane/core/resources/attachment.py +64 -0
  50. package/lib/templates/swimlane/core/resources/base.py +55 -0
  51. package/lib/templates/swimlane/core/resources/comment.py +33 -0
  52. package/lib/templates/swimlane/core/resources/record.py +499 -0
  53. package/lib/templates/swimlane/core/resources/record_revision.py +44 -0
  54. package/lib/templates/swimlane/core/resources/report.py +259 -0
  55. package/lib/templates/swimlane/core/resources/revision_base.py +69 -0
  56. package/lib/templates/swimlane/core/resources/task.py +16 -0
  57. package/lib/templates/swimlane/core/resources/usergroup.py +166 -0
  58. package/lib/templates/swimlane/core/search.py +31 -0
  59. package/lib/templates/swimlane/core/wrappedsession.py +12 -0
  60. package/lib/templates/swimlane/exceptions.py +191 -0
  61. package/lib/templates/swimlane/utils/__init__.py +132 -0
  62. package/lib/templates/swimlane/utils/date_validator.py +4 -0
  63. package/lib/templates/swimlane/utils/list_validator.py +7 -0
  64. package/lib/templates/swimlane/utils/str_validator.py +10 -0
  65. package/lib/templates/swimlane/utils/version.py +101 -0
  66. package/lib/transformers/base-transformer.js +61 -14
  67. package/lib/transformers/base-transformer.js.map +1 -1
  68. package/lib/transformers/connector-generator.d.ts +104 -2
  69. package/lib/transformers/connector-generator.js +1234 -51
  70. package/lib/transformers/connector-generator.js.map +1 -1
  71. package/lib/types/migrator-types.d.ts +22 -0
  72. package/lib/types/migrator-types.js.map +1 -1
  73. package/oclif.manifest.json +1 -1
  74. package/package.json +6 -6
@@ -7,6 +7,7 @@ const docker_1 = require("@sw-tsdk/docker");
7
7
  const core_2 = require("@oclif/core");
8
8
  const node_fs_1 = require("node:fs");
9
9
  const core_3 = require("@sw-tsdk/core");
10
+ const node_stream_1 = require("node:stream");
10
11
  // noinspection JSUnusedGlobalSymbols
11
12
  class Validate extends core_3.Base {
12
13
  async run() {
@@ -21,17 +22,37 @@ class Validate extends core_3.Base {
21
22
  try {
22
23
  await node_fs_1.promises.access(directory);
23
24
  }
24
- catch {
25
- this.error(`Could not access ${directory}`);
25
+ catch (error) {
26
+ const errorMessage = error instanceof Error ? error.message : String(error);
27
+ core_2.ux.error(`Could not access directory: ${directory}`, { exit: false });
28
+ core_2.ux.log('');
29
+ core_2.ux.log('Error details:');
30
+ core_2.ux.log(` ${errorMessage}`);
31
+ core_2.ux.log('');
32
+ core_2.ux.log('Please verify:');
33
+ core_2.ux.log(` 1. The directory path is correct: ${directory}`);
34
+ core_2.ux.log(' 2. The directory exists');
35
+ core_2.ux.log(' 3. You have proper permissions to access the directory');
36
+ this.error('Directory access failed');
26
37
  }
27
38
  const docker = new docker_1.Docker();
28
39
  core_2.ux.action.start('Checking for docker...');
29
- await docker.ping();
40
+ const dockerAvailable = await docker.ping();
30
41
  core_2.ux.action.stop();
42
+ if (!dockerAvailable) {
43
+ core_2.ux.log('');
44
+ core_2.ux.error('Docker is not available. Cannot proceed with validation.', { exit: false });
45
+ core_2.Errors.exit(1);
46
+ }
31
47
  if (!skipPull) {
32
48
  core_2.ux.action.start(`Pulling image (${image})...`);
33
- await docker.pullImage(image);
49
+ const pullSuccess = await docker.pullImage(image);
34
50
  core_2.ux.action.stop();
51
+ if (!pullSuccess) {
52
+ core_2.ux.log('');
53
+ core_2.ux.error('Failed to pull image. Cannot proceed with validation.', { exit: false });
54
+ core_2.Errors.exit(1);
55
+ }
35
56
  }
36
57
  const bindings = [`${directory}:/connector`];
37
58
  const commands = ['connector:validate'];
@@ -41,7 +62,25 @@ class Validate extends core_3.Base {
41
62
  commands.push('--skip-verification');
42
63
  }
43
64
  else {
44
- commands.push('--key', key || '');
65
+ // Validate key file exists if a path is provided
66
+ const keyPath = (0, node_path_1.resolve)(key);
67
+ try {
68
+ await node_fs_1.promises.access(keyPath);
69
+ commands.push('--key', keyPath);
70
+ }
71
+ catch (error) {
72
+ const errorMessage = error instanceof Error ? error.message : String(error);
73
+ core_2.ux.error(`Could not access key file: ${keyPath}`, { exit: false });
74
+ core_2.ux.log('');
75
+ core_2.ux.log('Error details:');
76
+ core_2.ux.log(` ${errorMessage}`);
77
+ core_2.ux.log('');
78
+ core_2.ux.log('Please verify:');
79
+ core_2.ux.log(` 1. The key file path is correct: ${keyPath}`);
80
+ core_2.ux.log(' 2. The file exists and is readable');
81
+ core_2.ux.log(' 3. You have proper permissions to access the file');
82
+ core_2.Errors.exit(1);
83
+ }
45
84
  }
46
85
  }
47
86
  commands.push(`/connector/${connector}`);
@@ -53,11 +92,72 @@ class Validate extends core_3.Base {
53
92
  },
54
93
  };
55
94
  core_2.ux.action.start('Validating...');
56
- const outputStream = (0, core_3.writableNoopStream)();
57
- const errorStream = (0, core_3.writableNoopStream)();
58
- const success = await docker.runImage(image, createOptions, outputStream, errorStream);
59
- core_2.ux.action.stop();
60
- if (!success) {
95
+ // Capture output and errors for better logging
96
+ let outputBuffer = '';
97
+ let errorBuffer = '';
98
+ const outputStream = new node_stream_1.Writable({
99
+ write(chunk, encoding, callback) {
100
+ outputBuffer += chunk.toString();
101
+ process.stdout.write(chunk);
102
+ callback();
103
+ },
104
+ });
105
+ const errorStream = new node_stream_1.Writable({
106
+ write(chunk, encoding, callback) {
107
+ errorBuffer += chunk.toString();
108
+ process.stderr.write(chunk);
109
+ callback();
110
+ },
111
+ });
112
+ try {
113
+ const success = await docker.runImage(image, createOptions, outputStream, errorStream);
114
+ core_2.ux.action.stop();
115
+ if (!success) {
116
+ core_2.ux.log('');
117
+ core_2.ux.error('Validation failed.', { exit: false });
118
+ if (errorBuffer) {
119
+ core_2.ux.log('');
120
+ core_2.ux.log('Error output:');
121
+ core_2.ux.log(errorBuffer);
122
+ }
123
+ if (outputBuffer) {
124
+ core_2.ux.log('');
125
+ core_2.ux.log('Output:');
126
+ core_2.ux.log(outputBuffer);
127
+ }
128
+ core_2.Errors.exit(1);
129
+ }
130
+ }
131
+ catch (error) {
132
+ // Re-throw ExitError from Errors.exit() without logging misleading messages
133
+ // ExitError is thrown by Errors.exit() and indicates intentional exit
134
+ if (error && typeof error === 'object' && 'exitCode' in error) {
135
+ throw error;
136
+ }
137
+ core_2.ux.action.stop();
138
+ const errorMessage = error instanceof Error ? error.message : String(error);
139
+ const errorStack = error instanceof Error ? error.stack : undefined;
140
+ core_2.ux.error('Failed to run validation container.', { exit: false });
141
+ if (errorMessage) {
142
+ core_2.ux.log('');
143
+ core_2.ux.log('Error details:');
144
+ core_2.ux.log(` ${errorMessage}`);
145
+ }
146
+ if (errorStack && core_2.ux.config.outputLevel === 'debug') {
147
+ core_2.ux.log('');
148
+ core_2.ux.log('Stack trace:');
149
+ core_2.ux.log(errorStack);
150
+ }
151
+ if (errorBuffer) {
152
+ core_2.ux.log('');
153
+ core_2.ux.log('Container error output:');
154
+ core_2.ux.log(errorBuffer);
155
+ }
156
+ if (outputBuffer) {
157
+ core_2.ux.log('');
158
+ core_2.ux.log('Container output:');
159
+ core_2.ux.log(outputBuffer);
160
+ }
61
161
  core_2.Errors.exit(1);
62
162
  }
63
163
  }
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/commands/connector/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/commands/connector/validate.ts"],"names":[],"mappings":"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"}
@@ -19,7 +19,10 @@ export declare class Migrate extends Base {
19
19
  * Basically, each array item is a different connector
20
20
  */
21
21
  private collectJobs;
22
+ private extractImportsFromScriptContent;
22
23
  private extractImportsFromScript;
24
+ private collectImportsFromContent;
25
+ private getTopLevelPackageName;
23
26
  private decompressIfNeeded;
24
27
  run(): Promise<void>;
25
28
  }
@@ -15,10 +15,17 @@ class Migrate extends core_1.Base {
15
15
  async processTaskFiles(taskFiles) {
16
16
  const taskImports = new Set();
17
17
  const importPromises = taskFiles.map(async (taskFile) => {
18
- const pyFilePath = taskFile.replace('.json', '.py');
19
- const scriptImports = await this.extractImportsFromScript(pyFilePath);
20
- for (const importName of scriptImports)
21
- taskImports.add(importName);
18
+ try {
19
+ const taskContent = await node_fs_1.promises.readFile(taskFile, 'utf8');
20
+ const taskJson = JSON.parse(taskContent);
21
+ const script = taskJson?.Action?.Script || '';
22
+ const scriptImports = await this.extractImportsFromScriptContent(script);
23
+ for (const importName of scriptImports)
24
+ taskImports.add(importName);
25
+ }
26
+ catch {
27
+ this.warn(`Could not extract imports from task file: ${taskFile}`);
28
+ }
22
29
  });
23
30
  await Promise.all(importPromises);
24
31
  return taskImports;
@@ -71,9 +78,17 @@ class Migrate extends core_1.Base {
71
78
  .filter(file => file.endsWith('.json'))
72
79
  .map(file => (0, node_path_1.join)(tasksFolder, file));
73
80
  const scriptImportLists = await Promise.all(taskFiles.map(async (taskFile) => {
74
- const pyFilePath = taskFile.replace('.json', '.py');
75
- const scriptImports = await this.extractImportsFromScript(pyFilePath);
76
- return Array.isArray(scriptImports) ? scriptImports : [];
81
+ try {
82
+ const taskContent = await node_fs_1.promises.readFile(taskFile, 'utf8');
83
+ const taskJson = JSON.parse(taskContent);
84
+ const script = taskJson?.Action?.Script || '';
85
+ const scriptImports = await this.extractImportsFromScriptContent(script);
86
+ return [...scriptImports];
87
+ }
88
+ catch {
89
+ this.warn(`Could not extract imports from task file: ${taskFile}`);
90
+ return [];
91
+ }
77
92
  }));
78
93
  for (const scriptImports of scriptImportLists) {
79
94
  for (const importName of scriptImports) {
@@ -90,6 +105,7 @@ class Migrate extends core_1.Base {
90
105
  appFolderPath,
91
106
  connectorName,
92
107
  taskFilePaths: taskFiles,
108
+ taskImports,
93
109
  };
94
110
  });
95
111
  const appResults = await Promise.all(appFolderPromises);
@@ -98,21 +114,78 @@ class Migrate extends core_1.Base {
98
114
  const nestedAppTasks = await Promise.all(pythonDirPromises);
99
115
  return nestedAppTasks.flat();
100
116
  }
117
+ async extractImportsFromScriptContent(scriptContent) {
118
+ const usedPackages = new Set();
119
+ if (!scriptContent || typeof scriptContent !== 'string') {
120
+ return usedPackages;
121
+ }
122
+ try {
123
+ this.collectImportsFromContent(scriptContent, usedPackages);
124
+ }
125
+ catch (error) {
126
+ this.warn(`Could not extract imports from script content: ${error?.message || 'Unknown error'}`);
127
+ }
128
+ return usedPackages;
129
+ }
101
130
  async extractImportsFromScript(pyFilePath) {
102
131
  const usedPackages = new Set();
103
132
  try {
104
- const content = await node_fs_1.promises.readFile(pyFilePath, 'utf8');
105
- // `import X` and `from X import Y`
106
- const importMatches = content.matchAll(/(?:from|import) (\w+)/g);
107
- for (const match of importMatches) {
108
- usedPackages.add(match[1]);
133
+ // Check if file exists first
134
+ if (!(await (0, core_1.fileExists)(pyFilePath))) {
135
+ this.warn(`Python file does not exist: ${pyFilePath}`);
136
+ return usedPackages;
109
137
  }
138
+ const content = await node_fs_1.promises.readFile(pyFilePath, 'utf8');
139
+ this.collectImportsFromContent(content, usedPackages);
110
140
  }
111
- catch {
112
- this.warn(`Could not extract imports from: ${pyFilePath}`);
141
+ catch (error) {
142
+ // Provide more specific error information
143
+ const errorMessage = error?.code === 'EACCES' ?
144
+ `Permission denied reading file: ${pyFilePath}` :
145
+ (error?.code === 'ENOENT' ?
146
+ `File not found: ${pyFilePath}` :
147
+ `Could not extract imports from: ${pyFilePath} (${error?.message || 'Unknown error'})`);
148
+ this.warn(errorMessage);
113
149
  }
114
150
  return usedPackages;
115
151
  }
152
+ collectImportsFromContent(content, usedPackages) {
153
+ for (const line of content.split('\n')) {
154
+ const withoutComment = line.split('#')[0]?.trimStart() ?? '';
155
+ if (!withoutComment)
156
+ continue;
157
+ if (withoutComment.startsWith('import ')) {
158
+ const importClause = withoutComment.slice('import '.length).trim();
159
+ if (!importClause)
160
+ continue;
161
+ for (const segment of importClause.split(',')) {
162
+ const moduleToken = segment.trim().split(/\s+/)[0];
163
+ const packageName = this.getTopLevelPackageName(moduleToken);
164
+ if (packageName)
165
+ usedPackages.add(packageName);
166
+ }
167
+ continue;
168
+ }
169
+ if (withoutComment.startsWith('from ')) {
170
+ const importIndex = withoutComment.indexOf(' import ');
171
+ if (importIndex === -1)
172
+ continue;
173
+ const sourceModule = withoutComment.slice('from '.length, importIndex).trim();
174
+ const packageName = this.getTopLevelPackageName(sourceModule);
175
+ if (packageName)
176
+ usedPackages.add(packageName);
177
+ }
178
+ }
179
+ }
180
+ getTopLevelPackageName(modulePath) {
181
+ const normalized = modulePath.replace(/^\.+/, '').trim();
182
+ if (!normalized)
183
+ return '';
184
+ const packageName = normalized.split('.')[0];
185
+ if (!packageName || packageName.toLowerCase().startsWith('sw_'))
186
+ return '';
187
+ return packageName;
188
+ }
116
189
  async decompressIfNeeded(fromDirectory) {
117
190
  if (fromDirectory.endsWith('.zip')) {
118
191
  const extractPath = fromDirectory.replace(/\.zip$/, '');
@@ -167,13 +240,106 @@ class Migrate extends core_1.Base {
167
240
  const groupPromises = groupedAppTasks.map(async (group) => {
168
241
  this.log(`\nProcessing [${group.pythonDirName}] / [${group.connectorName}]`);
169
242
  this.log(`Found ${group.taskFilePaths.length} task file(s) in: ${group.appFolderPath}`);
170
- const connectorToDir = (0, node_path_1.join)(toDirectory, group.connectorName.replaceAll(' ', '_').toLowerCase());
243
+ // Remove disallowed path characters from folder name
244
+ const sanitizedFolderName = group.connectorName
245
+ .replaceAll(/[()/:|]/g, '') // Remove parentheses, slashes, colons, and pipes
246
+ .replaceAll(' ', '_')
247
+ .toLowerCase();
248
+ const connectorToDir = (0, node_path_1.join)(toDirectory, sanitizedFolderName);
171
249
  await connector_generator_1.ConnectorGenerator.generateBaseStructure(connectorToDir);
172
250
  await connector_generator_1.ConnectorGenerator.generateLogo(connectorToDir);
173
251
  await connector_generator_1.ConnectorGenerator.generateConnectorManifest(answers, group, connectorToDir);
174
252
  await connector_generator_1.ConnectorGenerator.generateRunnerOverride(connectorToDir);
253
+ await connector_generator_1.ConnectorGenerator.addExtractedImportsToRequirements(connectorToDir, group.taskImports);
254
+ // First, collect all forked plugin names to initialize them before processing tasks
255
+ const forkedPluginNames = new Set();
256
+ const taskContents = await Promise.all(group.taskFilePaths.map(async (taskFilePath) => {
257
+ try {
258
+ const content = await node_fs_1.promises.readFile(taskFilePath, 'utf8');
259
+ return { taskFilePath, content };
260
+ }
261
+ catch {
262
+ return null;
263
+ }
264
+ }));
265
+ for (const taskContent of taskContents) {
266
+ if (!taskContent)
267
+ continue;
268
+ try {
269
+ const fileJson = JSON.parse(taskContent.content);
270
+ const transformer = (0, transformers_1.getTransformer)(fileJson);
271
+ const transformationResult = transformer.transform(fileJson);
272
+ if (transformationResult.type === 'forked-plugin' && transformationResult.forkedName) {
273
+ forkedPluginNames.add(transformationResult.forkedName);
274
+ }
275
+ }
276
+ catch {
277
+ // Skip if we can't parse
278
+ }
279
+ }
280
+ // Initialize all forked plugins sequentially to avoid race conditions; collect packages excluded via EXCLUDED_PACKAGES that need runner.sh (e.g. ssdeep)
281
+ const excludedRunnerPackages = new Set();
282
+ for (const forkedName of forkedPluginNames) {
283
+ try {
284
+ // Create a dummy transformation result just for initialization
285
+ const dummyResult = {
286
+ type: 'forked-plugin',
287
+ forkedName,
288
+ connectorName: group.connectorName,
289
+ pythonDefinition: group.pythonDefinition,
290
+ };
291
+ // eslint-disable-next-line no-await-in-loop
292
+ const fromInit = await connector_generator_1.ConnectorGenerator.initializeForkedPlugin(dummyResult, fromDirectory, connectorToDir);
293
+ for (const p of fromInit)
294
+ excludedRunnerPackages.add(p);
295
+ }
296
+ catch (error) {
297
+ console.error(`Error initializing forked plugin ${forkedName}:`, error);
298
+ }
299
+ }
300
+ // Collect all asset parameters from all tasks to avoid race conditions
301
+ const allAssetParameters = [];
302
+ let applicationInfo = null;
303
+ try {
304
+ const appInfoPath = (0, node_path_1.join)(group.appFolderPath, 'applicationInfo.json');
305
+ const rawInfo = await node_fs_1.promises.readFile(appInfoPath, 'utf8');
306
+ applicationInfo = JSON.parse(rawInfo);
307
+ }
308
+ catch {
309
+ // applicationInfo.json optional; record inputs will keep inferred types
310
+ }
311
+ const currentApplicationId = (0, node_path_1.basename)(group.appFolderPath);
312
+ const pythonDirPath = (0, node_path_1.dirname)(group.appFolderPath);
313
+ const applicationInfoMap = applicationInfo ? { [currentApplicationId]: applicationInfo } : {};
314
+ // Collect ApplicationIds from all tasks' Outputs (e.g. InsertUpdateRecordOutput.ApplicationId) and load their applicationInfo
315
+ const outputAppIdGroups = await Promise.all(group.taskFilePaths.map(async (taskFilePath) => {
316
+ try {
317
+ const content = await node_fs_1.promises.readFile(taskFilePath, 'utf8');
318
+ const taskJson = JSON.parse(content);
319
+ return (taskJson?.Outputs ?? []).map((output) => output?.ApplicationId ?? output?.applicationId)
320
+ .filter((appId) => typeof appId === 'string');
321
+ }
322
+ catch {
323
+ return [];
324
+ }
325
+ }));
326
+ const outputAppIds = new Set(outputAppIdGroups.flat());
327
+ const missingAppIds = [...outputAppIds].filter(appId => !applicationInfoMap[appId]);
328
+ const appInfoEntries = await Promise.all(missingAppIds.map(async (appId) => {
329
+ try {
330
+ const rawInfo = await node_fs_1.promises.readFile((0, node_path_1.join)(pythonDirPath, appId, 'applicationInfo.json'), 'utf8');
331
+ return { appId, appInfo: JSON.parse(rawInfo) };
332
+ }
333
+ catch {
334
+ return null;
335
+ }
336
+ }));
337
+ for (const appInfoEntry of appInfoEntries) {
338
+ if (appInfoEntry) {
339
+ applicationInfoMap[appInfoEntry.appId] = appInfoEntry.appInfo;
340
+ }
341
+ }
175
342
  const taskPromises = group.taskFilePaths.map(async (taskFilePath) => {
176
- const initializedConnectors = new Set();
177
343
  const content = await node_fs_1.promises.readFile(taskFilePath, 'utf8');
178
344
  let fileJson;
179
345
  try {
@@ -184,19 +350,34 @@ class Migrate extends core_1.Base {
184
350
  }
185
351
  const transformer = (0, transformers_1.getTransformer)(fileJson);
186
352
  const transformationResult = transformer.transform(fileJson);
353
+ connector_generator_1.ConnectorGenerator.patchRecordInputTypes(transformationResult, applicationInfo);
354
+ connector_generator_1.ConnectorGenerator.patchOutputDateConversions(transformationResult, applicationInfoMap, currentApplicationId);
187
355
  if (!transformer.scriptIsValid(transformationResult.script)) {
188
356
  this.warn(`Found code that is not supported in turbine: ${taskFilePath}`);
189
357
  }
190
358
  transformationResult.connectorName = group.connectorName;
191
359
  transformationResult.pythonDefinition = group.pythonDefinition;
192
- if (transformationResult.type === 'forked-plugin' && !initializedConnectors.has(transformationResult.forkedName)) {
193
- initializedConnectors.add(transformationResult.forkedName);
194
- await connector_generator_1.ConnectorGenerator.initializeForkedPlugin(transformationResult, fromDirectory, connectorToDir);
195
- }
360
+ // Forked plugins are already initialized above, so skip initialization here
196
361
  await connector_generator_1.ConnectorGenerator.generateAction(transformationResult, connectorToDir);
197
362
  await connector_generator_1.ConnectorGenerator.generateActionConfig(transformationResult, connectorToDir);
363
+ // Collect asset parameters instead of writing immediately
364
+ if (transformationResult.assetParameters && transformationResult.assetParameters.length > 0) {
365
+ allAssetParameters.push(...transformationResult.assetParameters);
366
+ }
198
367
  });
199
368
  await Promise.all(taskPromises);
369
+ // Write all asset parameters once after all tasks are processed
370
+ if (allAssetParameters.length > 0) {
371
+ await connector_generator_1.ConnectorGenerator.addAssetParameters(connectorToDir, allAssetParameters, group.connectorName);
372
+ }
373
+ // Deduplicate requirements after all tasks are processed
374
+ await connector_generator_1.ConnectorGenerator.deduplicateRequirements(connectorToDir);
375
+ // Generate compile.sh if needed (for swimbundle_utils)
376
+ await connector_generator_1.ConnectorGenerator.generateCompileScript(connectorToDir);
377
+ // Generate runner.sh for system deps (wkhtmltopdf for sw_swimlane_email, ssdeep via apt+pip when excluded from requirements)
378
+ const needsSsdeep = [...group.taskImports].some(name => name.toLowerCase() === 'ssdeep') ||
379
+ excludedRunnerPackages.has('ssdeep');
380
+ await connector_generator_1.ConnectorGenerator.generateRunnerScript(connectorToDir, forkedPluginNames.has('sw_swimlane_email'), needsSsdeep);
200
381
  });
201
382
  await Promise.all(groupPromises);
202
383
  this.log(`\nDone processing. Converted files at: ${toDirectory}`);
@@ -1 +1 @@
1
- {"version":3,"file":"convert.js","sourceRoot":"","sources":["../../../src/commands/migrator/convert.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"convert.js","sourceRoot":"","sources":["../../../src/commands/migrator/convert.ts"],"names":[],"mappings":"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"}
@@ -9,22 +9,94 @@ class RunnerOverride(RO):
9
9
  super().__init__(asset, asset_schema, http_proxy)
10
10
 
11
11
  def run(self, inputs, action_schema):
12
+ # Rebuild inputs from YAML-defined keys (empty per type), then merge asset, then overlay incoming inputs
13
+ # INPUTS_MERGE_HERE
12
14
  sw_context = SwimlaneContext(asset=self.asset, asset_schema=self.asset_schema,
13
15
  http_proxy=self.http_proxy, inputs=inputs)
14
16
 
17
+ from swimlane import Swimlane
18
+ Swimlane.turbineAccountId = sw_context.inputs.pop('TurbineAccountId', '')
19
+ Swimlane.turbineTenantId = sw_context.inputs.pop('TurbineTenantId', '')
20
+ Swimlane._api_root = f'/api/account/{Swimlane.turbineAccountId}/tenant/{Swimlane.turbineTenantId}/'
21
+ Swimlane._execute_task_webhook_url = sw_context.inputs.pop('ExecuteTaskWebhookUrl', '')
15
22
  plugin_instance = SwMain(sw_context)
16
23
  plugin_response = plugin_instance.execute()
17
24
 
25
+ import os
26
+ import base64
27
+ import requests
28
+ import re
29
+ IPC_API_URI = os.getenv('IPC_API_URI', '')
30
+ IPC_API_TOKEN = os.getenv('IPC_API_TOKEN', '')
31
+
32
+ OUTPUT_DATE_CONVERSIONS = __OUTPUT_DATE_CONVERSIONS__
33
+
34
+ def convert_timestamp(value, timetype):
35
+ import pendulum
36
+ if timetype == "milliseconds":
37
+ value = value / 1000
38
+ if timetype in ('milliseconds', 'seconds'):
39
+ return pendulum.from_timestamp(value).to_iso8601_string()
40
+ return pendulum.from_format(value, timetype).to_iso8601_string()
41
+
42
+ def sanitize_filename(filename):
43
+ """Removes or replaces illegal characters from file names."""
44
+ illegal_chars = r'[\/:*?"<>|[\]{}()\%]' # Define characters to be removed
45
+ sanitized = re.sub(illegal_chars, '', filename) # Remove illegal characters
46
+ return sanitized.strip() # Remove leading/trailing spaces
47
+
48
+ def handle_output_files(output):
49
+ post_url = f"{IPC_API_URI}/files"
50
+ params = {"token": IPC_API_TOKEN}
51
+ # There are potentially many dicts in output, but usually only one
52
+ for o in output:
53
+ for key in o:
54
+ file_output = o.get(key, None)
55
+ temp_files = []
56
+ if file_output and isinstance(file_output, list):
57
+ # value is a list, but we only want to proceed if it's a list of files
58
+ if all(isinstance(i, dict) and 'base64' in i and 'filename' in i for i in file_output):
59
+ # we need to convert the objects to turbine format, then upload
60
+ temp_files = [{'file_data': base64.b64decode(i['base64']), 'file_name': sanitize_filename(i['filename'])} for i in file_output]
61
+ attachments = []
62
+ for file in temp_files:
63
+ attachments.append(
64
+ (
65
+ "files",
66
+ (
67
+ file["file_name"],
68
+ file["file_data"],
69
+ "multipart/form-data",
70
+ )
71
+ )
72
+ )
73
+ res = requests.post(post_url, files=attachments, params=params)
74
+ res.raise_for_status()
75
+ o[key] = res.json()
76
+ for key, timetype in OUTPUT_DATE_CONVERSIONS.items():
77
+ if key in o and o[key] is not None:
78
+ try:
79
+ o[key] = convert_timestamp(o[key], timetype)
80
+ except Exception:
81
+ pass
82
+
83
+ return output
18
84
  if isinstance(plugin_response, dict):
19
- return plugin_response # Already a dictionary
85
+ plugin_response["sw_task_status"] = "success"
86
+ return {"output": handle_output_files([plugin_response])} # Already a dictionary
20
87
 
21
88
  elif isinstance(plugin_response, list):
22
- return {"plugin_output": plugin_response} # Wrap in a dictionary
89
+ # Add sw_task_status to each dictionary in the list
90
+ for item in plugin_response:
91
+ if isinstance(item, dict):
92
+ item["sw_task_status"] = "success"
93
+ return {"output": handle_output_files(plugin_response)} # Wrap in a dictionary
23
94
 
24
95
  elif plugin_response is None:
25
- return {"plugin_output": None} # Handle None case explicitly
96
+ return {"output": [{"sw_task_status": "success"}]} # Handle None case explicitly
26
97
  else:
27
- return {"plugin_output": plugin_response} # Wrap other types in a dictionary
98
+ # For other types, wrap in a dictionary with sw_task_status
99
+ return {"output": [{"result": plugin_response, "sw_task_status": "success"}]} # Wrap other types in a dictionary
28
100
  return plugin_response
29
101
 
30
102
  # IMPORTED CODE BELOW