@marktoflow/core 2.0.0-alpha.9 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/README.md +24 -222
  2. package/dist/built-in-operations.d.ts +150 -0
  3. package/dist/built-in-operations.d.ts.map +1 -0
  4. package/dist/built-in-operations.js +799 -0
  5. package/dist/built-in-operations.js.map +1 -0
  6. package/dist/core-tools.d.ts +39 -0
  7. package/dist/core-tools.d.ts.map +1 -0
  8. package/dist/core-tools.js +58 -0
  9. package/dist/core-tools.js.map +1 -0
  10. package/dist/credentials.d.ts +60 -1
  11. package/dist/credentials.d.ts.map +1 -1
  12. package/dist/credentials.js +229 -4
  13. package/dist/credentials.js.map +1 -1
  14. package/dist/engine.d.ts +92 -3
  15. package/dist/engine.d.ts.map +1 -1
  16. package/dist/engine.js +937 -59
  17. package/dist/engine.js.map +1 -1
  18. package/dist/file-operations.d.ts +86 -0
  19. package/dist/file-operations.d.ts.map +1 -0
  20. package/dist/file-operations.js +382 -0
  21. package/dist/file-operations.js.map +1 -0
  22. package/dist/index.d.ts +16 -5
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +46 -4
  25. package/dist/index.js.map +1 -1
  26. package/dist/logging.d.ts +40 -2
  27. package/dist/logging.d.ts.map +1 -1
  28. package/dist/logging.js +166 -13
  29. package/dist/logging.js.map +1 -1
  30. package/dist/models.d.ts +1441 -54
  31. package/dist/models.d.ts.map +1 -1
  32. package/dist/models.js +124 -2
  33. package/dist/models.js.map +1 -1
  34. package/dist/nunjucks-filters.d.ts +271 -0
  35. package/dist/nunjucks-filters.d.ts.map +1 -0
  36. package/dist/nunjucks-filters.js +648 -0
  37. package/dist/nunjucks-filters.js.map +1 -0
  38. package/dist/oauth-manager.d.ts +128 -0
  39. package/dist/oauth-manager.d.ts.map +1 -0
  40. package/dist/oauth-manager.js +291 -0
  41. package/dist/oauth-manager.js.map +1 -0
  42. package/dist/oauth-refresh.d.ts +37 -0
  43. package/dist/oauth-refresh.d.ts.map +1 -0
  44. package/dist/oauth-refresh.js +76 -0
  45. package/dist/oauth-refresh.js.map +1 -0
  46. package/dist/parser.d.ts.map +1 -1
  47. package/dist/parser.js +113 -3
  48. package/dist/parser.js.map +1 -1
  49. package/dist/permissions.d.ts +49 -0
  50. package/dist/permissions.d.ts.map +1 -0
  51. package/dist/permissions.js +286 -0
  52. package/dist/permissions.js.map +1 -0
  53. package/dist/prompt-loader.d.ts +53 -0
  54. package/dist/prompt-loader.d.ts.map +1 -0
  55. package/dist/prompt-loader.js +205 -0
  56. package/dist/prompt-loader.js.map +1 -0
  57. package/dist/scheduler.d.ts +22 -3
  58. package/dist/scheduler.d.ts.map +1 -1
  59. package/dist/scheduler.js +72 -73
  60. package/dist/scheduler.js.map +1 -1
  61. package/dist/script-executor.d.ts +65 -0
  62. package/dist/script-executor.d.ts.map +1 -0
  63. package/dist/script-executor.js +261 -0
  64. package/dist/script-executor.js.map +1 -0
  65. package/dist/sdk-registry.d.ts +20 -2
  66. package/dist/sdk-registry.d.ts.map +1 -1
  67. package/dist/sdk-registry.js +100 -15
  68. package/dist/sdk-registry.js.map +1 -1
  69. package/dist/secret-providers/index.d.ts +12 -0
  70. package/dist/secret-providers/index.d.ts.map +1 -0
  71. package/dist/secret-providers/index.js +11 -0
  72. package/dist/secret-providers/index.js.map +1 -0
  73. package/dist/secret-providers/providers/aws.d.ts +32 -0
  74. package/dist/secret-providers/providers/aws.d.ts.map +1 -0
  75. package/dist/secret-providers/providers/aws.js +118 -0
  76. package/dist/secret-providers/providers/aws.js.map +1 -0
  77. package/dist/secret-providers/providers/azure.d.ts +40 -0
  78. package/dist/secret-providers/providers/azure.d.ts.map +1 -0
  79. package/dist/secret-providers/providers/azure.js +170 -0
  80. package/dist/secret-providers/providers/azure.js.map +1 -0
  81. package/dist/secret-providers/providers/env.d.ts +26 -0
  82. package/dist/secret-providers/providers/env.d.ts.map +1 -0
  83. package/dist/secret-providers/providers/env.js +59 -0
  84. package/dist/secret-providers/providers/env.js.map +1 -0
  85. package/dist/secret-providers/providers/vault.d.ts +39 -0
  86. package/dist/secret-providers/providers/vault.d.ts.map +1 -0
  87. package/dist/secret-providers/providers/vault.js +180 -0
  88. package/dist/secret-providers/providers/vault.js.map +1 -0
  89. package/dist/secret-providers/secret-manager.d.ts +72 -0
  90. package/dist/secret-providers/secret-manager.d.ts.map +1 -0
  91. package/dist/secret-providers/secret-manager.js +226 -0
  92. package/dist/secret-providers/secret-manager.js.map +1 -0
  93. package/dist/secret-providers/types.d.ts +105 -0
  94. package/dist/secret-providers/types.d.ts.map +1 -0
  95. package/dist/secret-providers/types.js +8 -0
  96. package/dist/secret-providers/types.js.map +1 -0
  97. package/dist/secrets/index.d.ts +12 -0
  98. package/dist/secrets/index.d.ts.map +1 -0
  99. package/dist/secrets/index.js +11 -0
  100. package/dist/secrets/index.js.map +1 -0
  101. package/dist/secrets/providers/aws.d.ts +32 -0
  102. package/dist/secrets/providers/aws.d.ts.map +1 -0
  103. package/dist/secrets/providers/aws.js +118 -0
  104. package/dist/secrets/providers/aws.js.map +1 -0
  105. package/dist/secrets/providers/azure.d.ts +40 -0
  106. package/dist/secrets/providers/azure.d.ts.map +1 -0
  107. package/dist/secrets/providers/azure.js +170 -0
  108. package/dist/secrets/providers/azure.js.map +1 -0
  109. package/dist/secrets/providers/env.d.ts +26 -0
  110. package/dist/secrets/providers/env.d.ts.map +1 -0
  111. package/dist/secrets/providers/env.js +59 -0
  112. package/dist/secrets/providers/env.js.map +1 -0
  113. package/dist/secrets/providers/vault.d.ts +39 -0
  114. package/dist/secrets/providers/vault.d.ts.map +1 -0
  115. package/dist/secrets/providers/vault.js +180 -0
  116. package/dist/secrets/providers/vault.js.map +1 -0
  117. package/dist/secrets/secret-manager.d.ts +72 -0
  118. package/dist/secrets/secret-manager.d.ts.map +1 -0
  119. package/dist/secrets/secret-manager.js +226 -0
  120. package/dist/secrets/secret-manager.js.map +1 -0
  121. package/dist/secrets/types.d.ts +105 -0
  122. package/dist/secrets/types.d.ts.map +1 -0
  123. package/dist/secrets/types.js +8 -0
  124. package/dist/secrets/types.js.map +1 -0
  125. package/dist/security.d.ts +1 -0
  126. package/dist/security.d.ts.map +1 -1
  127. package/dist/security.js +4 -0
  128. package/dist/security.js.map +1 -1
  129. package/dist/state.d.ts.map +1 -1
  130. package/dist/state.js +16 -9
  131. package/dist/state.js.map +1 -1
  132. package/dist/template-engine.d.ts +51 -0
  133. package/dist/template-engine.d.ts.map +1 -0
  134. package/dist/template-engine.js +227 -0
  135. package/dist/template-engine.js.map +1 -0
  136. package/dist/templates.d.ts +10 -0
  137. package/dist/templates.d.ts.map +1 -1
  138. package/dist/templates.js +21 -17
  139. package/dist/templates.js.map +1 -1
  140. package/dist/tools/mcp-tool.js +9 -9
  141. package/dist/tools/mcp-tool.js.map +1 -1
  142. package/dist/trigger-manager.js +1 -1
  143. package/dist/trigger-manager.js.map +1 -1
  144. package/dist/workflow-tools.d.ts +102 -0
  145. package/dist/workflow-tools.d.ts.map +1 -0
  146. package/dist/workflow-tools.js +130 -0
  147. package/dist/workflow-tools.js.map +1 -0
  148. package/package.json +31 -13
  149. package/LICENSE +0 -201
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-loader.d.ts","sourceRoot":"","sources":["../src/prompt-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAO/C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC3D,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAQD;;GAEG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC,CA2DvB;AAMD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,CAAC,EAAE,gBAAgB,GACzB,cAAc,CAwChB;AAMD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,gBAAgB,CAmClB;AAyCD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAWhE"}
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Prompt Loader for marktoflow v2.0
3
+ *
4
+ * Loads external prompt files with optional YAML frontmatter for variable definitions.
5
+ * Supports template variable resolution using Nunjucks ({{ prompt.variable }} syntax).
6
+ */
7
+ import { readFile } from 'node:fs/promises';
8
+ import { resolve, dirname } from 'node:path';
9
+ import { parse as parseYaml } from 'yaml';
10
+ import { renderTemplate } from './template-engine.js';
11
+ // ============================================================================
12
+ // Prompt Loading
13
+ // ============================================================================
14
+ const FRONTMATTER_REGEX = /^---\n([\s\S]*?)\n---\n?/;
15
+ /**
16
+ * Load a prompt file with optional YAML frontmatter.
17
+ */
18
+ export async function loadPromptFile(promptPath, basePath) {
19
+ // Resolve path relative to base path if provided
20
+ const resolvedPath = basePath ? resolve(dirname(basePath), promptPath) : resolve(promptPath);
21
+ let content;
22
+ try {
23
+ content = await readFile(resolvedPath, 'utf-8');
24
+ }
25
+ catch (error) {
26
+ throw new Error(`Failed to load prompt file: ${resolvedPath}. ${error}`);
27
+ }
28
+ // Parse frontmatter if present
29
+ const frontmatterMatch = content.match(FRONTMATTER_REGEX);
30
+ let frontmatter = {};
31
+ let promptContent = content;
32
+ if (frontmatterMatch) {
33
+ try {
34
+ frontmatter = parseYaml(frontmatterMatch[1]);
35
+ promptContent = content.slice(frontmatterMatch[0].length).trim();
36
+ }
37
+ catch (error) {
38
+ throw new Error(`Invalid YAML frontmatter in prompt file: ${resolvedPath}. ${error}`);
39
+ }
40
+ }
41
+ // Extract variables
42
+ const variables = {};
43
+ const variablesRaw = frontmatter.variables;
44
+ if (variablesRaw) {
45
+ for (const [name, config] of Object.entries(variablesRaw)) {
46
+ if (typeof config === 'object' && config !== null) {
47
+ const varConfig = config;
48
+ variables[name] = {
49
+ type: varConfig.type || 'string',
50
+ required: varConfig.required,
51
+ default: varConfig.default,
52
+ description: varConfig.description,
53
+ };
54
+ }
55
+ else {
56
+ // Simple type definition
57
+ variables[name] = {
58
+ type: config || 'string',
59
+ required: undefined,
60
+ default: undefined,
61
+ description: undefined,
62
+ };
63
+ }
64
+ }
65
+ }
66
+ return {
67
+ name: frontmatter.name,
68
+ description: frontmatter.description,
69
+ variables,
70
+ content: promptContent,
71
+ rawContent: content,
72
+ filePath: resolvedPath,
73
+ };
74
+ }
75
+ // ============================================================================
76
+ // Template Resolution
77
+ // ============================================================================
78
+ /**
79
+ * Resolve {{ prompt.variable }} templates in a prompt using Nunjucks.
80
+ *
81
+ * Features enabled by using Nunjucks:
82
+ * - Filters: {{ prompt.name | upper }}, {{ value | split('/') | first }}
83
+ * - Conditionals: {% if prompt.enabled %}...{% endif %}
84
+ * - Loops: {% for item in items %}...{% endfor %}
85
+ * - All custom filters from nunjucks-filters.ts
86
+ */
87
+ export function resolvePromptTemplate(prompt, inputs, context) {
88
+ // Build resolved variables with defaults
89
+ const resolvedVars = {};
90
+ // Apply defaults first
91
+ for (const [name, config] of Object.entries(prompt.variables)) {
92
+ if (config.default !== undefined) {
93
+ resolvedVars[name] = config.default;
94
+ }
95
+ }
96
+ // Override with provided inputs
97
+ for (const [name, value] of Object.entries(inputs)) {
98
+ resolvedVars[name] = value;
99
+ }
100
+ // Build the template context
101
+ // 'prompt' namespace contains the resolved prompt variables
102
+ // Also include context variables if available
103
+ const templateContext = {
104
+ prompt: resolvedVars,
105
+ ...resolvedVars, // Also expose at top level for backward compatibility
106
+ };
107
+ // Add context variables if available
108
+ if (context) {
109
+ templateContext.inputs = context.inputs;
110
+ templateContext.variables = context.variables;
111
+ // Merge context variables at top level for convenience
112
+ Object.assign(templateContext, context.variables);
113
+ }
114
+ // Render template using Nunjucks
115
+ const rendered = renderTemplate(prompt.content, templateContext);
116
+ const content = typeof rendered === 'string' ? rendered : String(rendered);
117
+ return {
118
+ content,
119
+ variables: resolvedVars,
120
+ };
121
+ }
122
+ // ============================================================================
123
+ // Validation
124
+ // ============================================================================
125
+ /**
126
+ * Validate that all required prompt inputs are provided.
127
+ */
128
+ export function validatePromptInputs(prompt, inputs) {
129
+ const errors = [];
130
+ const warnings = [];
131
+ for (const [name, config] of Object.entries(prompt.variables)) {
132
+ const value = inputs[name];
133
+ const hasValue = value !== undefined && value !== null;
134
+ // Check required
135
+ if (config.required && !hasValue && config.default === undefined) {
136
+ errors.push(`Missing required prompt variable: ${name}`);
137
+ continue;
138
+ }
139
+ // Type validation (if value is provided)
140
+ if (hasValue) {
141
+ const typeError = validateType(value, config.type, name);
142
+ if (typeError) {
143
+ errors.push(typeError);
144
+ }
145
+ }
146
+ }
147
+ // Warn about unused inputs
148
+ for (const name of Object.keys(inputs)) {
149
+ if (!prompt.variables[name]) {
150
+ warnings.push(`Unused prompt input: ${name}`);
151
+ }
152
+ }
153
+ return {
154
+ valid: errors.length === 0,
155
+ errors,
156
+ warnings,
157
+ };
158
+ }
159
+ /**
160
+ * Validate a value against an expected type.
161
+ */
162
+ function validateType(value, type, name) {
163
+ switch (type) {
164
+ case 'string':
165
+ if (typeof value !== 'string') {
166
+ return `Expected string for ${name}, got ${typeof value}`;
167
+ }
168
+ break;
169
+ case 'number':
170
+ if (typeof value !== 'number') {
171
+ return `Expected number for ${name}, got ${typeof value}`;
172
+ }
173
+ break;
174
+ case 'boolean':
175
+ if (typeof value !== 'boolean') {
176
+ return `Expected boolean for ${name}, got ${typeof value}`;
177
+ }
178
+ break;
179
+ case 'array':
180
+ if (!Array.isArray(value)) {
181
+ return `Expected array for ${name}, got ${typeof value}`;
182
+ }
183
+ break;
184
+ case 'object':
185
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
186
+ return `Expected object for ${name}, got ${Array.isArray(value) ? 'array' : typeof value}`;
187
+ }
188
+ break;
189
+ }
190
+ return null;
191
+ }
192
+ /**
193
+ * Extract all variable references from a prompt template.
194
+ */
195
+ export function extractPromptVariables(content) {
196
+ const variables = new Set();
197
+ // Extract {{ prompt.variable }} patterns
198
+ const promptVarRegex = /\{\{\s*prompt\.([^}]+)\s*\}\}/g;
199
+ let match;
200
+ while ((match = promptVarRegex.exec(content)) !== null) {
201
+ variables.add(match[1].trim());
202
+ }
203
+ return Array.from(variables);
204
+ }
205
+ //# sourceMappingURL=prompt-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-loader.js","sourceRoot":"","sources":["../src/prompt-loader.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,10 @@
2
2
  * Scheduler for marktoflow v2.0
3
3
  *
4
4
  * Handles cron-based scheduling of workflow execution.
5
+ * Uses cron-parser for robust cron expression handling with proper
6
+ * DST handling, leap year support, and timezone awareness.
5
7
  */
8
+ import { type CronExpression } from 'cron-parser';
6
9
  export interface ScheduledJob {
7
10
  id: string;
8
11
  workflowPath: string;
@@ -29,15 +32,31 @@ export declare class CronParser {
29
32
  * Special values: * (any), * /N (every N), N-M (range), N,M (list)
30
33
  */
31
34
  static parse(expression: string): CronFields;
32
- private static parseField;
33
35
  /**
34
36
  * Check if a date matches a cron expression.
35
37
  */
36
38
  static matches(expression: string, date: Date): boolean;
37
39
  /**
38
40
  * Calculate the next run time for a cron expression.
41
+ * Supports timezone-aware scheduling.
39
42
  */
40
- static nextRun(expression: string, after?: Date): Date | null;
43
+ static nextRun(expression: string, after?: Date, timezone?: string): Date | null;
44
+ /**
45
+ * Calculate the previous run time for a cron expression.
46
+ */
47
+ static prevRun(expression: string, before?: Date, timezone?: string): Date | null;
48
+ /**
49
+ * Validate a cron expression without throwing.
50
+ * Only accepts standard 5-field cron expressions.
51
+ */
52
+ static isValid(expression: string): boolean;
53
+ /**
54
+ * Get the underlying cron-parser CronExpression for advanced usage.
55
+ */
56
+ static getInterval(expression: string, options?: {
57
+ currentDate?: Date;
58
+ tz?: string;
59
+ }): CronExpression;
41
60
  }
42
61
  export declare class Scheduler {
43
62
  private checkIntervalMs;
@@ -87,5 +106,5 @@ export declare class Scheduler {
87
106
  */
88
107
  isRunning(): boolean;
89
108
  }
90
- export declare function createJob(id: string, workflowPath: string, schedule: string, inputs?: Record<string, unknown>): ScheduledJob;
109
+ export declare function createJob(id: string, workflowPath: string, schedule: string, inputs?: Record<string, unknown>, timezone?: string): ScheduledJob;
91
110
  //# sourceMappingURL=scheduler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAM/D,qBAAa,UAAU;IACrB;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU;IAiC5C,OAAO,CAAC,MAAM,CAAC,UAAU;IAgCzB;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;IAgBvD;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI;CA0B9D;AAMD,qBAAa,SAAS;IAMR,OAAO,CAAC,eAAe;IALnC,OAAO,CAAC,IAAI,CAAwC;IACpD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,SAAS,CAAqB;gBAElB,eAAe,GAAE,MAAc;IAEnD;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAM/B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIjC;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI/C;;OAEG;IACH,QAAQ,IAAI,YAAY,EAAE;IAI1B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI;IAIrC;;OAEG;IACH,KAAK,IAAI,IAAI;IAgBb;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;OAEG;YACW,SAAS;IAuBvB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IA0B3C;;OAEG;IACH,SAAS,IAAI,OAAO;CAGrB;AAMD,wBAAgB,SAAS,CACvB,EAAE,EAAE,MAAM,EACV,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACnC,YAAY,CAYd"}
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"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"}
package/dist/scheduler.js CHANGED
@@ -2,9 +2,12 @@
2
2
  * Scheduler for marktoflow v2.0
3
3
  *
4
4
  * Handles cron-based scheduling of workflow execution.
5
+ * Uses cron-parser for robust cron expression handling with proper
6
+ * DST handling, leap year support, and timezone awareness.
5
7
  */
8
+ import { CronExpressionParser } from 'cron-parser';
6
9
  // ============================================================================
7
- // Cron Parser
10
+ // Cron Parser (wrapper around cron-parser)
8
11
  // ============================================================================
9
12
  export class CronParser {
10
13
  /**
@@ -17,57 +20,18 @@ export class CronParser {
17
20
  if (parts.length !== 5) {
18
21
  throw new Error(`Invalid cron expression: ${expression}. Expected 5 fields.`);
19
22
  }
20
- const ranges = {
21
- minute: [0, 59],
22
- hour: [0, 23],
23
- day: [1, 31],
24
- month: [1, 12],
25
- weekday: [0, 6],
23
+ // Use cron-parser to validate and parse
24
+ const cronExpr = CronExpressionParser.parse(expression);
25
+ const fields = cronExpr.fields;
26
+ // Extract numeric values from cron fields
27
+ const extractNumbers = (values) => values.filter((v) => typeof v === 'number');
28
+ return {
29
+ minute: extractNumbers(fields.minute.values),
30
+ hour: extractNumbers(fields.hour.values),
31
+ day: extractNumbers(fields.dayOfMonth.values),
32
+ month: extractNumbers(fields.month.values),
33
+ weekday: extractNumbers(fields.dayOfWeek.values),
26
34
  };
27
- const fieldNames = ['minute', 'hour', 'day', 'month', 'weekday'];
28
- const result = {
29
- minute: [],
30
- hour: [],
31
- day: [],
32
- month: [],
33
- weekday: [],
34
- };
35
- for (let i = 0; i < fieldNames.length; i++) {
36
- const name = fieldNames[i];
37
- const [min, max] = ranges[name];
38
- result[name] = this.parseField(parts[i], min, max);
39
- }
40
- return result;
41
- }
42
- static parseField(field, minVal, maxVal) {
43
- const values = new Set();
44
- for (const part of field.split(',')) {
45
- if (part === '*') {
46
- for (let i = minVal; i <= maxVal; i++) {
47
- values.add(i);
48
- }
49
- }
50
- else if (part.includes('/')) {
51
- const [base, stepStr] = part.split('/');
52
- const step = parseInt(stepStr, 10);
53
- const start = base === '*' ? minVal : parseInt(base, 10);
54
- for (let i = start; i <= maxVal; i += step) {
55
- values.add(i);
56
- }
57
- }
58
- else if (part.includes('-')) {
59
- const [startStr, endStr] = part.split('-');
60
- const start = parseInt(startStr, 10);
61
- const end = parseInt(endStr, 10);
62
- for (let i = start; i <= end; i++) {
63
- values.add(i);
64
- }
65
- }
66
- else {
67
- values.add(parseInt(part, 10));
68
- }
69
- }
70
- return Array.from(values).sort((a, b) => a - b);
71
35
  }
72
36
  /**
73
37
  * Check if a date matches a cron expression.
@@ -87,28 +51,63 @@ export class CronParser {
87
51
  }
88
52
  /**
89
53
  * Calculate the next run time for a cron expression.
54
+ * Supports timezone-aware scheduling.
90
55
  */
91
- static nextRun(expression, after) {
92
- const start = after || new Date();
56
+ static nextRun(expression, after, timezone) {
93
57
  try {
94
- this.parse(expression);
58
+ const cronExpr = CronExpressionParser.parse(expression, {
59
+ currentDate: after ?? new Date(),
60
+ tz: timezone ?? 'UTC',
61
+ });
62
+ return cronExpr.next().toDate();
95
63
  }
96
64
  catch {
97
65
  return null;
98
66
  }
99
- // Start from next minute
100
- const current = new Date(start);
101
- current.setSeconds(0, 0);
102
- current.setMinutes(current.getMinutes() + 1);
103
- // Search up to 1 year ahead
104
- const maxIterations = 366 * 24 * 60;
105
- for (let i = 0; i < maxIterations; i++) {
106
- if (this.matches(expression, current)) {
107
- return current;
108
- }
109
- current.setMinutes(current.getMinutes() + 1);
67
+ }
68
+ /**
69
+ * Calculate the previous run time for a cron expression.
70
+ */
71
+ static prevRun(expression, before, timezone) {
72
+ try {
73
+ const cronExpr = CronExpressionParser.parse(expression, {
74
+ currentDate: before ?? new Date(),
75
+ tz: timezone ?? 'UTC',
76
+ });
77
+ return cronExpr.prev().toDate();
78
+ }
79
+ catch {
80
+ return null;
81
+ }
82
+ }
83
+ /**
84
+ * Validate a cron expression without throwing.
85
+ * Only accepts standard 5-field cron expressions.
86
+ */
87
+ static isValid(expression) {
88
+ if (!expression || typeof expression !== 'string') {
89
+ return false;
90
+ }
91
+ const parts = expression.trim().split(/\s+/);
92
+ if (parts.length !== 5) {
93
+ return false;
94
+ }
95
+ try {
96
+ CronExpressionParser.parse(expression);
97
+ return true;
110
98
  }
111
- return null;
99
+ catch {
100
+ return false;
101
+ }
102
+ }
103
+ /**
104
+ * Get the underlying cron-parser CronExpression for advanced usage.
105
+ */
106
+ static getInterval(expression, options) {
107
+ return CronExpressionParser.parse(expression, {
108
+ currentDate: options?.currentDate ?? new Date(),
109
+ tz: options?.tz ?? 'UTC',
110
+ });
112
111
  }
113
112
  }
114
113
  // ============================================================================
@@ -127,8 +126,8 @@ export class Scheduler {
127
126
  * Add a scheduled job.
128
127
  */
129
128
  addJob(job) {
130
- // Calculate next run time
131
- job.nextRun = CronParser.nextRun(job.schedule);
129
+ // Calculate next run time with timezone support
130
+ job.nextRun = CronParser.nextRun(job.schedule, undefined, job.timezone);
132
131
  this.jobs.set(job.id, job);
133
132
  }
134
133
  /**
@@ -203,7 +202,7 @@ export class Scheduler {
203
202
  // Update job state
204
203
  job.lastRun = now;
205
204
  job.runCount++;
206
- job.nextRun = CronParser.nextRun(job.schedule, now);
205
+ job.nextRun = CronParser.nextRun(job.schedule, now, job.timezone);
207
206
  }
208
207
  }
209
208
  /**
@@ -228,7 +227,7 @@ export class Scheduler {
228
227
  }
229
228
  job.lastRun = now;
230
229
  job.runCount++;
231
- job.nextRun = CronParser.nextRun(job.schedule, now);
230
+ job.nextRun = CronParser.nextRun(job.schedule, now, job.timezone);
232
231
  results.set(job.id, now);
233
232
  }
234
233
  return results;
@@ -243,15 +242,15 @@ export class Scheduler {
243
242
  // ============================================================================
244
243
  // Helper Functions
245
244
  // ============================================================================
246
- export function createJob(id, workflowPath, schedule, inputs = {}) {
245
+ export function createJob(id, workflowPath, schedule, inputs = {}, timezone = 'UTC') {
247
246
  return {
248
247
  id,
249
248
  workflowPath,
250
249
  schedule,
251
- timezone: 'UTC',
250
+ timezone,
252
251
  enabled: true,
253
252
  lastRun: null,
254
- nextRun: CronParser.nextRun(schedule),
253
+ nextRun: CronParser.nextRun(schedule, undefined, timezone),
255
254
  runCount: 0,
256
255
  inputs,
257
256
  };
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Script Executor for marktoflow v2.0
3
+ *
4
+ * Provides secure inline JavaScript execution for `script` step types.
5
+ * Uses Node.js `vm` module with:
6
+ * - Frozen context (read-only access to variables/inputs)
7
+ * - Configurable timeout
8
+ * - Safe globals (JSON, Math, Date, Array, etc.)
9
+ *
10
+ * Example usage in workflow:
11
+ * ```yaml
12
+ * - type: script
13
+ * inputs:
14
+ * code: |
15
+ * const items = variables.api_response.items;
16
+ * const filtered = items.filter(i => i.status === 'active');
17
+ * return { filtered, count: filtered.length };
18
+ * timeout: 5000
19
+ * output_variable: result
20
+ * ```
21
+ */
22
+ export interface ScriptExecutorOptions {
23
+ /** Maximum execution time in milliseconds (default: 5000) */
24
+ timeout?: number;
25
+ /** Additional globals to expose to the script */
26
+ extraGlobals?: Record<string, unknown>;
27
+ }
28
+ export interface ScriptContext {
29
+ /** Workflow variables (read-only) */
30
+ variables: Record<string, unknown>;
31
+ /** Workflow inputs (read-only) */
32
+ inputs: Record<string, unknown>;
33
+ /** Step results metadata (read-only) */
34
+ steps?: Record<string, unknown>;
35
+ }
36
+ export interface ScriptResult {
37
+ /** Whether the script executed successfully */
38
+ success: boolean;
39
+ /** The return value of the script */
40
+ value?: unknown;
41
+ /** Error message if execution failed */
42
+ error?: string;
43
+ }
44
+ /**
45
+ * Execute a JavaScript code snippet in a sandboxed environment.
46
+ *
47
+ * @param code The JavaScript code to execute
48
+ * @param context Variables and inputs available to the script
49
+ * @param options Execution options (timeout, extra globals)
50
+ * @returns The result of script execution
51
+ */
52
+ export declare function executeScript(code: string, context: ScriptContext, options?: ScriptExecutorOptions): ScriptResult;
53
+ /**
54
+ * Execute a script asynchronously, properly handling async code.
55
+ */
56
+ export declare function executeScriptAsync(code: string, context: ScriptContext, options?: ScriptExecutorOptions): Promise<ScriptResult>;
57
+ /**
58
+ * Validate that a script doesn't contain dangerous patterns.
59
+ * This is a basic check; the VM sandbox provides the real security.
60
+ */
61
+ export declare function validateScript(code: string): {
62
+ valid: boolean;
63
+ warnings: string[];
64
+ };
65
+ //# sourceMappingURL=script-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-executor.d.ts","sourceRoot":"","sources":["../src/script-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAQH,MAAM,WAAW,qBAAqB;IACpC,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,aAAa;IAC5B,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,OAAO,EAAE,OAAO,CAAC;IACjB,qCAAqC;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA4ED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,qBAA0B,GAClC,YAAY,CAmEd;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,YAAY,CAAC,CAgEvB;AA6BD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAwBnF"}