@lotiai/composer 0.2.0 → 0.2.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 (189) hide show
  1. package/dist/build-config/index.d.ts +52 -0
  2. package/dist/build-config/index.d.ts.map +1 -0
  3. package/dist/build-config/index.js +66 -0
  4. package/dist/build-config/index.js.map +1 -0
  5. package/dist/build-config/loader.d.ts +80 -0
  6. package/dist/build-config/loader.d.ts.map +1 -0
  7. package/dist/build-config/loader.js +238 -0
  8. package/dist/build-config/loader.js.map +1 -0
  9. package/dist/build-config/schema.d.ts +101 -0
  10. package/dist/build-config/schema.d.ts.map +1 -0
  11. package/dist/build-config/schema.js +94 -0
  12. package/dist/build-config/schema.js.map +1 -0
  13. package/dist/cli/commands/dev-temporal.d.ts +15 -0
  14. package/dist/cli/commands/dev-temporal.d.ts.map +1 -0
  15. package/dist/cli/commands/dev-temporal.js +68 -0
  16. package/dist/cli/commands/dev-temporal.js.map +1 -0
  17. package/dist/cli/commands/dev.d.ts +21 -0
  18. package/dist/cli/commands/dev.d.ts.map +1 -0
  19. package/dist/cli/commands/dev.js +421 -0
  20. package/dist/cli/commands/dev.js.map +1 -0
  21. package/dist/cli/commands/profiles.d.ts +15 -0
  22. package/dist/cli/commands/profiles.d.ts.map +1 -0
  23. package/dist/cli/commands/profiles.js +69 -0
  24. package/dist/cli/commands/profiles.js.map +1 -0
  25. package/dist/cli/index.d.ts +21 -0
  26. package/dist/cli/index.d.ts.map +1 -0
  27. package/dist/cli/index.js +44 -0
  28. package/dist/cli/index.js.map +1 -0
  29. package/dist/index.d.ts +15 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +57 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/internal/async/build/workflow-factory.d.ts +212 -0
  34. package/dist/internal/async/build/workflow-factory.d.ts.map +1 -0
  35. package/dist/internal/async/build/workflow-factory.js +533 -0
  36. package/dist/internal/async/build/workflow-factory.js.map +1 -0
  37. package/dist/internal/async/build-scripts/utils/common.d.ts +28 -0
  38. package/dist/internal/async/build-scripts/utils/common.d.ts.map +1 -0
  39. package/dist/internal/async/build-scripts/utils/common.js +50 -0
  40. package/dist/internal/async/build-scripts/utils/common.js.map +1 -0
  41. package/dist/internal/async/build-scripts/utils/import-module.d.ts +19 -0
  42. package/dist/internal/async/build-scripts/utils/import-module.d.ts.map +1 -0
  43. package/dist/internal/async/build-scripts/utils/import-module.js +80 -0
  44. package/dist/internal/async/build-scripts/utils/import-module.js.map +1 -0
  45. package/dist/internal/async/build-scripts/utils/type-guards.d.ts +123 -0
  46. package/dist/internal/async/build-scripts/utils/type-guards.d.ts.map +1 -0
  47. package/dist/internal/async/build-scripts/utils/type-guards.js +145 -0
  48. package/dist/internal/async/build-scripts/utils/type-guards.js.map +1 -0
  49. package/dist/internal/async/config/cleanup-policy.d.ts +50 -0
  50. package/dist/internal/async/config/cleanup-policy.d.ts.map +1 -0
  51. package/dist/internal/async/config/cleanup-policy.js +20 -0
  52. package/dist/internal/async/config/cleanup-policy.js.map +1 -0
  53. package/dist/internal/async/config/worker-profiles.d.ts +172 -0
  54. package/dist/internal/async/config/worker-profiles.d.ts.map +1 -0
  55. package/dist/internal/async/config/worker-profiles.js +275 -0
  56. package/dist/internal/async/config/worker-profiles.js.map +1 -0
  57. package/dist/internal/async/execute/temporal-client.d.ts +182 -0
  58. package/dist/internal/async/execute/temporal-client.d.ts.map +1 -0
  59. package/dist/internal/async/execute/temporal-client.js +190 -0
  60. package/dist/internal/async/execute/temporal-client.js.map +1 -0
  61. package/dist/internal/async/execute/workflow-execution.d.ts +98 -0
  62. package/dist/internal/async/execute/workflow-execution.d.ts.map +1 -0
  63. package/dist/internal/async/execute/workflow-execution.js +191 -0
  64. package/dist/internal/async/execute/workflow-execution.js.map +1 -0
  65. package/dist/internal/async/metrics/task-queue-metrics.d.ts +74 -0
  66. package/dist/internal/async/metrics/task-queue-metrics.d.ts.map +1 -0
  67. package/dist/internal/async/metrics/task-queue-metrics.js +155 -0
  68. package/dist/internal/async/metrics/task-queue-metrics.js.map +1 -0
  69. package/dist/internal/async/register/activity-worker.d.ts +123 -0
  70. package/dist/internal/async/register/activity-worker.d.ts.map +1 -0
  71. package/dist/internal/async/register/activity-worker.js +355 -0
  72. package/dist/internal/async/register/activity-worker.js.map +1 -0
  73. package/dist/internal/async/register/generate-workflow-source.d.ts +43 -0
  74. package/dist/internal/async/register/generate-workflow-source.d.ts.map +1 -0
  75. package/dist/internal/async/register/generate-workflow-source.js +193 -0
  76. package/dist/internal/async/register/generate-workflow-source.js.map +1 -0
  77. package/dist/internal/async/register/workflow-worker.d.ts +125 -0
  78. package/dist/internal/async/register/workflow-worker.d.ts.map +1 -0
  79. package/dist/internal/async/register/workflow-worker.js +215 -0
  80. package/dist/internal/async/register/workflow-worker.js.map +1 -0
  81. package/dist/internal/async/register-scripts/start-activity-worker.d.ts +70 -0
  82. package/dist/internal/async/register-scripts/start-activity-worker.d.ts.map +1 -0
  83. package/dist/internal/async/register-scripts/start-activity-worker.js +75 -0
  84. package/dist/internal/async/register-scripts/start-activity-worker.js.map +1 -0
  85. package/dist/internal/async/register-scripts/start-all-workers.d.ts +81 -0
  86. package/dist/internal/async/register-scripts/start-all-workers.d.ts.map +1 -0
  87. package/dist/internal/async/register-scripts/start-all-workers.js +84 -0
  88. package/dist/internal/async/register-scripts/start-all-workers.js.map +1 -0
  89. package/dist/internal/async/register-scripts/start-workflow-worker.d.ts +69 -0
  90. package/dist/internal/async/register-scripts/start-workflow-worker.d.ts.map +1 -0
  91. package/dist/internal/async/register-scripts/start-workflow-worker.js +74 -0
  92. package/dist/internal/async/register-scripts/start-workflow-worker.js.map +1 -0
  93. package/dist/internal/async/register-scripts/sync-schedules-cli.d.ts +28 -0
  94. package/dist/internal/async/register-scripts/sync-schedules-cli.d.ts.map +1 -0
  95. package/dist/internal/async/register-scripts/sync-schedules-cli.js +124 -0
  96. package/dist/internal/async/register-scripts/sync-schedules-cli.js.map +1 -0
  97. package/dist/internal/async/register-scripts/sync-schedules-via-lambda.d.ts +55 -0
  98. package/dist/internal/async/register-scripts/sync-schedules-via-lambda.d.ts.map +1 -0
  99. package/dist/internal/async/register-scripts/sync-schedules-via-lambda.js +146 -0
  100. package/dist/internal/async/register-scripts/sync-schedules-via-lambda.js.map +1 -0
  101. package/dist/internal/async/register-scripts/sync-schedules.d.ts +68 -0
  102. package/dist/internal/async/register-scripts/sync-schedules.d.ts.map +1 -0
  103. package/dist/internal/async/register-scripts/sync-schedules.js +83 -0
  104. package/dist/internal/async/register-scripts/sync-schedules.js.map +1 -0
  105. package/dist/internal/async/schedule/constants.d.ts +10 -0
  106. package/dist/internal/async/schedule/constants.d.ts.map +1 -0
  107. package/dist/internal/async/schedule/constants.js +13 -0
  108. package/dist/internal/async/schedule/constants.js.map +1 -0
  109. package/dist/internal/async/schedule/define-schedule.d.ts +192 -0
  110. package/dist/internal/async/schedule/define-schedule.d.ts.map +1 -0
  111. package/dist/internal/async/schedule/define-schedule.js +79 -0
  112. package/dist/internal/async/schedule/define-schedule.js.map +1 -0
  113. package/dist/internal/async/schedule/index.d.ts +3 -0
  114. package/dist/internal/async/schedule/index.d.ts.map +1 -0
  115. package/dist/internal/async/schedule/index.js +9 -0
  116. package/dist/internal/async/schedule/index.js.map +1 -0
  117. package/dist/internal/async/schedule/schedule-definition-schema.d.ts +64 -0
  118. package/dist/internal/async/schedule/schedule-definition-schema.d.ts.map +1 -0
  119. package/dist/internal/async/schedule/schedule-definition-schema.js +77 -0
  120. package/dist/internal/async/schedule/schedule-definition-schema.js.map +1 -0
  121. package/dist/internal/async/schedule/sync-schedules.d.ts +71 -0
  122. package/dist/internal/async/schedule/sync-schedules.d.ts.map +1 -0
  123. package/dist/internal/async/schedule/sync-schedules.js +231 -0
  124. package/dist/internal/async/schedule/sync-schedules.js.map +1 -0
  125. package/dist/internal/async/utils/ensure-namespace.d.ts +16 -0
  126. package/dist/internal/async/utils/ensure-namespace.d.ts.map +1 -0
  127. package/dist/internal/async/utils/ensure-namespace.js +64 -0
  128. package/dist/internal/async/utils/ensure-namespace.js.map +1 -0
  129. package/dist/internal/async/utils/find-package-root.d.ts +9 -0
  130. package/dist/internal/async/utils/find-package-root.d.ts.map +1 -0
  131. package/dist/internal/async/utils/find-package-root.js +28 -0
  132. package/dist/internal/async/utils/find-package-root.js.map +1 -0
  133. package/dist/internal/async/utils/is-composer-error.d.ts +14 -0
  134. package/dist/internal/async/utils/is-composer-error.d.ts.map +1 -0
  135. package/dist/internal/async/utils/is-composer-error.js +17 -0
  136. package/dist/internal/async/utils/is-composer-error.js.map +1 -0
  137. package/dist/internal/context-provider.d.ts +316 -0
  138. package/dist/internal/context-provider.d.ts.map +1 -0
  139. package/dist/internal/context-provider.js +12 -0
  140. package/dist/internal/context-provider.js.map +1 -0
  141. package/dist/internal/create-composer.d.ts +57 -0
  142. package/dist/internal/create-composer.d.ts.map +1 -0
  143. package/dist/internal/create-composer.js +125 -0
  144. package/dist/internal/create-composer.js.map +1 -0
  145. package/dist/internal/dag-sync-fanout.d.ts +79 -0
  146. package/dist/internal/dag-sync-fanout.d.ts.map +1 -0
  147. package/dist/internal/dag-sync-fanout.js +59 -0
  148. package/dist/internal/dag-sync-fanout.js.map +1 -0
  149. package/dist/internal/dag-sync-step.d.ts +230 -0
  150. package/dist/internal/dag-sync-step.d.ts.map +1 -0
  151. package/dist/internal/dag-sync-step.js +159 -0
  152. package/dist/internal/dag-sync-step.js.map +1 -0
  153. package/dist/internal/dag-sync-workflow.d.ts +535 -0
  154. package/dist/internal/dag-sync-workflow.d.ts.map +1 -0
  155. package/dist/internal/dag-sync-workflow.js +843 -0
  156. package/dist/internal/dag-sync-workflow.js.map +1 -0
  157. package/dist/internal/defaults.d.ts +24 -0
  158. package/dist/internal/defaults.d.ts.map +1 -0
  159. package/dist/internal/defaults.js +102 -0
  160. package/dist/internal/defaults.js.map +1 -0
  161. package/dist/internal/errors.d.ts +109 -0
  162. package/dist/internal/errors.d.ts.map +1 -0
  163. package/dist/internal/errors.js +212 -0
  164. package/dist/internal/errors.js.map +1 -0
  165. package/dist/internal/index.d.ts +9 -0
  166. package/dist/internal/index.d.ts.map +1 -0
  167. package/dist/internal/index.js +22 -0
  168. package/dist/internal/index.js.map +1 -0
  169. package/dist/internal/observability.d.ts +63 -0
  170. package/dist/internal/observability.d.ts.map +1 -0
  171. package/dist/internal/observability.js +323 -0
  172. package/dist/internal/observability.js.map +1 -0
  173. package/dist/internal/types.d.ts +80 -0
  174. package/dist/internal/types.d.ts.map +1 -0
  175. package/dist/internal/types.js +9 -0
  176. package/dist/internal/types.js.map +1 -0
  177. package/dist/internal/workflow-planning.d.ts +107 -0
  178. package/dist/internal/workflow-planning.d.ts.map +1 -0
  179. package/dist/internal/workflow-planning.js +216 -0
  180. package/dist/internal/workflow-planning.js.map +1 -0
  181. package/dist/schedule-sync.d.ts +17 -0
  182. package/dist/schedule-sync.d.ts.map +1 -0
  183. package/dist/schedule-sync.js +22 -0
  184. package/dist/schedule-sync.js.map +1 -0
  185. package/dist/temporal-naming.d.ts +27 -0
  186. package/dist/temporal-naming.d.ts.map +1 -0
  187. package/dist/temporal-naming.js +33 -0
  188. package/dist/temporal-naming.js.map +1 -0
  189. package/package.json +16 -17
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Run Schedule Sync
3
+ *
4
+ * Generic framework function that syncs a list of `ScheduleDefinition`s to the
5
+ * Temporal server configured on a Composer instance. Mirrors the shape of
6
+ * `startActivityWorker` / `startWorkflowWorker`: the caller supplies the
7
+ * schedules explicitly (no directory scanning), and this wrapper handles the
8
+ * cross-cutting concerns -- current-environment filtering, `DRY_RUN` env var,
9
+ * structured logging, and non-zero exit on sync errors.
10
+ *
11
+ * ## Usage
12
+ *
13
+ * ```typescript
14
+ * import { runScheduleSync } from "@lotiai/composer";
15
+ * import { composer } from "./my-app-composer";
16
+ * import * as schedules from "./schedules";
17
+ *
18
+ * await runScheduleSync(composer, {
19
+ * schedules: Object.values(schedules).filter(isScheduleDefinition),
20
+ * });
21
+ * ```
22
+ *
23
+ * @module sync-schedules
24
+ */
25
+ import type { Composer } from "../../context-provider";
26
+ import type { ScheduleDefinition } from "../schedule/define-schedule";
27
+ /**
28
+ * Options for `runScheduleSync`.
29
+ */
30
+ export interface SyncScheduleScriptOptions {
31
+ /**
32
+ * Schedule definitions to reconcile against the Temporal server.
33
+ * The caller is responsible for discovering these (typically by filtering a
34
+ * schedules barrel export with `isScheduleDefinition`).
35
+ */
36
+ schedules: ScheduleDefinition[];
37
+ /**
38
+ * Name of the current environment (e.g. "prod"). Used to filter schedules
39
+ * that declare an `environments` allowlist.
40
+ *
41
+ * @default process.env.ENVIRONMENT_NAME
42
+ */
43
+ currentEnvironment?: string | null;
44
+ /**
45
+ * If true, log what would happen without making changes on the server.
46
+ *
47
+ * @default process.env.COMPOSER_SCHEDULE_SYNC_DRY_RUN === "true"
48
+ */
49
+ dryRun?: boolean;
50
+ }
51
+ /**
52
+ * Reconciles composer-managed Temporal schedules with the supplied list using
53
+ * the Composer's configured Temporal connection.
54
+ *
55
+ * This function:
56
+ * 1. Resolves the current environment (options or `ENVIRONMENT_NAME`) and
57
+ * dry-run flag (options or `DRY_RUN`).
58
+ * 2. Filters schedules by their `environments` allowlist.
59
+ * 3. Logs the resolved configuration and any skipped schedules.
60
+ * 4. Delegates to `composer.syncSchedules()` for the actual reconciliation.
61
+ * 5. Logs a create/update/delete summary.
62
+ * 6. Exits with code 1 if any schedule failed to sync.
63
+ *
64
+ * @param composer - Composer instance providing the Temporal connection + logger
65
+ * @param options - Schedules, current environment, and dry-run flag
66
+ */
67
+ export declare function runScheduleSync<TContext>(composer: Composer<TContext>, options: SyncScheduleScriptOptions): Promise<void>;
68
+ //# sourceMappingURL=sync-schedules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-schedules.d.ts","sourceRoot":"","sources":["../../../../src/internal/async/register-scripts/sync-schedules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC;;;;OAIG;IACH,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAEhC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnC;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAC5C,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAC5B,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CAqEf"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runScheduleSync = runScheduleSync;
4
+ /**
5
+ * Reconciles composer-managed Temporal schedules with the supplied list using
6
+ * the Composer's configured Temporal connection.
7
+ *
8
+ * This function:
9
+ * 1. Resolves the current environment (options or `ENVIRONMENT_NAME`) and
10
+ * dry-run flag (options or `DRY_RUN`).
11
+ * 2. Filters schedules by their `environments` allowlist.
12
+ * 3. Logs the resolved configuration and any skipped schedules.
13
+ * 4. Delegates to `composer.syncSchedules()` for the actual reconciliation.
14
+ * 5. Logs a create/update/delete summary.
15
+ * 6. Exits with code 1 if any schedule failed to sync.
16
+ *
17
+ * @param composer - Composer instance providing the Temporal connection + logger
18
+ * @param options - Schedules, current environment, and dry-run flag
19
+ */
20
+ async function runScheduleSync(composer, options) {
21
+ const logger = composer.logger;
22
+ const { serverAddress, namespace } = composer.temporal;
23
+ const currentEnvironment = options.currentEnvironment ?? process.env.ENVIRONMENT_NAME ?? null;
24
+ const dryRun = options.dryRun ?? process.env.COMPOSER_SCHEDULE_SYNC_DRY_RUN === "true";
25
+ if (currentEnvironment === null && options.schedules.length > 0) {
26
+ logger.error("Cannot sync schedules: no current environment was provided", {
27
+ hint: "Set ENVIRONMENT_NAME or pass options.currentEnvironment to runScheduleSync",
28
+ scheduleCount: options.schedules.length,
29
+ });
30
+ process.exit(1);
31
+ }
32
+ const activeSchedules = [];
33
+ const skippedSchedules = [];
34
+ for (const schedule of options.schedules) {
35
+ if (currentEnvironment !== null && schedule.environments.includes(currentEnvironment)) {
36
+ activeSchedules.push(schedule);
37
+ }
38
+ else {
39
+ skippedSchedules.push({
40
+ scheduleId: schedule.scheduleId,
41
+ environments: schedule.environments,
42
+ });
43
+ }
44
+ }
45
+ logger.info("Syncing Temporal schedules", {
46
+ serverAddress,
47
+ namespace,
48
+ currentEnvironment,
49
+ dryRun,
50
+ active: activeSchedules.length,
51
+ skipped: skippedSchedules.length,
52
+ });
53
+ for (const { scheduleId, environments } of skippedSchedules) {
54
+ logger.debug("Skipping schedule (not active in current environment)", {
55
+ scheduleId,
56
+ environments,
57
+ currentEnvironment,
58
+ });
59
+ }
60
+ try {
61
+ const result = await composer.syncSchedules(activeSchedules, { dryRun });
62
+ logger.info("Schedule sync complete", {
63
+ dryRun,
64
+ created: result.created.length,
65
+ updated: result.updated.length,
66
+ deleted: result.deleted.length,
67
+ errors: result.errors.length,
68
+ });
69
+ if (result.errors.length > 0) {
70
+ for (const { scheduleId, error } of result.errors) {
71
+ logger.error("Schedule failed to sync", { scheduleId, error });
72
+ }
73
+ process.exit(1);
74
+ }
75
+ }
76
+ catch (error) {
77
+ logger.error("Failed to sync Temporal schedules", {
78
+ error: error instanceof Error ? error.message : String(error),
79
+ });
80
+ process.exit(1);
81
+ }
82
+ }
83
+ //# sourceMappingURL=sync-schedules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-schedules.js","sourceRoot":"","sources":["../../../../src/internal/async/register-scripts/sync-schedules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Memo key and value used to tag schedules managed by composer.
3
+ *
4
+ * During sync, only schedules with this memo are considered for update
5
+ * or deletion. Schedules without it (manually created or from other
6
+ * systems) are never touched.
7
+ */
8
+ export declare const MANAGED_BY_MEMO_KEY = "managedBy";
9
+ export declare const MANAGED_BY_MEMO_VALUE = "composer";
10
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/internal/async/schedule/constants.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,eAAO,MAAM,qBAAqB,aAAa,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MANAGED_BY_MEMO_VALUE = exports.MANAGED_BY_MEMO_KEY = void 0;
4
+ /**
5
+ * Memo key and value used to tag schedules managed by composer.
6
+ *
7
+ * During sync, only schedules with this memo are considered for update
8
+ * or deletion. Schedules without it (manually created or from other
9
+ * systems) are never touched.
10
+ */
11
+ exports.MANAGED_BY_MEMO_KEY = "managedBy";
12
+ exports.MANAGED_BY_MEMO_VALUE = "composer";
13
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/internal/async/schedule/constants.ts"],"names":[],"mappings":";;;AAAA;;;;;;GAMG;AACU,QAAA,mBAAmB,GAAG,WAAW,CAAC;AAClC,QAAA,qBAAqB,GAAG,UAAU,CAAC"}
@@ -0,0 +1,192 @@
1
+ /**
2
+ * Schedule Definition
3
+ *
4
+ * Provides the `defineSchedule()` function for declaring Temporal schedule
5
+ * definitions that reference composer workflows. Schedule definitions are
6
+ * declarative -- they describe what should be scheduled, not how to create
7
+ * the schedule on the Temporal server (that's handled at sync time by
8
+ * `composer.syncSchedules()` / `runScheduleSync()`).
9
+ *
10
+ * Consumers export schedule definitions from a barrel (typically
11
+ * `src/schedules/index.ts`) and pass them explicitly to a sync entrypoint --
12
+ * the same "pass it in" pattern used for workflows and steps.
13
+ *
14
+ * @module define-schedule
15
+ */
16
+ import type { ScheduleSpec } from "@temporalio/client";
17
+ import { ScheduleOverlapPolicy } from "@temporalio/client";
18
+ import type { ExtractWorkflowBag, ExtractWorkflowConfig, ExtractWorkflowRequiredInitial, Workflow } from "../../dag-sync-workflow";
19
+ export type { ScheduleSpec } from "@temporalio/client";
20
+ export { ScheduleOverlapPolicy } from "@temporalio/client";
21
+ /**
22
+ * Extracts the required initial data type for a workflow, combining
23
+ * RequiredInitial fields with ConfiguredValues keys.
24
+ *
25
+ * - If the workflow has RequiredInitial fields, those must be provided.
26
+ * - ConfiguredValues are already baked into the workflow and don't need
27
+ * to be provided in initialData.
28
+ */
29
+ type ScheduleInitialData<W extends Workflow<any, any, any, any, any>> = [
30
+ ExtractWorkflowRequiredInitial<W>
31
+ ] extends [never] ? Partial<ExtractWorkflowBag<W>> | undefined : Partial<ExtractWorkflowBag<W>> & Pick<ExtractWorkflowBag<W>, Exclude<ExtractWorkflowRequiredInitial<W>, keyof ExtractWorkflowConfig<W>>>;
32
+ /**
33
+ * Options for defining a schedule.
34
+ *
35
+ * @typeParam W - The workflow type this schedule is for
36
+ */
37
+ export interface ScheduleDefinitionOptions<W extends Workflow<any, any, any, any, any>> {
38
+ /**
39
+ * Unique, stable identifier for this schedule on the Temporal server.
40
+ *
41
+ * This ID persists across deployments -- it's how `syncSchedules()` knows
42
+ * which schedule to update. Choose a descriptive, kebab-case name.
43
+ *
44
+ * @example "daily-report", "weekly-cleanup", "hourly-health-check"
45
+ */
46
+ scheduleId: string;
47
+ /**
48
+ * The workflow to execute on this schedule.
49
+ *
50
+ * Pass the workflow definition object (the result of `createWorkflow(...).build(...)`.
51
+ */
52
+ workflow: W;
53
+ /**
54
+ * Static initial data for scheduled runs.
55
+ *
56
+ * Type-safe: must satisfy the workflow's RequiredInitial constraint.
57
+ * For workflows with no required initial fields, this is optional.
58
+ */
59
+ initialData: ScheduleInitialData<W>;
60
+ /**
61
+ * When the schedule should fire.
62
+ *
63
+ * Uses Temporal's `ScheduleSpec` type directly. Supports:
64
+ * - `calendars`: Calendar-based times (like cron but more readable)
65
+ * - `intervals`: Repeating intervals (e.g., every 1 hour)
66
+ * - `cronExpressions`: Legacy cron strings
67
+ * - `timezone`: IANA timezone (default: UTC)
68
+ * - `jitter`: Random jitter added to each trigger time
69
+ * - `startAt` / `endAt`: Time bounds
70
+ * - `skip`: Calendar specs for times to exclude
71
+ *
72
+ * @example
73
+ * // Every day at 2am UTC
74
+ * { calendars: [{ hour: 2 }] }
75
+ *
76
+ * @example
77
+ * // Every Monday at 8:30am Eastern
78
+ * { calendars: [{ hour: 8, minute: 30, dayOfWeek: "MONDAY" }], timezone: "US/Eastern" }
79
+ *
80
+ * @example
81
+ * // Every hour
82
+ * { intervals: [{ every: "1h" }] }
83
+ */
84
+ spec: ScheduleSpec;
85
+ /**
86
+ * What happens when a new run would start while a previous is still running.
87
+ *
88
+ * @default ScheduleOverlapPolicy.SKIP
89
+ */
90
+ overlap?: ScheduleOverlapPolicy;
91
+ /**
92
+ * Maximum time period for catching up missed runs.
93
+ *
94
+ * If the Temporal server was down or the schedule was paused, this controls
95
+ * how far back it will try to execute missed runs on recovery.
96
+ *
97
+ * Accepts ms-formatted strings (e.g., "1d", "1h") or milliseconds as a number.
98
+ *
99
+ * @default "1 minute" (Temporal's default)
100
+ * @example "1 day", "1h", "0" (no catchup)
101
+ */
102
+ catchupWindow?: number | string;
103
+ /**
104
+ * Whether to create the schedule in a paused state.
105
+ *
106
+ * @default false
107
+ */
108
+ paused?: boolean;
109
+ /**
110
+ * Human-readable note about this schedule.
111
+ * Visible in the Temporal UI.
112
+ */
113
+ note?: string;
114
+ /**
115
+ * Task queue for the scheduled workflow.
116
+ * @default "workflow-tasks"
117
+ */
118
+ taskQueue?: string;
119
+ /**
120
+ * Environments in which this schedule should be active.
121
+ *
122
+ * Must be a non-empty list of environment names (e.g. `"prod"`, `"preview"`).
123
+ * At sync time, the schedule is only reconciled when the current environment
124
+ * (`ENVIRONMENT_NAME`) matches one of these values. This keeps
125
+ * production-only schedules from running in preview / local environments.
126
+ *
127
+ * @example ["prod"]
128
+ * @example ["preview", "prod"]
129
+ */
130
+ environments: readonly string[];
131
+ }
132
+ /**
133
+ * A schedule definition ready for syncing to the Temporal server.
134
+ *
135
+ * This is the runtime representation produced by `defineSchedule()`.
136
+ * It carries the workflow name (extracted from the workflow definition)
137
+ * and all schedule configuration.
138
+ */
139
+ export interface ScheduleDefinition {
140
+ /** Marker for type guard identification */
141
+ readonly __scheduleDefinition: true;
142
+ /** Unique schedule ID on the Temporal server */
143
+ readonly scheduleId: string;
144
+ /** Workflow name (unversioned -- versioning is applied at sync time) */
145
+ readonly workflowName: string;
146
+ /** Static initial data for scheduled runs */
147
+ readonly initialData: Record<string, unknown>;
148
+ /** Configured values from the workflow (merged at sync time, overriding initialData) */
149
+ readonly configuredValues: Record<string, unknown>;
150
+ /** When the schedule should fire */
151
+ readonly spec: ScheduleSpec;
152
+ /** Overlap policy */
153
+ readonly overlap: ScheduleOverlapPolicy;
154
+ /** Catchup window for missed runs */
155
+ readonly catchupWindow?: number | string;
156
+ /** Whether to create in paused state */
157
+ readonly paused: boolean;
158
+ /** Human-readable note */
159
+ readonly note?: string;
160
+ /** Task queue */
161
+ readonly taskQueue: string;
162
+ /** Environments in which this schedule should be active (non-empty). */
163
+ readonly environments: readonly string[];
164
+ }
165
+ /**
166
+ * Defines a Temporal schedule for a composer workflow.
167
+ *
168
+ * Creates a typed, declarative schedule definition that consumers export from
169
+ * a `schedules/` barrel and pass explicitly to a sync entrypoint (e.g.
170
+ * `runScheduleSync()`), mirroring how workflows are passed to
171
+ * `startWorkflowWorker()`.
172
+ *
173
+ * @example
174
+ * ```typescript
175
+ * import { defineSchedule, ScheduleOverlapPolicy } from "@lotiai/composer";
176
+ * import { dailyReportWorkflow } from "../workflows/daily-report-workflow";
177
+ *
178
+ * export const dailyReport = defineSchedule({
179
+ * scheduleId: "daily-report",
180
+ * workflow: dailyReportWorkflow,
181
+ * initialData: { reportType: "daily" },
182
+ * environments: ["prod"],
183
+ * spec: {
184
+ * calendars: [{ hour: 8, minute: 0 }],
185
+ * timezone: "US/Eastern",
186
+ * },
187
+ * overlap: ScheduleOverlapPolicy.SKIP,
188
+ * });
189
+ * ```
190
+ */
191
+ export declare function defineSchedule<W extends Workflow<any, any, any, any, any>>(options: ScheduleDefinitionOptions<W>): ScheduleDefinition;
192
+ //# sourceMappingURL=define-schedule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-schedule.d.ts","sourceRoot":"","sources":["../../../../src/internal/async/schedule/define-schedule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ /**
3
+ * Schedule Definition
4
+ *
5
+ * Provides the `defineSchedule()` function for declaring Temporal schedule
6
+ * definitions that reference composer workflows. Schedule definitions are
7
+ * declarative -- they describe what should be scheduled, not how to create
8
+ * the schedule on the Temporal server (that's handled at sync time by
9
+ * `composer.syncSchedules()` / `runScheduleSync()`).
10
+ *
11
+ * Consumers export schedule definitions from a barrel (typically
12
+ * `src/schedules/index.ts`) and pass them explicitly to a sync entrypoint --
13
+ * the same "pass it in" pattern used for workflows and steps.
14
+ *
15
+ * @module define-schedule
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.ScheduleOverlapPolicy = void 0;
19
+ exports.defineSchedule = defineSchedule;
20
+ const client_1 = require("@temporalio/client");
21
+ var client_2 = require("@temporalio/client");
22
+ Object.defineProperty(exports, "ScheduleOverlapPolicy", { enumerable: true, get: function () { return client_2.ScheduleOverlapPolicy; } });
23
+ /**
24
+ * Defines a Temporal schedule for a composer workflow.
25
+ *
26
+ * Creates a typed, declarative schedule definition that consumers export from
27
+ * a `schedules/` barrel and pass explicitly to a sync entrypoint (e.g.
28
+ * `runScheduleSync()`), mirroring how workflows are passed to
29
+ * `startWorkflowWorker()`.
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * import { defineSchedule, ScheduleOverlapPolicy } from "@lotiai/composer";
34
+ * import { dailyReportWorkflow } from "../workflows/daily-report-workflow";
35
+ *
36
+ * export const dailyReport = defineSchedule({
37
+ * scheduleId: "daily-report",
38
+ * workflow: dailyReportWorkflow,
39
+ * initialData: { reportType: "daily" },
40
+ * environments: ["prod"],
41
+ * spec: {
42
+ * calendars: [{ hour: 8, minute: 0 }],
43
+ * timezone: "US/Eastern",
44
+ * },
45
+ * overlap: ScheduleOverlapPolicy.SKIP,
46
+ * });
47
+ * ```
48
+ */
49
+ function defineSchedule(options) {
50
+ if (!options.scheduleId || typeof options.scheduleId !== "string") {
51
+ throw new Error("scheduleId is required and must be a non-empty string");
52
+ }
53
+ if (!options.workflow || typeof options.workflow.name !== "string") {
54
+ throw new Error("workflow is required and must be a valid workflow definition");
55
+ }
56
+ if (!options.spec) {
57
+ throw new Error("spec is required -- define when the schedule should fire");
58
+ }
59
+ if (!Array.isArray(options.environments) ||
60
+ options.environments.length === 0 ||
61
+ !options.environments.every((env) => typeof env === "string" && env.length > 0)) {
62
+ throw new Error(`environments is required for schedule "${options.scheduleId}" and must be a non-empty array of environment names (e.g. ["prod"])`);
63
+ }
64
+ return {
65
+ __scheduleDefinition: true,
66
+ scheduleId: options.scheduleId,
67
+ workflowName: options.workflow.name,
68
+ initialData: (options.initialData ?? {}),
69
+ configuredValues: (options.workflow.configuredValues ?? {}),
70
+ spec: options.spec,
71
+ overlap: options.overlap ?? client_1.ScheduleOverlapPolicy.SKIP,
72
+ catchupWindow: options.catchupWindow,
73
+ paused: options.paused ?? false,
74
+ note: options.note,
75
+ taskQueue: options.taskQueue ?? "workflow-tasks",
76
+ environments: [...options.environments],
77
+ };
78
+ }
79
+ //# sourceMappingURL=define-schedule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-schedule.js","sourceRoot":"","sources":["../../../../src/internal/async/schedule/define-schedule.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAqNH,wCAuCC;AAzPD,+CAA2D;AAS3D,6CAA2D;AAAlD,+GAAA,qBAAqB,OAAA;AA+K9B;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,SAAgB,cAAc,CAC5B,OAAqC;IAErC,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IAED,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;QACpC,OAAO,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;QACjC,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,EAC/E,CAAC;QACD,MAAM,IAAI,KAAK,CACb,0CAA0C,OAAO,CAAC,UAAU,sEAAsE,CACnI,CAAC;IACJ,CAAC;IAED,OAAO;QACL,oBAAoB,EAAE,IAAI;QAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;QACnC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAA4B;QACnE,gBAAgB,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,IAAI,EAAE,CAA4B;QACtF,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,8BAAqB,CAAC,IAAI;QACtD,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;QAC/B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,gBAAgB;QAChD,YAAY,EAAE,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;KACxC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { defineSchedule, type ScheduleDefinition, type ScheduleDefinitionOptions, ScheduleOverlapPolicy, type ScheduleSpec, } from "./define-schedule";
2
+ export { type SyncSchedulesConfig, type SyncSchedulesResult, syncSchedules, type TemporalScheduleConfig, } from "./sync-schedules";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/internal/async/schedule/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,qBAAqB,EACrB,KAAK,YAAY,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,aAAa,EACb,KAAK,sBAAsB,GAC5B,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.syncSchedules = exports.ScheduleOverlapPolicy = exports.defineSchedule = void 0;
4
+ var define_schedule_1 = require("./define-schedule");
5
+ Object.defineProperty(exports, "defineSchedule", { enumerable: true, get: function () { return define_schedule_1.defineSchedule; } });
6
+ Object.defineProperty(exports, "ScheduleOverlapPolicy", { enumerable: true, get: function () { return define_schedule_1.ScheduleOverlapPolicy; } });
7
+ var sync_schedules_1 = require("./sync-schedules");
8
+ Object.defineProperty(exports, "syncSchedules", { enumerable: true, get: function () { return sync_schedules_1.syncSchedules; } });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/internal/async/schedule/index.ts"],"names":[],"mappings":";;;AAAA,qDAM2B;AALzB,iHAAA,cAAc,OAAA;AAGd,wHAAA,qBAAqB,OAAA;AAGvB,mDAK0B;AAFxB,+GAAA,aAAa,OAAA"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Zod schema for `ScheduleDefinition`.
3
+ *
4
+ * Used at trust boundaries where schedule definitions arrive as JSON from
5
+ * another process -- notably the `schedule-sync` Lambda's event payload. The
6
+ * schema mirrors the `ScheduleDefinition` interface and matches the shape
7
+ * produced by `defineSchedule()`.
8
+ *
9
+ * @module schedule-definition-schema
10
+ */
11
+ import { z } from "zod";
12
+ /**
13
+ * Overlap policy values accepted by `ScheduleDefinition.overlap`.
14
+ *
15
+ * Mirrors the string values exported by `@temporalio/client`'s
16
+ * `ScheduleOverlapPolicy` (excluding the deprecated `UNSPECIFIED`). Hand-listed
17
+ * rather than derived from the SDK object because the SDK includes an
18
+ * `UNSPECIFIED: undefined` entry that is not a valid Zod enum value.
19
+ */
20
+ export declare const scheduleOverlapPolicySchema: z.ZodEnum<{
21
+ SKIP: "SKIP";
22
+ BUFFER_ONE: "BUFFER_ONE";
23
+ BUFFER_ALL: "BUFFER_ALL";
24
+ CANCEL_OTHER: "CANCEL_OTHER";
25
+ TERMINATE_OTHER: "TERMINATE_OTHER";
26
+ ALLOW_ALL: "ALLOW_ALL";
27
+ }>;
28
+ /**
29
+ * Zod schema for `ScheduleDefinition`.
30
+ *
31
+ * Structurally mirrors the `ScheduleDefinition` interface produced by
32
+ * `defineSchedule()`. Used at trust boundaries where schedule definitions
33
+ * arrive as JSON from another process -- notably the schedule-sync Lambda.
34
+ *
35
+ * Note: the inferred output type preserves structural compatibility with
36
+ * `ScheduleDefinition`, but `spec` widens to a loose object. Callers handing
37
+ * the parsed value to `syncSchedules()` should cast the array as
38
+ * `ScheduleDefinition[]`.
39
+ */
40
+ export declare const scheduleDefinitionSchema: z.ZodObject<{
41
+ __scheduleDefinition: z.ZodLiteral<true>;
42
+ scheduleId: z.ZodString;
43
+ workflowName: z.ZodString;
44
+ initialData: z.ZodRecord<z.ZodString, z.ZodUnknown>;
45
+ configuredValues: z.ZodRecord<z.ZodString, z.ZodUnknown>;
46
+ spec: z.ZodObject<{
47
+ startAt: z.ZodOptional<z.ZodCoercedDate<unknown>>;
48
+ endAt: z.ZodOptional<z.ZodCoercedDate<unknown>>;
49
+ }, z.core.$loose>;
50
+ overlap: z.ZodEnum<{
51
+ SKIP: "SKIP";
52
+ BUFFER_ONE: "BUFFER_ONE";
53
+ BUFFER_ALL: "BUFFER_ALL";
54
+ CANCEL_OTHER: "CANCEL_OTHER";
55
+ TERMINATE_OTHER: "TERMINATE_OTHER";
56
+ ALLOW_ALL: "ALLOW_ALL";
57
+ }>;
58
+ catchupWindow: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
59
+ paused: z.ZodBoolean;
60
+ note: z.ZodOptional<z.ZodString>;
61
+ taskQueue: z.ZodString;
62
+ environments: z.ZodArray<z.ZodString>;
63
+ }, z.core.$strict>;
64
+ //# sourceMappingURL=schedule-definition-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule-definition-schema.d.ts","sourceRoot":"","sources":["../../../../src/internal/async/schedule/schedule-definition-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B;;;;;;;EAOtC,CAAC;AAuBH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;kBAanC,CAAC"}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scheduleDefinitionSchema = exports.scheduleOverlapPolicySchema = void 0;
4
+ /**
5
+ * Zod schema for `ScheduleDefinition`.
6
+ *
7
+ * Used at trust boundaries where schedule definitions arrive as JSON from
8
+ * another process -- notably the `schedule-sync` Lambda's event payload. The
9
+ * schema mirrors the `ScheduleDefinition` interface and matches the shape
10
+ * produced by `defineSchedule()`.
11
+ *
12
+ * @module schedule-definition-schema
13
+ */
14
+ const zod_1 = require("zod");
15
+ /**
16
+ * Overlap policy values accepted by `ScheduleDefinition.overlap`.
17
+ *
18
+ * Mirrors the string values exported by `@temporalio/client`'s
19
+ * `ScheduleOverlapPolicy` (excluding the deprecated `UNSPECIFIED`). Hand-listed
20
+ * rather than derived from the SDK object because the SDK includes an
21
+ * `UNSPECIFIED: undefined` entry that is not a valid Zod enum value.
22
+ */
23
+ exports.scheduleOverlapPolicySchema = zod_1.z.enum([
24
+ "SKIP",
25
+ "BUFFER_ONE",
26
+ "BUFFER_ALL",
27
+ "CANCEL_OTHER",
28
+ "TERMINATE_OTHER",
29
+ "ALLOW_ALL",
30
+ ]);
31
+ /**
32
+ * Zod schema for `ScheduleSpec`.
33
+ *
34
+ * Passes unrecognized fields through untouched so detailed `ScheduleSpec`
35
+ * shape validation stays with the Temporal client (which runs downstream of
36
+ * this schema). The known `Date`-valued fields (`startAt`, `endAt`) are
37
+ * explicitly coerced because schedule definitions are `JSON.stringify`ed
38
+ * when shipped to the schedule-sync Lambda, which loses `Date` identity --
39
+ * without this coercion, `startAt`/`endAt` would arrive as ISO strings and
40
+ * the Temporal client would reject them when constructing the protobuf
41
+ * payload.
42
+ *
43
+ * `z.coerce.date()` accepts both real `Date` instances (direct path, where
44
+ * this schema is not strictly needed but may still be applied) and ISO
45
+ * strings (Lambda path, after JSON round-trip).
46
+ */
47
+ const scheduleSpecSchema = zod_1.z.looseObject({
48
+ startAt: zod_1.z.coerce.date().optional(),
49
+ endAt: zod_1.z.coerce.date().optional(),
50
+ });
51
+ /**
52
+ * Zod schema for `ScheduleDefinition`.
53
+ *
54
+ * Structurally mirrors the `ScheduleDefinition` interface produced by
55
+ * `defineSchedule()`. Used at trust boundaries where schedule definitions
56
+ * arrive as JSON from another process -- notably the schedule-sync Lambda.
57
+ *
58
+ * Note: the inferred output type preserves structural compatibility with
59
+ * `ScheduleDefinition`, but `spec` widens to a loose object. Callers handing
60
+ * the parsed value to `syncSchedules()` should cast the array as
61
+ * `ScheduleDefinition[]`.
62
+ */
63
+ exports.scheduleDefinitionSchema = zod_1.z.strictObject({
64
+ __scheduleDefinition: zod_1.z.literal(true),
65
+ scheduleId: zod_1.z.string().min(1),
66
+ workflowName: zod_1.z.string().min(1),
67
+ initialData: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()),
68
+ configuredValues: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()),
69
+ spec: scheduleSpecSchema,
70
+ overlap: exports.scheduleOverlapPolicySchema,
71
+ catchupWindow: zod_1.z.union([zod_1.z.number(), zod_1.z.string()]).optional(),
72
+ paused: zod_1.z.boolean(),
73
+ note: zod_1.z.string().optional(),
74
+ taskQueue: zod_1.z.string().min(1),
75
+ environments: zod_1.z.array(zod_1.z.string().min(1)).min(1),
76
+ });
77
+ //# sourceMappingURL=schedule-definition-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule-definition-schema.js","sourceRoot":"","sources":["../../../../src/internal/async/schedule/schedule-definition-schema.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;GASG;AACH,6BAAwB;AAExB;;;;;;;GAOG;AACU,QAAA,2BAA2B,GAAG,OAAC,CAAC,IAAI,CAAC;IAChD,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,iBAAiB;IACjB,WAAW;CACZ,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;GAeG;AACH,MAAM,kBAAkB,GAAG,OAAC,CAAC,WAAW,CAAC;IACvC,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACnC,KAAK,EAAE,OAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC;AAEH;;;;;;;;;;;GAWG;AACU,QAAA,wBAAwB,GAAG,OAAC,CAAC,YAAY,CAAC;IACrD,oBAAoB,EAAE,OAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IACrC,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC;IAC9C,gBAAgB,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC;IACnD,IAAI,EAAE,kBAAkB;IACxB,OAAO,EAAE,mCAA2B;IACpC,aAAa,EAAE,OAAC,CAAC,KAAK,CAAC,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC3D,MAAM,EAAE,OAAC,CAAC,OAAO,EAAE;IACnB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,YAAY,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CAChD,CAAC,CAAC"}