@optimizely/ocp-local-env 1.0.0-beta.10

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 (244) hide show
  1. package/README.md +51 -0
  2. package/dist/package.json +112 -0
  3. package/dist/public/bundle.82dc5d29fffb9f205051.js +3 -0
  4. package/dist/public/bundle.82dc5d29fffb9f205051.js.LICENSE.txt +92 -0
  5. package/dist/public/bundle.82dc5d29fffb9f205051.js.map +1 -0
  6. package/dist/public/index.html +1 -0
  7. package/dist/src/cli.d.ts +2 -0
  8. package/dist/src/cli.js +115 -0
  9. package/dist/src/cli.js.map +1 -0
  10. package/dist/src/executor/DestinationExecutor.d.ts +19 -0
  11. package/dist/src/executor/DestinationExecutor.js +72 -0
  12. package/dist/src/executor/DestinationExecutor.js.map +1 -0
  13. package/dist/src/executor/FunctionExecutor.d.ts +67 -0
  14. package/dist/src/executor/FunctionExecutor.js +189 -0
  15. package/dist/src/executor/FunctionExecutor.js.map +1 -0
  16. package/dist/src/executor/JobExecutor.d.ts +79 -0
  17. package/dist/src/executor/JobExecutor.js +215 -0
  18. package/dist/src/executor/JobExecutor.js.map +1 -0
  19. package/dist/src/executor/LifecycleExecutor.d.ts +64 -0
  20. package/dist/src/executor/LifecycleExecutor.js +167 -0
  21. package/dist/src/executor/LifecycleExecutor.js.map +1 -0
  22. package/dist/src/executor/SourceExecutor.d.ts +32 -0
  23. package/dist/src/executor/SourceExecutor.js +163 -0
  24. package/dist/src/executor/SourceExecutor.js.map +1 -0
  25. package/dist/src/executor/watcher.d.ts +62 -0
  26. package/dist/src/executor/watcher.js +213 -0
  27. package/dist/src/executor/watcher.js.map +1 -0
  28. package/dist/src/functions/hello.d.ts +4 -0
  29. package/dist/src/functions/hello.js +8 -0
  30. package/dist/src/functions/hello.js.map +1 -0
  31. package/dist/src/index.d.ts +1 -0
  32. package/dist/src/index.js +9 -0
  33. package/dist/src/index.js.map +1 -0
  34. package/dist/src/jobs/dailyJob.d.ts +4 -0
  35. package/dist/src/jobs/dailyJob.js +8 -0
  36. package/dist/src/jobs/dailyJob.js.map +1 -0
  37. package/dist/src/local_engine/LocalFunctionApi.d.ts +17 -0
  38. package/dist/src/local_engine/LocalFunctionApi.js +54 -0
  39. package/dist/src/local_engine/LocalFunctionApi.js.map +1 -0
  40. package/dist/src/local_engine/LocalJobApi.d.ts +67 -0
  41. package/dist/src/local_engine/LocalJobApi.js +205 -0
  42. package/dist/src/local_engine/LocalJobApi.js.map +1 -0
  43. package/dist/src/local_engine/LocalNotifier.d.ts +9 -0
  44. package/dist/src/local_engine/LocalNotifier.js +26 -0
  45. package/dist/src/local_engine/LocalNotifier.js.map +1 -0
  46. package/dist/src/local_engine/local-engine-child-base.d.ts +110 -0
  47. package/dist/src/local_engine/local-engine-child-base.js +607 -0
  48. package/dist/src/local_engine/local-engine-child-base.js.map +1 -0
  49. package/dist/src/local_engine/local-engine-client.d.ts +161 -0
  50. package/dist/src/local_engine/local-engine-client.js +888 -0
  51. package/dist/src/local_engine/local-engine-client.js.map +1 -0
  52. package/dist/src/local_engine/local-engine-types.d.ts +245 -0
  53. package/dist/src/local_engine/local-engine-types.js +6 -0
  54. package/dist/src/local_engine/local-engine-types.js.map +1 -0
  55. package/dist/src/local_engine/local-engine-unified.d.ts +71 -0
  56. package/dist/src/local_engine/local-engine-unified.js +723 -0
  57. package/dist/src/local_engine/local-engine-unified.js.map +1 -0
  58. package/dist/src/local_engine/local-engine-utils.d.ts +68 -0
  59. package/dist/src/local_engine/local-engine-utils.js +219 -0
  60. package/dist/src/local_engine/local-engine-utils.js.map +1 -0
  61. package/dist/src/local_engine/localSDKConfig.d.ts +40 -0
  62. package/dist/src/local_engine/localSDKConfig.js +247 -0
  63. package/dist/src/local_engine/localSDKConfig.js.map +1 -0
  64. package/dist/src/local_engine/storage/BaseKVStoreWrapper.d.ts +37 -0
  65. package/dist/src/local_engine/storage/BaseKVStoreWrapper.js +110 -0
  66. package/dist/src/local_engine/storage/BaseKVStoreWrapper.js.map +1 -0
  67. package/dist/src/local_engine/storage/LocalConfigStore.d.ts +74 -0
  68. package/dist/src/local_engine/storage/LocalConfigStore.js +178 -0
  69. package/dist/src/local_engine/storage/LocalConfigStore.js.map +1 -0
  70. package/dist/src/local_engine/storage/LocalJobStore.d.ts +111 -0
  71. package/dist/src/local_engine/storage/LocalJobStore.js +249 -0
  72. package/dist/src/local_engine/storage/LocalJobStore.js.map +1 -0
  73. package/dist/src/local_engine/storage/LocalKVStore.d.ts +106 -0
  74. package/dist/src/local_engine/storage/LocalKVStore.js +1061 -0
  75. package/dist/src/local_engine/storage/LocalKVStore.js.map +1 -0
  76. package/dist/src/local_engine/storage/LocalNotificationStore.d.ts +28 -0
  77. package/dist/src/local_engine/storage/LocalNotificationStore.js +149 -0
  78. package/dist/src/local_engine/storage/LocalNotificationStore.js.map +1 -0
  79. package/dist/src/local_engine/storage/LocalSecretsStore.d.ts +115 -0
  80. package/dist/src/local_engine/storage/LocalSecretsStore.js +350 -0
  81. package/dist/src/local_engine/storage/LocalSecretsStore.js.map +1 -0
  82. package/dist/src/local_engine/storage/LocalSecretsStoreWrapper.d.ts +19 -0
  83. package/dist/src/local_engine/storage/LocalSecretsStoreWrapper.js +52 -0
  84. package/dist/src/local_engine/storage/LocalSecretsStoreWrapper.js.map +1 -0
  85. package/dist/src/local_engine/storage/LocalSettingsStore.d.ts +168 -0
  86. package/dist/src/local_engine/storage/LocalSettingsStore.js +509 -0
  87. package/dist/src/local_engine/storage/LocalSettingsStore.js.map +1 -0
  88. package/dist/src/local_engine/storage/LocalSettingsStoreWrapper.d.ts +15 -0
  89. package/dist/src/local_engine/storage/LocalSettingsStoreWrapper.js +28 -0
  90. package/dist/src/local_engine/storage/LocalSettingsStoreWrapper.js.map +1 -0
  91. package/dist/src/local_engine/storage/NumberSet.d.ts +21 -0
  92. package/dist/src/local_engine/storage/NumberSet.js +32 -0
  93. package/dist/src/local_engine/storage/NumberSet.js.map +1 -0
  94. package/dist/src/local_engine/storage/SourceDataStore.d.ts +23 -0
  95. package/dist/src/local_engine/storage/SourceDataStore.js +83 -0
  96. package/dist/src/local_engine/storage/SourceDataStore.js.map +1 -0
  97. package/dist/src/local_engine/storage/SourceJobExecutionStore.d.ts +25 -0
  98. package/dist/src/local_engine/storage/SourceJobExecutionStore.js +61 -0
  99. package/dist/src/local_engine/storage/SourceJobExecutionStore.js.map +1 -0
  100. package/dist/src/local_engine/storage/StringSet.d.ts +21 -0
  101. package/dist/src/local_engine/storage/StringSet.js +32 -0
  102. package/dist/src/local_engine/storage/StringSet.js.map +1 -0
  103. package/dist/src/local_engine/types.d.ts +53 -0
  104. package/dist/src/local_engine/types.js +6 -0
  105. package/dist/src/local_engine/types.js.map +1 -0
  106. package/dist/src/local_engine/utils.d.ts +33 -0
  107. package/dist/src/local_engine/utils.js +143 -0
  108. package/dist/src/local_engine/utils.js.map +1 -0
  109. package/dist/src/logging/LogManager.d.ts +246 -0
  110. package/dist/src/logging/LogManager.js +343 -0
  111. package/dist/src/logging/LogManager.js.map +1 -0
  112. package/dist/src/server/api/destinations.d.ts +7 -0
  113. package/dist/src/server/api/destinations.js +170 -0
  114. package/dist/src/server/api/destinations.js.map +1 -0
  115. package/dist/src/server/api/functions.d.ts +7 -0
  116. package/dist/src/server/api/functions.js +80 -0
  117. package/dist/src/server/api/functions.js.map +1 -0
  118. package/dist/src/server/api/jobs.d.ts +10 -0
  119. package/dist/src/server/api/jobs.js +244 -0
  120. package/dist/src/server/api/jobs.js.map +1 -0
  121. package/dist/src/server/api/settings.d.ts +6 -0
  122. package/dist/src/server/api/settings.js +116 -0
  123. package/dist/src/server/api/settings.js.map +1 -0
  124. package/dist/src/server/api/sources.d.ts +7 -0
  125. package/dist/src/server/api/sources.js +382 -0
  126. package/dist/src/server/api/sources.js.map +1 -0
  127. package/dist/src/server/api/stores.d.ts +2 -0
  128. package/dist/src/server/api/stores.js +341 -0
  129. package/dist/src/server/api/stores.js.map +1 -0
  130. package/dist/src/server/api/v1.d.ts +10 -0
  131. package/dist/src/server/api/v1.js +718 -0
  132. package/dist/src/server/api/v1.js.map +1 -0
  133. package/dist/src/server/api.d.ts +8 -0
  134. package/dist/src/server/api.js +217 -0
  135. package/dist/src/server/api.js.map +1 -0
  136. package/dist/src/server/app-discovery.d.ts +5 -0
  137. package/dist/src/server/app-discovery.js +113 -0
  138. package/dist/src/server/app-discovery.js.map +1 -0
  139. package/dist/src/server/config.d.ts +26 -0
  140. package/dist/src/server/config.js +112 -0
  141. package/dist/src/server/config.js.map +1 -0
  142. package/dist/src/server/mockDataGenerator.d.ts +1 -0
  143. package/dist/src/server/mockDataGenerator.js +154 -0
  144. package/dist/src/server/mockDataGenerator.js.map +1 -0
  145. package/dist/src/server/websocket.d.ts +0 -0
  146. package/dist/src/server/websocket.js +2 -0
  147. package/dist/src/server/websocket.js.map +1 -0
  148. package/dist/src/server.d.ts +2 -0
  149. package/dist/src/server.js +735 -0
  150. package/dist/src/server.js.map +1 -0
  151. package/dist/src/types/app.d.ts +154 -0
  152. package/dist/src/types/app.js +24 -0
  153. package/dist/src/types/app.js.map +1 -0
  154. package/dist/src/types/kvstore.d.ts +320 -0
  155. package/dist/src/types/kvstore.js +5 -0
  156. package/dist/src/types/kvstore.js.map +1 -0
  157. package/dist/src/ui/components/App.d.ts +6 -0
  158. package/dist/src/ui/components/App.js +432 -0
  159. package/dist/src/ui/components/App.js.map +1 -0
  160. package/dist/src/ui/components/DestinationBatchEditor.d.ts +7 -0
  161. package/dist/src/ui/components/DestinationBatchEditor.js +160 -0
  162. package/dist/src/ui/components/DestinationBatchEditor.js.map +1 -0
  163. package/dist/src/ui/components/DestinationSchemaViewer.d.ts +7 -0
  164. package/dist/src/ui/components/DestinationSchemaViewer.js +61 -0
  165. package/dist/src/ui/components/DestinationSchemaViewer.js.map +1 -0
  166. package/dist/src/ui/components/DestinationsView.d.ts +14 -0
  167. package/dist/src/ui/components/DestinationsView.js +68 -0
  168. package/dist/src/ui/components/DestinationsView.js.map +1 -0
  169. package/dist/src/ui/components/FunctionsView.d.ts +13 -0
  170. package/dist/src/ui/components/FunctionsView.js +288 -0
  171. package/dist/src/ui/components/FunctionsView.js.map +1 -0
  172. package/dist/src/ui/components/JobsView.d.ts +13 -0
  173. package/dist/src/ui/components/JobsView.js +320 -0
  174. package/dist/src/ui/components/JobsView.js.map +1 -0
  175. package/dist/src/ui/components/KVStoreViewer.d.ts +11 -0
  176. package/dist/src/ui/components/KVStoreViewer.js +168 -0
  177. package/dist/src/ui/components/KVStoreViewer.js.map +1 -0
  178. package/dist/src/ui/components/MetadataModal.d.ts +14 -0
  179. package/dist/src/ui/components/MetadataModal.js +28 -0
  180. package/dist/src/ui/components/MetadataModal.js.map +1 -0
  181. package/dist/src/ui/components/MetadataModal.test.d.ts +1 -0
  182. package/dist/src/ui/components/MetadataModal.test.js +143 -0
  183. package/dist/src/ui/components/MetadataModal.test.js.map +1 -0
  184. package/dist/src/ui/components/NotificationViewer.d.ts +16 -0
  185. package/dist/src/ui/components/NotificationViewer.js +69 -0
  186. package/dist/src/ui/components/NotificationViewer.js.map +1 -0
  187. package/dist/src/ui/components/SecretsStoreViewer.d.ts +11 -0
  188. package/dist/src/ui/components/SecretsStoreViewer.js +179 -0
  189. package/dist/src/ui/components/SecretsStoreViewer.js.map +1 -0
  190. package/dist/src/ui/components/SettingsStoreViewer.d.ts +24 -0
  191. package/dist/src/ui/components/SettingsStoreViewer.js +132 -0
  192. package/dist/src/ui/components/SettingsStoreViewer.js.map +1 -0
  193. package/dist/src/ui/components/SourceDataViewer.d.ts +8 -0
  194. package/dist/src/ui/components/SourceDataViewer.js +84 -0
  195. package/dist/src/ui/components/SourceDataViewer.js.map +1 -0
  196. package/dist/src/ui/components/SourceJobsSection.d.ts +8 -0
  197. package/dist/src/ui/components/SourceJobsSection.js +99 -0
  198. package/dist/src/ui/components/SourceJobsSection.js.map +1 -0
  199. package/dist/src/ui/components/SourceLifecycleSection.d.ts +7 -0
  200. package/dist/src/ui/components/SourceLifecycleSection.js +58 -0
  201. package/dist/src/ui/components/SourceLifecycleSection.js.map +1 -0
  202. package/dist/src/ui/components/SourceSchemaViewer.d.ts +7 -0
  203. package/dist/src/ui/components/SourceSchemaViewer.js +65 -0
  204. package/dist/src/ui/components/SourceSchemaViewer.js.map +1 -0
  205. package/dist/src/ui/components/SourceWebhookEditor.d.ts +8 -0
  206. package/dist/src/ui/components/SourceWebhookEditor.js +181 -0
  207. package/dist/src/ui/components/SourceWebhookEditor.js.map +1 -0
  208. package/dist/src/ui/components/SourcesView.d.ts +14 -0
  209. package/dist/src/ui/components/SourcesView.js +74 -0
  210. package/dist/src/ui/components/SourcesView.js.map +1 -0
  211. package/dist/src/ui/components/StoreViewer.d.ts +16 -0
  212. package/dist/src/ui/components/StoreViewer.js +86 -0
  213. package/dist/src/ui/components/StoreViewer.js.map +1 -0
  214. package/dist/src/ui/components/TabbedConsole.d.ts +17 -0
  215. package/dist/src/ui/components/TabbedConsole.js +163 -0
  216. package/dist/src/ui/components/TabbedConsole.js.map +1 -0
  217. package/dist/src/ui/components/common/DataTree.d.ts +15 -0
  218. package/dist/src/ui/components/common/DataTree.js +95 -0
  219. package/dist/src/ui/components/common/DataTree.js.map +1 -0
  220. package/dist/src/ui/components/common/EyeIcon.d.ts +11 -0
  221. package/dist/src/ui/components/common/EyeIcon.js +11 -0
  222. package/dist/src/ui/components/common/EyeIcon.js.map +1 -0
  223. package/dist/src/ui/hooks/useEntityNavigation.d.ts +72 -0
  224. package/dist/src/ui/hooks/useEntityNavigation.js +150 -0
  225. package/dist/src/ui/hooks/useEntityNavigation.js.map +1 -0
  226. package/dist/src/ui/hooks/useQueryParams.d.ts +6 -0
  227. package/dist/src/ui/hooks/useQueryParams.js +39 -0
  228. package/dist/src/ui/hooks/useQueryParams.js.map +1 -0
  229. package/dist/src/ui/index.d.ts +1 -0
  230. package/dist/src/ui/index.js +23 -0
  231. package/dist/src/ui/index.js.map +1 -0
  232. package/dist/src/ui/store/formStateSlice.d.ts +54 -0
  233. package/dist/src/ui/store/formStateSlice.js +94 -0
  234. package/dist/src/ui/store/formStateSlice.js.map +1 -0
  235. package/dist/src/ui/store/hooks.d.ts +6 -0
  236. package/dist/src/ui/store/hooks.js +8 -0
  237. package/dist/src/ui/store/hooks.js.map +1 -0
  238. package/dist/src/ui/store/index.d.ts +11 -0
  239. package/dist/src/ui/store/index.js +107 -0
  240. package/dist/src/ui/store/index.js.map +1 -0
  241. package/dist/src/utils/functionEndpoints.d.ts +24 -0
  242. package/dist/src/utils/functionEndpoints.js +45 -0
  243. package/dist/src/utils/functionEndpoints.js.map +1 -0
  244. package/package.json +112 -0
@@ -0,0 +1,249 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LocalJobStore = exports.JobExecutionStatus = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const crypto_1 = require("crypto");
10
+ const LogManager_1 = require("../../logging/LogManager");
11
+ /**
12
+ * Job execution status enum
13
+ */
14
+ var JobExecutionStatus;
15
+ (function (JobExecutionStatus) {
16
+ JobExecutionStatus["PENDING"] = "pending";
17
+ JobExecutionStatus["RUNNING"] = "running";
18
+ JobExecutionStatus["COMPLETED"] = "completed";
19
+ JobExecutionStatus["FAILED"] = "failed";
20
+ JobExecutionStatus["INTERRUPTED"] = "interrupted";
21
+ })(JobExecutionStatus || (exports.JobExecutionStatus = JobExecutionStatus = {}));
22
+ /**
23
+ * Local storage for job executions and state history
24
+ */
25
+ class LocalJobStore {
26
+ constructor(appDir) {
27
+ this.appDir = appDir;
28
+ this.logManager = LogManager_1.LogManager.getInstance();
29
+ this.jobsDir = path_1.default.join(appDir, '.ocp-local', 'jobs');
30
+ this.executionsDir = path_1.default.join(this.jobsDir, 'executions');
31
+ this.statesDir = path_1.default.join(this.jobsDir, 'states');
32
+ this.ensureDirectories();
33
+ }
34
+ /**
35
+ * Get singleton instance for the given app directory
36
+ */
37
+ static getInstance(appDir) {
38
+ if (!this.instances.has(appDir)) {
39
+ this.instances.set(appDir, new LocalJobStore(appDir));
40
+ }
41
+ return this.instances.get(appDir);
42
+ }
43
+ /**
44
+ * Ensure required directories exist
45
+ */
46
+ ensureDirectories() {
47
+ [this.jobsDir, this.executionsDir, this.statesDir].forEach(dir => {
48
+ if (!fs_1.default.existsSync(dir)) {
49
+ fs_1.default.mkdirSync(dir, { recursive: true });
50
+ }
51
+ });
52
+ }
53
+ /**
54
+ * Create a new job execution record
55
+ */
56
+ createExecution(jobId, parameters = {}) {
57
+ const execution = {
58
+ id: (0, crypto_1.randomUUID)(),
59
+ jobId,
60
+ status: JobExecutionStatus.PENDING,
61
+ startedAt: new Date(),
62
+ parameters,
63
+ stateCount: 0
64
+ };
65
+ this.saveExecution(execution);
66
+ return execution;
67
+ }
68
+ /**
69
+ * Update job execution status
70
+ */
71
+ updateExecutionStatus(executionId, status, error) {
72
+ const execution = this.getExecution(executionId);
73
+ if (!execution) {
74
+ throw new Error(`Execution not found: ${executionId}`);
75
+ }
76
+ execution.status = status;
77
+ if (error) {
78
+ execution.error = error;
79
+ }
80
+ if (status === JobExecutionStatus.COMPLETED || status === JobExecutionStatus.FAILED || status === JobExecutionStatus.INTERRUPTED) {
81
+ execution.completedAt = new Date();
82
+ execution.executionTime = execution.completedAt.getTime() - execution.startedAt.getTime();
83
+ }
84
+ this.saveExecution(execution);
85
+ }
86
+ /**
87
+ * Save job state snapshot
88
+ */
89
+ saveState(executionId, state, complete, stateHash, phase) {
90
+ const snapshot = {
91
+ id: (0, crypto_1.randomUUID)(),
92
+ executionId,
93
+ timestamp: new Date(),
94
+ state,
95
+ complete,
96
+ stateHash,
97
+ phase
98
+ };
99
+ // Create execution state directory if it doesn't exist
100
+ const executionStatesDir = path_1.default.join(this.statesDir, executionId);
101
+ if (!fs_1.default.existsSync(executionStatesDir)) {
102
+ fs_1.default.mkdirSync(executionStatesDir, { recursive: true });
103
+ }
104
+ // Save state snapshot
105
+ const stateFile = path_1.default.join(executionStatesDir, `state-${snapshot.timestamp.getTime()}.json`);
106
+ fs_1.default.writeFileSync(stateFile, JSON.stringify(snapshot, null, 2));
107
+ // Update state count in execution
108
+ const execution = this.getExecution(executionId);
109
+ if (execution) {
110
+ execution.stateCount++;
111
+ this.saveExecution(execution);
112
+ }
113
+ return snapshot;
114
+ }
115
+ /**
116
+ * Get job execution by ID
117
+ */
118
+ getExecution(executionId) {
119
+ const executionFile = path_1.default.join(this.executionsDir, `${executionId}.json`);
120
+ if (!fs_1.default.existsSync(executionFile)) {
121
+ return null;
122
+ }
123
+ try {
124
+ const data = JSON.parse(fs_1.default.readFileSync(executionFile, 'utf8'));
125
+ // Convert date strings back to Date objects
126
+ data.startedAt = new Date(data.startedAt);
127
+ if (data.completedAt) {
128
+ data.completedAt = new Date(data.completedAt);
129
+ }
130
+ return data;
131
+ }
132
+ catch (error) {
133
+ this.logManager.error(LogManager_1.LogSource.App, LogManager_1.LogCategory.Jobs, `Error reading execution file ${executionFile}`, {
134
+ id: executionId,
135
+ operation: 'list',
136
+ error
137
+ });
138
+ return null;
139
+ }
140
+ }
141
+ /**
142
+ * Get all executions, optionally filtered by job ID
143
+ */
144
+ getExecutions(jobId) {
145
+ if (!fs_1.default.existsSync(this.executionsDir)) {
146
+ return [];
147
+ }
148
+ const executions = [];
149
+ const files = fs_1.default.readdirSync(this.executionsDir);
150
+ for (const file of files) {
151
+ if (file.endsWith('.json')) {
152
+ const executionId = file.replace('.json', '');
153
+ const execution = this.getExecution(executionId);
154
+ if (execution && (!jobId || execution.jobId === jobId)) {
155
+ executions.push(execution);
156
+ }
157
+ }
158
+ }
159
+ // Sort by start time (newest first)
160
+ return executions.sort((a, b) => b.startedAt.getTime() - a.startedAt.getTime());
161
+ }
162
+ /**
163
+ * Get state snapshots for an execution
164
+ */
165
+ getExecutionStates(executionId) {
166
+ const executionStatesDir = path_1.default.join(this.statesDir, executionId);
167
+ if (!fs_1.default.existsSync(executionStatesDir)) {
168
+ return [];
169
+ }
170
+ const states = [];
171
+ const files = fs_1.default.readdirSync(executionStatesDir);
172
+ for (const file of files) {
173
+ if (file.endsWith('.json')) {
174
+ try {
175
+ const stateFile = path_1.default.join(executionStatesDir, file);
176
+ const data = JSON.parse(fs_1.default.readFileSync(stateFile, 'utf8'));
177
+ data.timestamp = new Date(data.timestamp);
178
+ states.push(data);
179
+ }
180
+ catch (error) {
181
+ this.logManager.error(LogManager_1.LogSource.App, LogManager_1.LogCategory.Jobs, `Error reading state file ${file}`, {
182
+ id: 'unknown',
183
+ operation: 'list',
184
+ error
185
+ });
186
+ }
187
+ }
188
+ }
189
+ // Sort by timestamp (oldest first)
190
+ return states.sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
191
+ }
192
+ /**
193
+ * Get latest state for an execution
194
+ */
195
+ getLatestState(executionId) {
196
+ const states = this.getExecutionStates(executionId);
197
+ return states.length > 0 ? states[states.length - 1] : null;
198
+ }
199
+ /**
200
+ * Save execution to disk
201
+ */
202
+ saveExecution(execution) {
203
+ const executionFile = path_1.default.join(this.executionsDir, `${execution.id}.json`);
204
+ fs_1.default.writeFileSync(executionFile, JSON.stringify(execution, null, 2));
205
+ }
206
+ /**
207
+ * Clean up old executions (7 days retention)
208
+ */
209
+ cleanup() {
210
+ const retentionMs = 7 * 24 * 60 * 60 * 1000; // 7 days
211
+ const cutoff = new Date(Date.now() - retentionMs);
212
+ const executions = this.getExecutions();
213
+ for (const execution of executions) {
214
+ if (execution.startedAt < cutoff) {
215
+ this.deleteExecution(execution.id);
216
+ }
217
+ }
218
+ }
219
+ /**
220
+ * Delete execution and its states
221
+ */
222
+ deleteExecution(executionId) {
223
+ // Delete execution file
224
+ const executionFile = path_1.default.join(this.executionsDir, `${executionId}.json`);
225
+ if (fs_1.default.existsSync(executionFile)) {
226
+ fs_1.default.unlinkSync(executionFile);
227
+ }
228
+ // Delete state directory
229
+ const executionStatesDir = path_1.default.join(this.statesDir, executionId);
230
+ if (fs_1.default.existsSync(executionStatesDir)) {
231
+ fs_1.default.rmSync(executionStatesDir, { recursive: true, force: true });
232
+ }
233
+ }
234
+ /**
235
+ * Get summary statistics
236
+ */
237
+ getStats() {
238
+ const executions = this.getExecutions();
239
+ return {
240
+ totalExecutions: executions.length,
241
+ runningExecutions: executions.filter(e => e.status === JobExecutionStatus.RUNNING).length,
242
+ completedExecutions: executions.filter(e => e.status === JobExecutionStatus.COMPLETED).length,
243
+ failedExecutions: executions.filter(e => e.status === JobExecutionStatus.FAILED).length
244
+ };
245
+ }
246
+ }
247
+ exports.LocalJobStore = LocalJobStore;
248
+ LocalJobStore.instances = new Map();
249
+ //# sourceMappingURL=LocalJobStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalJobStore.js","sourceRoot":"","sources":["../../../../src/local_engine/storage/LocalJobStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ import { KVStore, KVHash, KVRowOptions, KVPatchUpdater, MultiValue, Value } from '../../types/kvstore';
2
+ import { NumberSet } from './NumberSet';
3
+ import { StringSet } from './StringSet';
4
+ /**
5
+ * Local implementation of KVStore that persists data to disk
6
+ * Follows the pattern of LocalSettingsStore with singleton per app directory
7
+ */
8
+ export declare class LocalKVStore implements KVStore {
9
+ private static instances;
10
+ private logManager;
11
+ private kvStorePath;
12
+ private configDirPath;
13
+ private appRootDir;
14
+ private storeFileName;
15
+ private constructor();
16
+ /**
17
+ * Get or create a singleton instance for the given app directory
18
+ */
19
+ static getInstance(appRootDir: string, storeFileName?: string): LocalKVStore;
20
+ /**
21
+ * Clear singleton instance for testing
22
+ */
23
+ static clearInstance(appRootDir: string, storeFileName?: string): void;
24
+ /**
25
+ * Clear all singleton instances for testing
26
+ */
27
+ static clearAllInstances(): void;
28
+ /**
29
+ * Ensure store file exists with empty structure
30
+ */
31
+ private ensureStoreFileExists;
32
+ /**
33
+ * Load data from disk and clean up expired entries
34
+ */
35
+ private loadDataFromDisk;
36
+ /**
37
+ * Save data to disk atomically
38
+ */
39
+ private saveDataToDisk;
40
+ /**
41
+ * Deserialize data with custom handling for NumberSet and StringSet
42
+ */
43
+ private deserializeValue;
44
+ /**
45
+ * Get stored item with deserialization
46
+ */
47
+ private getStoredItem;
48
+ /**
49
+ * Store item with optional TTL
50
+ */
51
+ private storeItem;
52
+ get<T extends KVHash>(key: string, fields?: string[]): Promise<T>;
53
+ put<T extends KVHash>(key: string, value: T, options?: KVRowOptions): Promise<T>;
54
+ patch<T extends KVHash>(key: string, value: T, options?: KVRowOptions): Promise<T>;
55
+ patch<T extends KVHash>(key: string, updater: KVPatchUpdater<T>, options?: KVRowOptions): Promise<T>;
56
+ delete<T extends KVHash>(key: string, fields?: string[]): Promise<T>;
57
+ exists(key: string): Promise<boolean>;
58
+ increment(key: string, field: string, amount?: number, options?: KVRowOptions): Promise<number>;
59
+ incrementMulti(key: string, fieldAmounts: MultiValue<number>, options?: KVRowOptions): Promise<MultiValue<number>>;
60
+ shift<T extends Value>(key: string, field: string): Promise<T | undefined>;
61
+ shiftMulti<T extends Value>(key: string, fieldCounts: MultiValue<number>): Promise<MultiValue<T[]>>;
62
+ unshift<T extends Value>(key: string, field: string, value: T): Promise<void>;
63
+ unshiftMulti<T extends Value>(key: string, fieldValues: MultiValue<T[]>): Promise<void>;
64
+ peek<T extends Value>(key: string, field: string): Promise<T | undefined>;
65
+ peekMulti<T extends Value>(key: string, fieldCounts: MultiValue<number>): Promise<MultiValue<T[]>>;
66
+ append<T extends Value>(key: string, field: string, value: T): Promise<void>;
67
+ appendMulti<T extends Value>(key: string, fieldValues: MultiValue<T[]>): Promise<void>;
68
+ addNumber(key: string, field: string, value: number): Promise<boolean>;
69
+ addNumberMulti(key: string, fieldValues: MultiValue<number[]>): Promise<MultiValue<NumberSet>>;
70
+ removeNumber(key: string, field: string, value: number): Promise<boolean>;
71
+ removeNumberMulti(key: string, fieldValues: MultiValue<number[]>): Promise<MultiValue<NumberSet>>;
72
+ hasNumber(key: string, field: string, value: number): Promise<boolean>;
73
+ hasNumberMulti(key: string, fieldValues: MultiValue<number[]>): Promise<MultiValue<NumberSet>>;
74
+ addString(key: string, field: string, value: string): Promise<boolean>;
75
+ addStringMulti(key: string, fieldValues: MultiValue<string[]>): Promise<MultiValue<StringSet>>;
76
+ removeString(key: string, field: string, value: string): Promise<boolean>;
77
+ removeStringMulti(key: string, fieldValues: MultiValue<string[]>): Promise<MultiValue<StringSet>>;
78
+ hasString(key: string, field: string, value: string): Promise<boolean>;
79
+ hasStringMulti(key: string, fieldValues: MultiValue<string[]>): Promise<MultiValue<StringSet>>;
80
+ /**
81
+ * Get all stored data as a simple key-value object for the UI
82
+ */
83
+ getAllData(): {
84
+ [key: string]: any;
85
+ };
86
+ /**
87
+ * Set a simple key-value pair (for UI convenience)
88
+ */
89
+ set(key: string, value: any): Promise<void>;
90
+ /**
91
+ * Get a simple value by key (for UI convenience)
92
+ */
93
+ getValue(key: string): Promise<any>;
94
+ /**
95
+ * Delete a key entirely (for UI convenience)
96
+ */
97
+ deleteKey(key: string): Promise<boolean>;
98
+ /**
99
+ * Get all keys
100
+ */
101
+ getAllKeys(): string[];
102
+ /**
103
+ * Get a shared instance for shared KV store (global across installations of the same app)
104
+ */
105
+ static getSharedInstance(appRootDir: string): LocalKVStore;
106
+ }