@514labs/moose-lib 0.6.321-ci-5-ga23d35fe → 0.6.322-ci-1-gb296906d

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.
@@ -39,7 +39,7 @@ var mooseJsonEncode = (data) => {
39
39
  };
40
40
 
41
41
  // src/scripts/workflow.ts
42
- var { getWorkflowByName, getTaskForWorkflow } = (0, import_workflow.proxyActivities)({
42
+ var { getDmv2Workflow, getTaskForWorkflow } = (0, import_workflow.proxyActivities)({
43
43
  startToCloseTimeout: "1 minutes",
44
44
  retry: {
45
45
  maximumAttempts: 1
@@ -49,7 +49,9 @@ async function ScriptWorkflow(request, inputData) {
49
49
  const state = {
50
50
  completedSteps: [],
51
51
  currentStep: null,
52
- failedStep: null
52
+ failedStep: null,
53
+ scriptPath: null,
54
+ inputData: null
53
55
  };
54
56
  const results = [];
55
57
  const workflowName = request.workflow_name;
@@ -59,9 +61,9 @@ async function ScriptWorkflow(request, inputData) {
59
61
  );
60
62
  try {
61
63
  currentData = JSON.parse(mooseJsonEncode(currentData));
62
- const workflow = await getWorkflowByName(workflowName);
64
+ const workflow = await getDmv2Workflow(workflowName);
63
65
  const task = request.execution_mode === "start" ? workflow.config.startingTask : await getTaskForWorkflow(workflowName, request.continue_from_task);
64
- const result = await handleTask(workflow, task, currentData);
66
+ const result = await handleDmv2Task(workflow, task, currentData);
65
67
  results.push(...result);
66
68
  return results;
67
69
  } catch (error) {
@@ -69,7 +71,7 @@ async function ScriptWorkflow(request, inputData) {
69
71
  throw error;
70
72
  }
71
73
  }
72
- async function handleTask(workflow, task, inputData) {
74
+ async function handleDmv2Task(workflow, task, inputData) {
73
75
  const configTimeout = task.config.timeout;
74
76
  let taskTimeout;
75
77
  if (!configTimeout) {
@@ -95,7 +97,7 @@ async function handleTask(workflow, task, inputData) {
95
97
  } else {
96
98
  activityOptions.scheduleToCloseTimeout = "87600h";
97
99
  }
98
- const { executeTask } = (0, import_workflow.proxyActivities)(activityOptions);
100
+ const { executeDmv2Task } = (0, import_workflow.proxyActivities)(activityOptions);
99
101
  let taskCompleted = false;
100
102
  const monitorTask = async () => {
101
103
  import_workflow.log.info(`Monitor task starting for ${task.name}`);
@@ -114,7 +116,7 @@ async function handleTask(workflow, task, inputData) {
114
116
  import_workflow.log.info(`Monitor task exiting because main task completed`);
115
117
  };
116
118
  const result = await Promise.race([
117
- executeTask(workflow, task, inputData).then((taskResult) => {
119
+ executeDmv2Task(workflow, task, inputData).then((taskResult) => {
118
120
  return {
119
121
  type: "task_completed",
120
122
  data: taskResult
@@ -134,12 +136,12 @@ async function handleTask(workflow, task, inputData) {
134
136
  return results;
135
137
  }
136
138
  for (const childTask of task.config.onComplete) {
137
- const childResult = await handleTask(workflow, childTask, result.data);
139
+ const childResult = await handleDmv2Task(workflow, childTask, result.data);
138
140
  results.push(...childResult);
139
141
  }
140
142
  if (task.name.endsWith("_extract") && result && typeof result === "object" && result.data && typeof result.data === "object" && "hasMore" in result.data && result.data.hasMore === true) {
141
143
  import_workflow.log.info(`Extract task ${task.name} has more data, restarting chain...`);
142
- const nextBatchResults = await handleTask(workflow, task, null);
144
+ const nextBatchResults = await handleDmv2Task(workflow, task, null);
143
145
  results.push(...nextBatchResults);
144
146
  }
145
147
  return results;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/scripts/workflow.ts","../../src/scripts/serialization.ts"],"sourcesContent":["import {\n log as logger,\n ActivityOptions,\n proxyActivities,\n workflowInfo,\n continueAsNew,\n sleep,\n} from \"@temporalio/workflow\";\nimport { Duration } from \"@temporalio/common\";\nimport { Task, Workflow } from \"../dmv2\";\n\nimport { WorkflowState } from \"./types\";\nimport { mooseJsonEncode } from \"./serialization\";\n\ninterface WorkflowRequest {\n workflow_name: string;\n execution_mode: \"start\" | \"continue_as_new\";\n continue_from_task?: string; // Only for continue_as_new\n}\n\nconst { getWorkflowByName, getTaskForWorkflow } = proxyActivities({\n startToCloseTimeout: \"1 minutes\",\n retry: {\n maximumAttempts: 1,\n },\n});\n\nexport async function ScriptWorkflow(\n request: WorkflowRequest,\n inputData?: any,\n): Promise<any[]> {\n const state: WorkflowState = {\n completedSteps: [],\n currentStep: null,\n failedStep: null,\n };\n\n const results: any[] = [];\n const workflowName = request.workflow_name;\n let currentData = inputData?.data || inputData || {};\n\n logger.info(\n `Starting workflow: ${workflowName} (mode: ${request.execution_mode}) with data: ${JSON.stringify(currentData)}`,\n );\n\n try {\n currentData = JSON.parse(mooseJsonEncode(currentData));\n const workflow = await getWorkflowByName(workflowName);\n const task =\n request.execution_mode === \"start\" ?\n workflow.config.startingTask\n : await getTaskForWorkflow(workflowName, request.continue_from_task!);\n const result = await handleTask(workflow, task, currentData);\n results.push(...result);\n\n return results;\n } catch (error) {\n state.failedStep = workflowName;\n throw error;\n }\n}\n\nasync function handleTask(\n workflow: Workflow,\n task: Task<any, any>,\n inputData: any,\n): Promise<any[]> {\n // Handle timeout configuration\n const configTimeout = task.config.timeout;\n let taskTimeout: Duration | undefined;\n\n if (!configTimeout) {\n taskTimeout = \"1h\";\n } else if (configTimeout === \"never\") {\n taskTimeout = undefined;\n } else {\n taskTimeout = configTimeout as Duration;\n }\n\n const taskRetries = task.config.retries ?? 3;\n\n const timeoutMessage =\n taskTimeout ? `with timeout ${taskTimeout}` : \"with no timeout (unlimited)\";\n logger.info(\n `Handling task ${task.name} ${timeoutMessage} and retries ${taskRetries}`,\n );\n\n const activityOptions: ActivityOptions = {\n heartbeatTimeout: \"10s\",\n retry: {\n maximumAttempts: taskRetries,\n },\n };\n\n // Temporal requires either startToCloseTimeout OR scheduleToCloseTimeout to be set\n // For unlimited timeout (timeout = \"none\"), we use scheduleToCloseTimeout with a very large value\n // For normal timeouts, we use startToCloseTimeout for single execution timeout\n if (taskTimeout) {\n // Normal timeout - limit each individual execution attempt\n activityOptions.startToCloseTimeout = taskTimeout;\n } else {\n // Unlimited timeout - set scheduleToCloseTimeout to a very large value (10 years)\n // This satisfies Temporal's requirement while effectively allowing unlimited execution\n activityOptions.scheduleToCloseTimeout = \"87600h\"; // 10 years\n }\n\n const { executeTask } = proxyActivities(activityOptions);\n\n let taskCompleted = false;\n\n const monitorTask = async () => {\n logger.info(`Monitor task starting for ${task.name}`);\n while (!taskCompleted) {\n const info = workflowInfo();\n\n // Continue-as-new only when suggested by Temporal\n if (info.continueAsNewSuggested) {\n logger.info(`ContinueAsNew suggested by Temporal`);\n return await continueAsNew({\n workflow_name: workflow.name,\n execution_mode: \"continue_as_new\" as const,\n continue_from_task: task.name,\n });\n }\n\n await sleep(100);\n }\n logger.info(`Monitor task exiting because main task completed`);\n };\n\n const result = await Promise.race([\n executeTask(workflow, task, inputData)\n .then((taskResult) => {\n return {\n type: \"task_completed\" as const,\n data: taskResult,\n };\n })\n .finally(() => {\n taskCompleted = true;\n }),\n monitorTask().then(() => {\n return { type: \"continue_as_new\" as const, data: undefined };\n }),\n ]);\n\n if (result.type !== \"task_completed\") {\n return [];\n }\n\n const results = [result.data];\n if (!task.config.onComplete?.length) {\n return results;\n }\n\n for (const childTask of task.config.onComplete) {\n const childResult = await handleTask(workflow, childTask, result.data);\n results.push(...childResult);\n }\n\n // Check if this is an ETL extract task that needs to loop\n // ETL extract tasks end with \"_extract\" and return BatchResult with hasMore\n if (\n task.name.endsWith(\"_extract\") &&\n result &&\n typeof result === \"object\" &&\n result.data &&\n typeof result.data === \"object\" &&\n \"hasMore\" in result.data &&\n (result.data as any).hasMore === true\n ) {\n logger.info(`Extract task ${task.name} has more data, restarting chain...`);\n\n // Recursively call the extract task again to get the next batch\n const nextBatchResults = await handleTask(workflow, task, null);\n results.push(...nextBatchResults);\n }\n\n return results;\n}\n","// Add serialization helpers\nexport const mooseJsonEncode = (data: any): string => {\n return JSON.stringify(data, (_, value) => {\n if (value instanceof Map) {\n return {\n __type: \"Map\",\n value: Array.from(value.entries()),\n };\n }\n return value;\n });\n};\n\nexport const mooseJsonDecode = (text: string): any => {\n return JSON.parse(text, (_, value) => {\n if (value && typeof value === \"object\" && value.__type === \"Map\") {\n return new Map(value.value);\n }\n return value;\n });\n};\n"],"mappings":"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","names":["logger"]}
1
+ {"version":3,"sources":["../../src/scripts/workflow.ts","../../src/scripts/serialization.ts"],"sourcesContent":["import {\n log as logger,\n ActivityOptions,\n proxyActivities,\n workflowInfo,\n continueAsNew,\n sleep,\n} from \"@temporalio/workflow\";\nimport { Duration } from \"@temporalio/common\";\nimport { Task, Workflow } from \"../dmv2\";\n\nimport { WorkflowState } from \"./types\";\nimport { mooseJsonEncode } from \"./serialization\";\n\ninterface WorkflowRequest {\n workflow_name: string;\n execution_mode: \"start\" | \"continue_as_new\";\n continue_from_task?: string; // Only for continue_as_new\n}\n\nconst { getDmv2Workflow, getTaskForWorkflow } = proxyActivities({\n startToCloseTimeout: \"1 minutes\",\n retry: {\n maximumAttempts: 1,\n },\n});\n\nexport async function ScriptWorkflow(\n request: WorkflowRequest,\n inputData?: any,\n): Promise<any[]> {\n const state: WorkflowState = {\n completedSteps: [],\n currentStep: null,\n failedStep: null,\n scriptPath: null,\n inputData: null,\n };\n\n const results: any[] = [];\n const workflowName = request.workflow_name;\n let currentData = inputData?.data || inputData || {};\n\n logger.info(\n `Starting workflow: ${workflowName} (mode: ${request.execution_mode}) with data: ${JSON.stringify(currentData)}`,\n );\n\n try {\n currentData = JSON.parse(mooseJsonEncode(currentData));\n const workflow = await getDmv2Workflow(workflowName);\n const task =\n request.execution_mode === \"start\" ?\n workflow.config.startingTask\n : await getTaskForWorkflow(workflowName, request.continue_from_task!);\n const result = await handleDmv2Task(workflow, task, currentData);\n results.push(...result);\n\n return results;\n } catch (error) {\n state.failedStep = workflowName;\n throw error;\n }\n}\n\nasync function handleDmv2Task(\n workflow: Workflow,\n task: Task<any, any>,\n inputData: any,\n): Promise<any[]> {\n // Handle timeout configuration\n const configTimeout = task.config.timeout;\n let taskTimeout: Duration | undefined;\n\n if (!configTimeout) {\n taskTimeout = \"1h\";\n } else if (configTimeout === \"never\") {\n taskTimeout = undefined;\n } else {\n taskTimeout = configTimeout as Duration;\n }\n\n const taskRetries = task.config.retries ?? 3;\n\n const timeoutMessage =\n taskTimeout ? `with timeout ${taskTimeout}` : \"with no timeout (unlimited)\";\n logger.info(\n `Handling task ${task.name} ${timeoutMessage} and retries ${taskRetries}`,\n );\n\n const activityOptions: ActivityOptions = {\n heartbeatTimeout: \"10s\",\n retry: {\n maximumAttempts: taskRetries,\n },\n };\n\n // Temporal requires either startToCloseTimeout OR scheduleToCloseTimeout to be set\n // For unlimited timeout (timeout = \"none\"), we use scheduleToCloseTimeout with a very large value\n // For normal timeouts, we use startToCloseTimeout for single execution timeout\n if (taskTimeout) {\n // Normal timeout - limit each individual execution attempt\n activityOptions.startToCloseTimeout = taskTimeout;\n } else {\n // Unlimited timeout - set scheduleToCloseTimeout to a very large value (10 years)\n // This satisfies Temporal's requirement while effectively allowing unlimited execution\n activityOptions.scheduleToCloseTimeout = \"87600h\"; // 10 years\n }\n\n const { executeDmv2Task } = proxyActivities(activityOptions);\n\n let taskCompleted = false;\n\n const monitorTask = async () => {\n logger.info(`Monitor task starting for ${task.name}`);\n while (!taskCompleted) {\n const info = workflowInfo();\n\n // Continue-as-new only when suggested by Temporal\n if (info.continueAsNewSuggested) {\n logger.info(`ContinueAsNew suggested by Temporal`);\n return await continueAsNew({\n workflow_name: workflow.name,\n execution_mode: \"continue_as_new\" as const,\n continue_from_task: task.name,\n });\n }\n\n await sleep(100);\n }\n logger.info(`Monitor task exiting because main task completed`);\n };\n\n const result = await Promise.race([\n executeDmv2Task(workflow, task, inputData)\n .then((taskResult) => {\n return {\n type: \"task_completed\" as const,\n data: taskResult,\n };\n })\n .finally(() => {\n taskCompleted = true;\n }),\n monitorTask().then(() => {\n return { type: \"continue_as_new\" as const, data: undefined };\n }),\n ]);\n\n if (result.type !== \"task_completed\") {\n return [];\n }\n\n const results = [result.data];\n if (!task.config.onComplete?.length) {\n return results;\n }\n\n for (const childTask of task.config.onComplete) {\n const childResult = await handleDmv2Task(workflow, childTask, result.data);\n results.push(...childResult);\n }\n\n // Check if this is an ETL extract task that needs to loop\n // ETL extract tasks end with \"_extract\" and return BatchResult with hasMore\n if (\n task.name.endsWith(\"_extract\") &&\n result &&\n typeof result === \"object\" &&\n result.data &&\n typeof result.data === \"object\" &&\n \"hasMore\" in result.data &&\n (result.data as any).hasMore === true\n ) {\n logger.info(`Extract task ${task.name} has more data, restarting chain...`);\n\n // Recursively call the extract task again to get the next batch\n const nextBatchResults = await handleDmv2Task(workflow, task, null);\n results.push(...nextBatchResults);\n }\n\n return results;\n}\n","// Add serialization helpers\nexport const mooseJsonEncode = (data: any): string => {\n return JSON.stringify(data, (_, value) => {\n if (value instanceof Map) {\n return {\n __type: \"Map\",\n value: Array.from(value.entries()),\n };\n }\n return value;\n });\n};\n\nexport const mooseJsonDecode = (text: string): any => {\n return JSON.parse(text, (_, value) => {\n if (value && typeof value === \"object\" && value.__type === \"Map\") {\n return new Map(value.value);\n }\n return value;\n });\n};\n"],"mappings":"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","names":["logger"]}
@@ -21,7 +21,7 @@ var mooseJsonEncode = (data) => {
21
21
  };
22
22
 
23
23
  // src/scripts/workflow.ts
24
- var { getWorkflowByName, getTaskForWorkflow } = proxyActivities({
24
+ var { getDmv2Workflow, getTaskForWorkflow } = proxyActivities({
25
25
  startToCloseTimeout: "1 minutes",
26
26
  retry: {
27
27
  maximumAttempts: 1
@@ -31,7 +31,9 @@ async function ScriptWorkflow(request, inputData) {
31
31
  const state = {
32
32
  completedSteps: [],
33
33
  currentStep: null,
34
- failedStep: null
34
+ failedStep: null,
35
+ scriptPath: null,
36
+ inputData: null
35
37
  };
36
38
  const results = [];
37
39
  const workflowName = request.workflow_name;
@@ -41,9 +43,9 @@ async function ScriptWorkflow(request, inputData) {
41
43
  );
42
44
  try {
43
45
  currentData = JSON.parse(mooseJsonEncode(currentData));
44
- const workflow = await getWorkflowByName(workflowName);
46
+ const workflow = await getDmv2Workflow(workflowName);
45
47
  const task = request.execution_mode === "start" ? workflow.config.startingTask : await getTaskForWorkflow(workflowName, request.continue_from_task);
46
- const result = await handleTask(workflow, task, currentData);
48
+ const result = await handleDmv2Task(workflow, task, currentData);
47
49
  results.push(...result);
48
50
  return results;
49
51
  } catch (error) {
@@ -51,7 +53,7 @@ async function ScriptWorkflow(request, inputData) {
51
53
  throw error;
52
54
  }
53
55
  }
54
- async function handleTask(workflow, task, inputData) {
56
+ async function handleDmv2Task(workflow, task, inputData) {
55
57
  const configTimeout = task.config.timeout;
56
58
  let taskTimeout;
57
59
  if (!configTimeout) {
@@ -77,7 +79,7 @@ async function handleTask(workflow, task, inputData) {
77
79
  } else {
78
80
  activityOptions.scheduleToCloseTimeout = "87600h";
79
81
  }
80
- const { executeTask } = proxyActivities(activityOptions);
82
+ const { executeDmv2Task } = proxyActivities(activityOptions);
81
83
  let taskCompleted = false;
82
84
  const monitorTask = async () => {
83
85
  logger.info(`Monitor task starting for ${task.name}`);
@@ -96,7 +98,7 @@ async function handleTask(workflow, task, inputData) {
96
98
  logger.info(`Monitor task exiting because main task completed`);
97
99
  };
98
100
  const result = await Promise.race([
99
- executeTask(workflow, task, inputData).then((taskResult) => {
101
+ executeDmv2Task(workflow, task, inputData).then((taskResult) => {
100
102
  return {
101
103
  type: "task_completed",
102
104
  data: taskResult
@@ -116,12 +118,12 @@ async function handleTask(workflow, task, inputData) {
116
118
  return results;
117
119
  }
118
120
  for (const childTask of task.config.onComplete) {
119
- const childResult = await handleTask(workflow, childTask, result.data);
121
+ const childResult = await handleDmv2Task(workflow, childTask, result.data);
120
122
  results.push(...childResult);
121
123
  }
122
124
  if (task.name.endsWith("_extract") && result && typeof result === "object" && result.data && typeof result.data === "object" && "hasMore" in result.data && result.data.hasMore === true) {
123
125
  logger.info(`Extract task ${task.name} has more data, restarting chain...`);
124
- const nextBatchResults = await handleTask(workflow, task, null);
126
+ const nextBatchResults = await handleDmv2Task(workflow, task, null);
125
127
  results.push(...nextBatchResults);
126
128
  }
127
129
  return results;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/scripts/workflow.ts","../../src/scripts/serialization.ts"],"sourcesContent":["import {\n log as logger,\n ActivityOptions,\n proxyActivities,\n workflowInfo,\n continueAsNew,\n sleep,\n} from \"@temporalio/workflow\";\nimport { Duration } from \"@temporalio/common\";\nimport { Task, Workflow } from \"../dmv2\";\n\nimport { WorkflowState } from \"./types\";\nimport { mooseJsonEncode } from \"./serialization\";\n\ninterface WorkflowRequest {\n workflow_name: string;\n execution_mode: \"start\" | \"continue_as_new\";\n continue_from_task?: string; // Only for continue_as_new\n}\n\nconst { getWorkflowByName, getTaskForWorkflow } = proxyActivities({\n startToCloseTimeout: \"1 minutes\",\n retry: {\n maximumAttempts: 1,\n },\n});\n\nexport async function ScriptWorkflow(\n request: WorkflowRequest,\n inputData?: any,\n): Promise<any[]> {\n const state: WorkflowState = {\n completedSteps: [],\n currentStep: null,\n failedStep: null,\n };\n\n const results: any[] = [];\n const workflowName = request.workflow_name;\n let currentData = inputData?.data || inputData || {};\n\n logger.info(\n `Starting workflow: ${workflowName} (mode: ${request.execution_mode}) with data: ${JSON.stringify(currentData)}`,\n );\n\n try {\n currentData = JSON.parse(mooseJsonEncode(currentData));\n const workflow = await getWorkflowByName(workflowName);\n const task =\n request.execution_mode === \"start\" ?\n workflow.config.startingTask\n : await getTaskForWorkflow(workflowName, request.continue_from_task!);\n const result = await handleTask(workflow, task, currentData);\n results.push(...result);\n\n return results;\n } catch (error) {\n state.failedStep = workflowName;\n throw error;\n }\n}\n\nasync function handleTask(\n workflow: Workflow,\n task: Task<any, any>,\n inputData: any,\n): Promise<any[]> {\n // Handle timeout configuration\n const configTimeout = task.config.timeout;\n let taskTimeout: Duration | undefined;\n\n if (!configTimeout) {\n taskTimeout = \"1h\";\n } else if (configTimeout === \"never\") {\n taskTimeout = undefined;\n } else {\n taskTimeout = configTimeout as Duration;\n }\n\n const taskRetries = task.config.retries ?? 3;\n\n const timeoutMessage =\n taskTimeout ? `with timeout ${taskTimeout}` : \"with no timeout (unlimited)\";\n logger.info(\n `Handling task ${task.name} ${timeoutMessage} and retries ${taskRetries}`,\n );\n\n const activityOptions: ActivityOptions = {\n heartbeatTimeout: \"10s\",\n retry: {\n maximumAttempts: taskRetries,\n },\n };\n\n // Temporal requires either startToCloseTimeout OR scheduleToCloseTimeout to be set\n // For unlimited timeout (timeout = \"none\"), we use scheduleToCloseTimeout with a very large value\n // For normal timeouts, we use startToCloseTimeout for single execution timeout\n if (taskTimeout) {\n // Normal timeout - limit each individual execution attempt\n activityOptions.startToCloseTimeout = taskTimeout;\n } else {\n // Unlimited timeout - set scheduleToCloseTimeout to a very large value (10 years)\n // This satisfies Temporal's requirement while effectively allowing unlimited execution\n activityOptions.scheduleToCloseTimeout = \"87600h\"; // 10 years\n }\n\n const { executeTask } = proxyActivities(activityOptions);\n\n let taskCompleted = false;\n\n const monitorTask = async () => {\n logger.info(`Monitor task starting for ${task.name}`);\n while (!taskCompleted) {\n const info = workflowInfo();\n\n // Continue-as-new only when suggested by Temporal\n if (info.continueAsNewSuggested) {\n logger.info(`ContinueAsNew suggested by Temporal`);\n return await continueAsNew({\n workflow_name: workflow.name,\n execution_mode: \"continue_as_new\" as const,\n continue_from_task: task.name,\n });\n }\n\n await sleep(100);\n }\n logger.info(`Monitor task exiting because main task completed`);\n };\n\n const result = await Promise.race([\n executeTask(workflow, task, inputData)\n .then((taskResult) => {\n return {\n type: \"task_completed\" as const,\n data: taskResult,\n };\n })\n .finally(() => {\n taskCompleted = true;\n }),\n monitorTask().then(() => {\n return { type: \"continue_as_new\" as const, data: undefined };\n }),\n ]);\n\n if (result.type !== \"task_completed\") {\n return [];\n }\n\n const results = [result.data];\n if (!task.config.onComplete?.length) {\n return results;\n }\n\n for (const childTask of task.config.onComplete) {\n const childResult = await handleTask(workflow, childTask, result.data);\n results.push(...childResult);\n }\n\n // Check if this is an ETL extract task that needs to loop\n // ETL extract tasks end with \"_extract\" and return BatchResult with hasMore\n if (\n task.name.endsWith(\"_extract\") &&\n result &&\n typeof result === \"object\" &&\n result.data &&\n typeof result.data === \"object\" &&\n \"hasMore\" in result.data &&\n (result.data as any).hasMore === true\n ) {\n logger.info(`Extract task ${task.name} has more data, restarting chain...`);\n\n // Recursively call the extract task again to get the next batch\n const nextBatchResults = await handleTask(workflow, task, null);\n results.push(...nextBatchResults);\n }\n\n return results;\n}\n","// Add serialization helpers\nexport const mooseJsonEncode = (data: any): string => {\n return JSON.stringify(data, (_, value) => {\n if (value instanceof Map) {\n return {\n __type: \"Map\",\n value: Array.from(value.entries()),\n };\n }\n return value;\n });\n};\n\nexport const mooseJsonDecode = (text: string): any => {\n return JSON.parse(text, (_, value) => {\n if (value && typeof value === \"object\" && value.__type === \"Map\") {\n return new Map(value.value);\n }\n return value;\n });\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/scripts/workflow.ts","../../src/scripts/serialization.ts"],"sourcesContent":["import {\n log as logger,\n ActivityOptions,\n proxyActivities,\n workflowInfo,\n continueAsNew,\n sleep,\n} from \"@temporalio/workflow\";\nimport { Duration } from \"@temporalio/common\";\nimport { Task, Workflow } from \"../dmv2\";\n\nimport { WorkflowState } from \"./types\";\nimport { mooseJsonEncode } from \"./serialization\";\n\ninterface WorkflowRequest {\n workflow_name: string;\n execution_mode: \"start\" | \"continue_as_new\";\n continue_from_task?: string; // Only for continue_as_new\n}\n\nconst { getDmv2Workflow, getTaskForWorkflow } = proxyActivities({\n startToCloseTimeout: \"1 minutes\",\n retry: {\n maximumAttempts: 1,\n },\n});\n\nexport async function ScriptWorkflow(\n request: WorkflowRequest,\n inputData?: any,\n): Promise<any[]> {\n const state: WorkflowState = {\n completedSteps: [],\n currentStep: null,\n failedStep: null,\n scriptPath: null,\n inputData: null,\n };\n\n const results: any[] = [];\n const workflowName = request.workflow_name;\n let currentData = inputData?.data || inputData || {};\n\n logger.info(\n `Starting workflow: ${workflowName} (mode: ${request.execution_mode}) with data: ${JSON.stringify(currentData)}`,\n );\n\n try {\n currentData = JSON.parse(mooseJsonEncode(currentData));\n const workflow = await getDmv2Workflow(workflowName);\n const task =\n request.execution_mode === \"start\" ?\n workflow.config.startingTask\n : await getTaskForWorkflow(workflowName, request.continue_from_task!);\n const result = await handleDmv2Task(workflow, task, currentData);\n results.push(...result);\n\n return results;\n } catch (error) {\n state.failedStep = workflowName;\n throw error;\n }\n}\n\nasync function handleDmv2Task(\n workflow: Workflow,\n task: Task<any, any>,\n inputData: any,\n): Promise<any[]> {\n // Handle timeout configuration\n const configTimeout = task.config.timeout;\n let taskTimeout: Duration | undefined;\n\n if (!configTimeout) {\n taskTimeout = \"1h\";\n } else if (configTimeout === \"never\") {\n taskTimeout = undefined;\n } else {\n taskTimeout = configTimeout as Duration;\n }\n\n const taskRetries = task.config.retries ?? 3;\n\n const timeoutMessage =\n taskTimeout ? `with timeout ${taskTimeout}` : \"with no timeout (unlimited)\";\n logger.info(\n `Handling task ${task.name} ${timeoutMessage} and retries ${taskRetries}`,\n );\n\n const activityOptions: ActivityOptions = {\n heartbeatTimeout: \"10s\",\n retry: {\n maximumAttempts: taskRetries,\n },\n };\n\n // Temporal requires either startToCloseTimeout OR scheduleToCloseTimeout to be set\n // For unlimited timeout (timeout = \"none\"), we use scheduleToCloseTimeout with a very large value\n // For normal timeouts, we use startToCloseTimeout for single execution timeout\n if (taskTimeout) {\n // Normal timeout - limit each individual execution attempt\n activityOptions.startToCloseTimeout = taskTimeout;\n } else {\n // Unlimited timeout - set scheduleToCloseTimeout to a very large value (10 years)\n // This satisfies Temporal's requirement while effectively allowing unlimited execution\n activityOptions.scheduleToCloseTimeout = \"87600h\"; // 10 years\n }\n\n const { executeDmv2Task } = proxyActivities(activityOptions);\n\n let taskCompleted = false;\n\n const monitorTask = async () => {\n logger.info(`Monitor task starting for ${task.name}`);\n while (!taskCompleted) {\n const info = workflowInfo();\n\n // Continue-as-new only when suggested by Temporal\n if (info.continueAsNewSuggested) {\n logger.info(`ContinueAsNew suggested by Temporal`);\n return await continueAsNew({\n workflow_name: workflow.name,\n execution_mode: \"continue_as_new\" as const,\n continue_from_task: task.name,\n });\n }\n\n await sleep(100);\n }\n logger.info(`Monitor task exiting because main task completed`);\n };\n\n const result = await Promise.race([\n executeDmv2Task(workflow, task, inputData)\n .then((taskResult) => {\n return {\n type: \"task_completed\" as const,\n data: taskResult,\n };\n })\n .finally(() => {\n taskCompleted = true;\n }),\n monitorTask().then(() => {\n return { type: \"continue_as_new\" as const, data: undefined };\n }),\n ]);\n\n if (result.type !== \"task_completed\") {\n return [];\n }\n\n const results = [result.data];\n if (!task.config.onComplete?.length) {\n return results;\n }\n\n for (const childTask of task.config.onComplete) {\n const childResult = await handleDmv2Task(workflow, childTask, result.data);\n results.push(...childResult);\n }\n\n // Check if this is an ETL extract task that needs to loop\n // ETL extract tasks end with \"_extract\" and return BatchResult with hasMore\n if (\n task.name.endsWith(\"_extract\") &&\n result &&\n typeof result === \"object\" &&\n result.data &&\n typeof result.data === \"object\" &&\n \"hasMore\" in result.data &&\n (result.data as any).hasMore === true\n ) {\n logger.info(`Extract task ${task.name} has more data, restarting chain...`);\n\n // Recursively call the extract task again to get the next batch\n const nextBatchResults = await handleDmv2Task(workflow, task, null);\n results.push(...nextBatchResults);\n }\n\n return results;\n}\n","// Add serialization helpers\nexport const mooseJsonEncode = (data: any): string => {\n return JSON.stringify(data, (_, value) => {\n if (value instanceof Map) {\n return {\n __type: \"Map\",\n value: Array.from(value.entries()),\n };\n }\n return value;\n });\n};\n\nexport const mooseJsonDecode = (text: string): any => {\n return JSON.parse(text, (_, value) => {\n if (value && typeof value === \"object\" && value.__type === \"Map\") {\n return new Map(value.value);\n }\n return value;\n });\n};\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@514labs/moose-lib",
3
- "version": "0.6.321-ci-5-ga23d35fe",
3
+ "version": "0.6.322-ci-1-gb296906d",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/514-labs/moosestack"