@lotiai/composer 0.2.0 → 0.2.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 (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 +29 -17
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Schedule Synchronization
3
+ *
4
+ * Declaratively reconciles Temporal schedules with schedule definitions.
5
+ * The set of definitions passed in is the source of truth -- schedules
6
+ * are created, updated, or deleted to match.
7
+ *
8
+ * Ownership is tracked via a `managedBy: "composer"` memo on each schedule.
9
+ * Schedules without this memo (manually created or from other systems) are
10
+ * never touched.
11
+ *
12
+ * @module sync-schedules
13
+ */
14
+ import type { ComposerLogger } from "../../types";
15
+ import type { ScheduleDefinition } from "./define-schedule";
16
+ /**
17
+ * Configuration for connecting to Temporal for schedule sync.
18
+ */
19
+ export interface TemporalScheduleConfig {
20
+ /** Temporal server address (e.g., "localhost:7233") */
21
+ address: string;
22
+ /** Temporal namespace (e.g., "default") */
23
+ namespace: string;
24
+ }
25
+ /**
26
+ * Configuration for syncing schedules.
27
+ */
28
+ export interface SyncSchedulesConfig {
29
+ /** Temporal connection config */
30
+ temporalConfig: TemporalScheduleConfig;
31
+ /** Schedule definitions to sync (source of truth) */
32
+ schedules: ScheduleDefinition[];
33
+ /**
34
+ * If true, log what would happen without making changes.
35
+ * @default false
36
+ */
37
+ dryRun?: boolean;
38
+ /** Logger for sync progress */
39
+ logger?: ComposerLogger;
40
+ }
41
+ /**
42
+ * Result of a schedule sync operation.
43
+ */
44
+ export interface SyncSchedulesResult {
45
+ /** Schedules that were created */
46
+ created: string[];
47
+ /** Schedules that were updated */
48
+ updated: string[];
49
+ /** Schedules that were deleted (no longer in definitions) */
50
+ deleted: string[];
51
+ /** Schedules that failed to sync */
52
+ errors: Array<{
53
+ scheduleId: string;
54
+ error: string;
55
+ }>;
56
+ }
57
+ /**
58
+ * Declaratively synchronizes schedule definitions to the Temporal server.
59
+ *
60
+ * This function:
61
+ * 1. Lists all existing schedules with the `managedBy: "composer"` memo
62
+ * 2. Creates schedules that exist in definitions but not on the server
63
+ * 3. Updates schedules that exist in both (applies latest spec, versioned workflow name, policies)
64
+ * 4. Deletes composer-managed schedules that are no longer in the definitions
65
+ *
66
+ * Non-composer schedules are never touched.
67
+ *
68
+ * @returns Summary of what was created, updated, and deleted
69
+ */
70
+ export declare function syncSchedules(config: SyncSchedulesConfig): Promise<SyncSchedulesResult>;
71
+ //# sourceMappingURL=sync-schedules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-schedules.d.ts","sourceRoot":"","sources":["../../../../src/internal/async/schedule/sync-schedules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAUH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,iCAAiC;IACjC,cAAc,EAAE,sBAAsB,CAAC;IAEvC,qDAAqD;IACrD,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAEhC;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,+BAA+B;IAC/B,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,kCAAkC;IAClC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kCAAkC;IAClC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,6DAA6D;IAC7D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,oCAAoC;IACpC,MAAM,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtD;AAyCD;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAqG7F"}
@@ -0,0 +1,231 @@
1
+ "use strict";
2
+ /**
3
+ * Schedule Synchronization
4
+ *
5
+ * Declaratively reconciles Temporal schedules with schedule definitions.
6
+ * The set of definitions passed in is the source of truth -- schedules
7
+ * are created, updated, or deleted to match.
8
+ *
9
+ * Ownership is tracked via a `managedBy: "composer"` memo on each schedule.
10
+ * Schedules without this memo (manually created or from other systems) are
11
+ * never touched.
12
+ *
13
+ * @module sync-schedules
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.syncSchedules = syncSchedules;
17
+ const client_1 = require("@temporalio/client");
18
+ const defaults_1 = require("../../defaults");
19
+ const constants_1 = require("./constants");
20
+ /**
21
+ * Checks if a schedule summary was created by composer (has the managed-by memo).
22
+ */
23
+ function isComposerManaged(summary) {
24
+ return summary.memo?.[constants_1.MANAGED_BY_MEMO_KEY] === constants_1.MANAGED_BY_MEMO_VALUE;
25
+ }
26
+ /**
27
+ * Builds the Temporal ScheduleOptions from a ScheduleDefinition.
28
+ */
29
+ function buildScheduleOptions(definition) {
30
+ const mergedInitialData = {
31
+ ...definition.initialData,
32
+ ...definition.configuredValues,
33
+ };
34
+ return {
35
+ scheduleId: definition.scheduleId,
36
+ spec: definition.spec,
37
+ action: {
38
+ type: "startWorkflow",
39
+ workflowType: definition.workflowName,
40
+ taskQueue: definition.taskQueue,
41
+ args: [{ initialData: mergedInitialData }],
42
+ },
43
+ policies: {
44
+ overlap: definition.overlap,
45
+ ...(definition.catchupWindow != null ? { catchupWindow: definition.catchupWindow } : {}),
46
+ },
47
+ state: {
48
+ paused: definition.paused,
49
+ note: definition.note,
50
+ },
51
+ memo: {
52
+ [constants_1.MANAGED_BY_MEMO_KEY]: constants_1.MANAGED_BY_MEMO_VALUE,
53
+ },
54
+ };
55
+ }
56
+ /**
57
+ * Declaratively synchronizes schedule definitions to the Temporal server.
58
+ *
59
+ * This function:
60
+ * 1. Lists all existing schedules with the `managedBy: "composer"` memo
61
+ * 2. Creates schedules that exist in definitions but not on the server
62
+ * 3. Updates schedules that exist in both (applies latest spec, versioned workflow name, policies)
63
+ * 4. Deletes composer-managed schedules that are no longer in the definitions
64
+ *
65
+ * Non-composer schedules are never touched.
66
+ *
67
+ * @returns Summary of what was created, updated, and deleted
68
+ */
69
+ async function syncSchedules(config) {
70
+ const { temporalConfig, schedules, dryRun = false } = config;
71
+ const logger = config.logger ?? defaults_1.defaultLogger;
72
+ const result = {
73
+ created: [],
74
+ updated: [],
75
+ deleted: [],
76
+ errors: [],
77
+ };
78
+ const connection = await client_1.Connection.connect({ address: temporalConfig.address });
79
+ try {
80
+ const client = new client_1.Client({ connection, namespace: temporalConfig.namespace });
81
+ // Collect all composer-managed schedules currently on the server
82
+ const existingManagedIds = new Set();
83
+ for await (const summary of client.schedule.list()) {
84
+ if (isComposerManaged(summary)) {
85
+ existingManagedIds.add(summary.scheduleId);
86
+ }
87
+ }
88
+ // Build lookup of declared schedule IDs
89
+ const declaredIds = new Set(schedules.map((s) => s.scheduleId));
90
+ // Validate no duplicate schedule IDs in definitions
91
+ if (declaredIds.size !== schedules.length) {
92
+ const seen = new Set();
93
+ for (const s of schedules) {
94
+ if (seen.has(s.scheduleId)) {
95
+ throw new Error(`Duplicate scheduleId "${s.scheduleId}" found in schedule definitions`);
96
+ }
97
+ seen.add(s.scheduleId);
98
+ }
99
+ }
100
+ // Create or update each declared schedule
101
+ for (const definition of schedules) {
102
+ const { scheduleId } = definition;
103
+ const exists = existingManagedIds.has(scheduleId);
104
+ try {
105
+ if (exists) {
106
+ if (dryRun) {
107
+ logger.info("[dry-run] Would update schedule", { scheduleId });
108
+ }
109
+ else {
110
+ await updateSchedule(client, definition, logger);
111
+ }
112
+ result.updated.push(scheduleId);
113
+ }
114
+ else {
115
+ if (dryRun) {
116
+ logger.info("[dry-run] Would create schedule", { scheduleId });
117
+ }
118
+ else {
119
+ await createSchedule(client, definition, logger);
120
+ }
121
+ result.created.push(scheduleId);
122
+ }
123
+ }
124
+ catch (err) {
125
+ const errorMessage = err instanceof Error ? err.message : String(err);
126
+ logger.error("Failed to sync schedule", { scheduleId, error: errorMessage });
127
+ result.errors.push({ scheduleId, error: errorMessage });
128
+ }
129
+ }
130
+ // Delete composer-managed schedules that are no longer declared
131
+ for (const existingId of existingManagedIds) {
132
+ if (!declaredIds.has(existingId)) {
133
+ try {
134
+ if (dryRun) {
135
+ logger.info("[dry-run] Would delete schedule", { scheduleId: existingId });
136
+ }
137
+ else {
138
+ const handle = client.schedule.getHandle(existingId);
139
+ await handle.delete();
140
+ logger.info("Deleted schedule", { scheduleId: existingId });
141
+ }
142
+ result.deleted.push(existingId);
143
+ }
144
+ catch (err) {
145
+ const errorMessage = err instanceof Error ? err.message : String(err);
146
+ logger.error("Failed to delete schedule", {
147
+ scheduleId: existingId,
148
+ error: errorMessage,
149
+ });
150
+ result.errors.push({ scheduleId: existingId, error: errorMessage });
151
+ }
152
+ }
153
+ }
154
+ // Summary
155
+ logger.info("Schedule sync complete", {
156
+ dryRun,
157
+ created: result.created.length,
158
+ updated: result.updated.length,
159
+ deleted: result.deleted.length,
160
+ errors: result.errors.length,
161
+ });
162
+ return result;
163
+ }
164
+ finally {
165
+ await connection.close();
166
+ }
167
+ }
168
+ /**
169
+ * Creates a new schedule on the Temporal server.
170
+ *
171
+ * If the schedule already exists (race condition), falls back to update.
172
+ */
173
+ async function createSchedule(client, definition, logger) {
174
+ const options = buildScheduleOptions(definition);
175
+ try {
176
+ await client.schedule.create(options);
177
+ logger.info("Created schedule", {
178
+ scheduleId: definition.scheduleId,
179
+ workflowType: options.action.workflowType,
180
+ });
181
+ }
182
+ catch (err) {
183
+ if (err instanceof client_1.ScheduleAlreadyRunning) {
184
+ const handle = client.schedule.getHandle(definition.scheduleId);
185
+ const desc = await handle.describe();
186
+ if (desc.memo?.[constants_1.MANAGED_BY_MEMO_KEY] !== constants_1.MANAGED_BY_MEMO_VALUE) {
187
+ throw new Error(`Schedule "${definition.scheduleId}" already exists but is not managed by composer. ` +
188
+ `Refusing to overwrite. Delete or rename the existing schedule to resolve this conflict.`);
189
+ }
190
+ logger.info("Schedule already exists (race condition), updating instead", {
191
+ scheduleId: definition.scheduleId,
192
+ });
193
+ await updateSchedule(client, definition, logger);
194
+ }
195
+ else {
196
+ throw err;
197
+ }
198
+ }
199
+ }
200
+ /**
201
+ * Updates an existing schedule on the Temporal server.
202
+ */
203
+ async function updateSchedule(client, definition, logger) {
204
+ const handle = client.schedule.getHandle(definition.scheduleId);
205
+ const mergedInitialData = {
206
+ ...definition.initialData,
207
+ ...definition.configuredValues,
208
+ };
209
+ await handle.update((_previous) => ({
210
+ spec: definition.spec,
211
+ action: {
212
+ type: "startWorkflow",
213
+ workflowType: definition.workflowName,
214
+ taskQueue: definition.taskQueue,
215
+ args: [{ initialData: mergedInitialData }],
216
+ },
217
+ policies: {
218
+ overlap: definition.overlap,
219
+ ...(definition.catchupWindow != null ? { catchupWindow: definition.catchupWindow } : {}),
220
+ },
221
+ state: {
222
+ paused: definition.paused,
223
+ note: definition.note,
224
+ },
225
+ }));
226
+ logger.info("Updated schedule", {
227
+ scheduleId: definition.scheduleId,
228
+ workflowType: definition.workflowName,
229
+ });
230
+ }
231
+ //# sourceMappingURL=sync-schedules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-schedules.js","sourceRoot":"","sources":["../../../../src/internal/async/schedule/sync-schedules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Ensures the Temporal namespace exists before workers start.
3
+ * This is idempotent - safe to call multiple times.
4
+ *
5
+ * @module ensure-namespace
6
+ */
7
+ /**
8
+ * Ensures the specified namespace exists on the Temporal server.
9
+ * Creates it if it doesn't exist. This operation is idempotent.
10
+ *
11
+ * @param address - Temporal server address
12
+ * @param namespace - Namespace name to ensure exists
13
+ * @param retentionDays - Workflow history retention period (default: 90 days for production)
14
+ */
15
+ export declare function ensureNamespaceExists(address: string, namespace: string, retentionDays?: number): Promise<void>;
16
+ //# sourceMappingURL=ensure-namespace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure-namespace.d.ts","sourceRoot":"","sources":["../../../../src/internal/async/utils/ensure-namespace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,aAAa,GAAE,MAAW,GACzB,OAAO,CAAC,IAAI,CAAC,CAqCf"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ /**
3
+ * Ensures the Temporal namespace exists before workers start.
4
+ * This is idempotent - safe to call multiple times.
5
+ *
6
+ * @module ensure-namespace
7
+ */
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ensureNamespaceExists = ensureNamespaceExists;
13
+ const client_1 = require("@temporalio/client");
14
+ const long_1 = __importDefault(require("long"));
15
+ /**
16
+ * Ensures the specified namespace exists on the Temporal server.
17
+ * Creates it if it doesn't exist. This operation is idempotent.
18
+ *
19
+ * @param address - Temporal server address
20
+ * @param namespace - Namespace name to ensure exists
21
+ * @param retentionDays - Workflow history retention period (default: 90 days for production)
22
+ */
23
+ async function ensureNamespaceExists(address, namespace, retentionDays = 90) {
24
+ const connection = await client_1.Connection.connect({ address });
25
+ try {
26
+ // Check if namespace exists by trying to describe it
27
+ await connection.workflowService.describeNamespace({ namespace });
28
+ console.log(`Namespace "${namespace}" already exists`);
29
+ }
30
+ catch (error) {
31
+ const grpcError = error;
32
+ // gRPC NOT_FOUND code = 5
33
+ if (grpcError.code === 5) {
34
+ console.log(`Creating namespace "${namespace}"...`);
35
+ const retentionSeconds = retentionDays * 24 * 60 * 60;
36
+ try {
37
+ await connection.workflowService.registerNamespace({
38
+ namespace,
39
+ workflowExecutionRetentionPeriod: {
40
+ seconds: long_1.default.fromNumber(retentionSeconds),
41
+ },
42
+ });
43
+ console.log(`Namespace "${namespace}" created successfully`);
44
+ }
45
+ catch (registerError) {
46
+ const registerGrpcError = registerError;
47
+ // gRPC ALREADY_EXISTS code = 6 - another process won the race, namespace exists now
48
+ if (registerGrpcError.code === 6) {
49
+ console.log(`Namespace "${namespace}" was created by another process`);
50
+ }
51
+ else {
52
+ throw registerError;
53
+ }
54
+ }
55
+ }
56
+ else {
57
+ throw error;
58
+ }
59
+ }
60
+ finally {
61
+ await connection.close();
62
+ }
63
+ }
64
+ //# sourceMappingURL=ensure-namespace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure-namespace.js","sourceRoot":"","sources":["../../../../src/internal/async/utils/ensure-namespace.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;AAaH,sDAyCC;AApDD,+CAAgD;AAChD,gDAAwB;AAExB;;;;;;;GAOG;AACI,KAAK,UAAU,qBAAqB,CACzC,OAAe,EACf,SAAiB,EACjB,gBAAwB,EAAE;IAE1B,MAAM,UAAU,GAAG,MAAM,mBAAU,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAEzD,IAAI,CAAC;QACH,qDAAqD;QACrD,MAAM,UAAU,CAAC,eAAe,CAAC,iBAAiB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,cAAc,SAAS,kBAAkB,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,KAA4C,CAAC;QAE/D,0BAA0B;QAC1B,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,uBAAuB,SAAS,MAAM,CAAC,CAAC;YACpD,MAAM,gBAAgB,GAAG,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YACtD,IAAI,CAAC;gBACH,MAAM,UAAU,CAAC,eAAe,CAAC,iBAAiB,CAAC;oBACjD,SAAS;oBACT,gCAAgC,EAAE;wBAChC,OAAO,EAAE,cAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;qBAC3C;iBACF,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,cAAc,SAAS,wBAAwB,CAAC,CAAC;YAC/D,CAAC;YAAC,OAAO,aAAsB,EAAE,CAAC;gBAChC,MAAM,iBAAiB,GAAG,aAAkC,CAAC;gBAC7D,oFAAoF;gBACpF,IAAI,iBAAiB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBACjC,OAAO,CAAC,GAAG,CAAC,cAAc,SAAS,kCAAkC,CAAC,CAAC;gBACzE,CAAC;qBAAM,CAAC;oBACN,MAAM,aAAa,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Find the package root by searching upward for package.json.
3
+ *
4
+ * @param startDir - Directory to start searching from (typically __dirname)
5
+ * @returns Absolute path to the package root directory
6
+ * @throws Error if package.json cannot be found
7
+ */
8
+ export declare function findPackageRoot(startDir: string): string;
9
+ //# sourceMappingURL=find-package-root.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-package-root.d.ts","sourceRoot":"","sources":["../../../../src/internal/async/utils/find-package-root.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiBxD"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findPackageRoot = findPackageRoot;
4
+ const node_fs_1 = require("node:fs");
5
+ const node_path_1 = require("node:path");
6
+ /**
7
+ * Find the package root by searching upward for package.json.
8
+ *
9
+ * @param startDir - Directory to start searching from (typically __dirname)
10
+ * @returns Absolute path to the package root directory
11
+ * @throws Error if package.json cannot be found
12
+ */
13
+ function findPackageRoot(startDir) {
14
+ let currentDir = (0, node_path_1.resolve)(startDir);
15
+ while (true) {
16
+ const packageJsonPath = (0, node_path_1.join)(currentDir, "package.json");
17
+ if ((0, node_fs_1.existsSync)(packageJsonPath)) {
18
+ return currentDir;
19
+ }
20
+ const parentDir = (0, node_path_1.resolve)(currentDir, "..");
21
+ if (parentDir === currentDir) {
22
+ break;
23
+ }
24
+ currentDir = parentDir;
25
+ }
26
+ throw new Error(`Could not find package.json searching up from ${startDir}`);
27
+ }
28
+ //# sourceMappingURL=find-package-root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-package-root.js","sourceRoot":"","sources":["../../../../src/internal/async/utils/find-package-root.ts"],"names":[],"mappings":";;AAUA,0CAiBC;AA3BD,qCAAqC;AACrC,yCAA0C;AAE1C;;;;;;GAMG;AACH,SAAgB,eAAe,CAAC,QAAgB;IAC9C,IAAI,UAAU,GAAG,IAAA,mBAAO,EAAC,QAAQ,CAAC,CAAC;IAEnC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,eAAe,GAAG,IAAA,gBAAI,EAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QACzD,IAAI,IAAA,oBAAU,EAAC,eAAe,CAAC,EAAE,CAAC;YAChC,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,MAAM,SAAS,GAAG,IAAA,mBAAO,EAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC5C,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7B,MAAM;QACR,CAAC;QACD,UAAU,GAAG,SAAS,CAAC;IACzB,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,iDAAiD,QAAQ,EAAE,CAAC,CAAC;AAC/E,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Duck-type check for structured errors with a code and parent code chain.
3
+ *
4
+ * Used to detect errors carrying a stable string code (from any error factory
5
+ * that follows the {code, parentCodes} convention) so they can be converted to
6
+ * a Temporal ApplicationFailure with the code preserved across the activity
7
+ * boundary, where instanceof would not work.
8
+ */
9
+ export interface ComposerErrorInstance extends Error {
10
+ readonly code: string;
11
+ readonly parentCodes: readonly string[];
12
+ }
13
+ export declare function isComposerError(error: unknown): error is ComposerErrorInstance;
14
+ //# sourceMappingURL=is-composer-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-composer-error.d.ts","sourceRoot":"","sources":["../../../../src/internal/async/utils/is-composer-error.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,qBAAsB,SAAQ,KAAK;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,qBAAqB,CAM9E"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ /**
3
+ * Duck-type check for structured errors with a code and parent code chain.
4
+ *
5
+ * Used to detect errors carrying a stable string code (from any error factory
6
+ * that follows the {code, parentCodes} convention) so they can be converted to
7
+ * a Temporal ApplicationFailure with the code preserved across the activity
8
+ * boundary, where instanceof would not work.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.isComposerError = isComposerError;
12
+ function isComposerError(error) {
13
+ return (error instanceof Error &&
14
+ typeof error.code === "string" &&
15
+ Array.isArray(error.parentCodes));
16
+ }
17
+ //# sourceMappingURL=is-composer-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-composer-error.js","sourceRoot":"","sources":["../../../../src/internal/async/utils/is-composer-error.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAOH,0CAMC;AAND,SAAgB,eAAe,CAAC,KAAc;IAC5C,OAAO,CACL,KAAK,YAAY,KAAK;QACtB,OAAQ,KAA4B,CAAC,IAAI,KAAK,QAAQ;QACtD,KAAK,CAAC,OAAO,CAAE,KAAmC,CAAC,WAAW,CAAC,CAChE,CAAC;AACJ,CAAC"}