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

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 (160) hide show
  1. package/README.md +165 -0
  2. package/dist/package.json +104 -0
  3. package/dist/public/bundle.da978bb5437cd82e6d37.js +3 -0
  4. package/dist/public/bundle.da978bb5437cd82e6d37.js.LICENSE.txt +49 -0
  5. package/dist/public/bundle.da978bb5437cd82e6d37.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 +88 -0
  9. package/dist/src/cli.js.map +1 -0
  10. package/dist/src/executor/FunctionExecutor.d.ts +56 -0
  11. package/dist/src/executor/FunctionExecutor.js +175 -0
  12. package/dist/src/executor/FunctionExecutor.js.map +1 -0
  13. package/dist/src/executor/JobExecutor.d.ts +60 -0
  14. package/dist/src/executor/JobExecutor.js +203 -0
  15. package/dist/src/executor/JobExecutor.js.map +1 -0
  16. package/dist/src/executor/LifecycleExecutor.d.ts +45 -0
  17. package/dist/src/executor/LifecycleExecutor.js +153 -0
  18. package/dist/src/executor/LifecycleExecutor.js.map +1 -0
  19. package/dist/src/executor/watcher.d.ts +63 -0
  20. package/dist/src/executor/watcher.js +213 -0
  21. package/dist/src/executor/watcher.js.map +1 -0
  22. package/dist/src/functions/hello.d.ts +4 -0
  23. package/dist/src/functions/hello.js +8 -0
  24. package/dist/src/functions/hello.js.map +1 -0
  25. package/dist/src/index.d.ts +1 -0
  26. package/dist/src/index.js +9 -0
  27. package/dist/src/index.js.map +1 -0
  28. package/dist/src/jobs/dailyJob.d.ts +4 -0
  29. package/dist/src/jobs/dailyJob.js +8 -0
  30. package/dist/src/jobs/dailyJob.js.map +1 -0
  31. package/dist/src/local_engine/LocalNotifier.d.ts +10 -0
  32. package/dist/src/local_engine/LocalNotifier.js +26 -0
  33. package/dist/src/local_engine/LocalNotifier.js.map +1 -0
  34. package/dist/src/local_engine/local-engine-child-base.d.ts +79 -0
  35. package/dist/src/local_engine/local-engine-child-base.js +304 -0
  36. package/dist/src/local_engine/local-engine-child-base.js.map +1 -0
  37. package/dist/src/local_engine/local-engine-client.d.ts +80 -0
  38. package/dist/src/local_engine/local-engine-client.js +333 -0
  39. package/dist/src/local_engine/local-engine-client.js.map +1 -0
  40. package/dist/src/local_engine/local-engine-types.d.ts +132 -0
  41. package/dist/src/local_engine/local-engine-types.js +6 -0
  42. package/dist/src/local_engine/local-engine-types.js.map +1 -0
  43. package/dist/src/local_engine/local-engine-unified.d.ts +40 -0
  44. package/dist/src/local_engine/local-engine-unified.js +406 -0
  45. package/dist/src/local_engine/local-engine-unified.js.map +1 -0
  46. package/dist/src/local_engine/local-engine-utils.d.ts +70 -0
  47. package/dist/src/local_engine/local-engine-utils.js +192 -0
  48. package/dist/src/local_engine/local-engine-utils.js.map +1 -0
  49. package/dist/src/local_engine/localSDKConfig.d.ts +30 -0
  50. package/dist/src/local_engine/localSDKConfig.js +392 -0
  51. package/dist/src/local_engine/localSDKConfig.js.map +1 -0
  52. package/dist/src/local_engine/storage/LocalConfigStore.d.ts +56 -0
  53. package/dist/src/local_engine/storage/LocalConfigStore.js +129 -0
  54. package/dist/src/local_engine/storage/LocalConfigStore.js.map +1 -0
  55. package/dist/src/local_engine/storage/LocalJobStore.d.ts +110 -0
  56. package/dist/src/local_engine/storage/LocalJobStore.js +239 -0
  57. package/dist/src/local_engine/storage/LocalJobStore.js.map +1 -0
  58. package/dist/src/local_engine/storage/LocalKVStore.d.ts +105 -0
  59. package/dist/src/local_engine/storage/LocalKVStore.js +1002 -0
  60. package/dist/src/local_engine/storage/LocalKVStore.js.map +1 -0
  61. package/dist/src/local_engine/storage/LocalNotificationStore.d.ts +27 -0
  62. package/dist/src/local_engine/storage/LocalNotificationStore.js +125 -0
  63. package/dist/src/local_engine/storage/LocalNotificationStore.js.map +1 -0
  64. package/dist/src/local_engine/storage/LocalSecretsStore.d.ts +114 -0
  65. package/dist/src/local_engine/storage/LocalSecretsStore.js +319 -0
  66. package/dist/src/local_engine/storage/LocalSecretsStore.js.map +1 -0
  67. package/dist/src/local_engine/storage/LocalSettingsStore.d.ts +161 -0
  68. package/dist/src/local_engine/storage/LocalSettingsStore.js +417 -0
  69. package/dist/src/local_engine/storage/LocalSettingsStore.js.map +1 -0
  70. package/dist/src/local_engine/storage/NumberSet.d.ts +21 -0
  71. package/dist/src/local_engine/storage/NumberSet.js +32 -0
  72. package/dist/src/local_engine/storage/NumberSet.js.map +1 -0
  73. package/dist/src/local_engine/storage/StringSet.d.ts +21 -0
  74. package/dist/src/local_engine/storage/StringSet.js +32 -0
  75. package/dist/src/local_engine/storage/StringSet.js.map +1 -0
  76. package/dist/src/local_engine/types.d.ts +52 -0
  77. package/dist/src/local_engine/types.js +6 -0
  78. package/dist/src/local_engine/types.js.map +1 -0
  79. package/dist/src/local_engine/utils.d.ts +31 -0
  80. package/dist/src/local_engine/utils.js +126 -0
  81. package/dist/src/local_engine/utils.js.map +1 -0
  82. package/dist/src/logging/LogManager.d.ts +89 -0
  83. package/dist/src/logging/LogManager.js +237 -0
  84. package/dist/src/logging/LogManager.js.map +1 -0
  85. package/dist/src/server/api/functions.d.ts +7 -0
  86. package/dist/src/server/api/functions.js +80 -0
  87. package/dist/src/server/api/functions.js.map +1 -0
  88. package/dist/src/server/api/jobs.d.ts +8 -0
  89. package/dist/src/server/api/jobs.js +242 -0
  90. package/dist/src/server/api/jobs.js.map +1 -0
  91. package/dist/src/server/api/lifecycle.d.ts +6 -0
  92. package/dist/src/server/api/lifecycle.js +73 -0
  93. package/dist/src/server/api/lifecycle.js.map +1 -0
  94. package/dist/src/server/api/settings.d.ts +6 -0
  95. package/dist/src/server/api/settings.js +117 -0
  96. package/dist/src/server/api/settings.js.map +1 -0
  97. package/dist/src/server/api/stores.d.ts +2 -0
  98. package/dist/src/server/api/stores.js +341 -0
  99. package/dist/src/server/api/stores.js.map +1 -0
  100. package/dist/src/server/api/v1.d.ts +10 -0
  101. package/dist/src/server/api/v1.js +711 -0
  102. package/dist/src/server/api/v1.js.map +1 -0
  103. package/dist/src/server/api.d.ts +8 -0
  104. package/dist/src/server/api.js +154 -0
  105. package/dist/src/server/api.js.map +1 -0
  106. package/dist/src/server/app-discovery.d.ts +5 -0
  107. package/dist/src/server/app-discovery.js +81 -0
  108. package/dist/src/server/app-discovery.js.map +1 -0
  109. package/dist/src/server/config.d.ts +21 -0
  110. package/dist/src/server/config.js +100 -0
  111. package/dist/src/server/config.js.map +1 -0
  112. package/dist/src/server/websocket.d.ts +0 -0
  113. package/dist/src/server/websocket.js +2 -0
  114. package/dist/src/server/websocket.js.map +1 -0
  115. package/dist/src/server.d.ts +2 -0
  116. package/dist/src/server.js +546 -0
  117. package/dist/src/server.js.map +1 -0
  118. package/dist/src/types/app.d.ts +155 -0
  119. package/dist/src/types/app.js +24 -0
  120. package/dist/src/types/app.js.map +1 -0
  121. package/dist/src/types/kvstore.d.ts +320 -0
  122. package/dist/src/types/kvstore.js +5 -0
  123. package/dist/src/types/kvstore.js.map +1 -0
  124. package/dist/src/ui/components/App.d.ts +6 -0
  125. package/dist/src/ui/components/App.js +255 -0
  126. package/dist/src/ui/components/App.js.map +1 -0
  127. package/dist/src/ui/components/FunctionsView.d.ts +6 -0
  128. package/dist/src/ui/components/FunctionsView.js +217 -0
  129. package/dist/src/ui/components/FunctionsView.js.map +1 -0
  130. package/dist/src/ui/components/JobsView.d.ts +6 -0
  131. package/dist/src/ui/components/JobsView.js +257 -0
  132. package/dist/src/ui/components/JobsView.js.map +1 -0
  133. package/dist/src/ui/components/KVStoreViewer.d.ts +11 -0
  134. package/dist/src/ui/components/KVStoreViewer.js +168 -0
  135. package/dist/src/ui/components/KVStoreViewer.js.map +1 -0
  136. package/dist/src/ui/components/NotificationViewer.d.ts +16 -0
  137. package/dist/src/ui/components/NotificationViewer.js +69 -0
  138. package/dist/src/ui/components/NotificationViewer.js.map +1 -0
  139. package/dist/src/ui/components/SecretsStoreViewer.d.ts +11 -0
  140. package/dist/src/ui/components/SecretsStoreViewer.js +179 -0
  141. package/dist/src/ui/components/SecretsStoreViewer.js.map +1 -0
  142. package/dist/src/ui/components/SettingsStoreViewer.d.ts +24 -0
  143. package/dist/src/ui/components/SettingsStoreViewer.js +132 -0
  144. package/dist/src/ui/components/SettingsStoreViewer.js.map +1 -0
  145. package/dist/src/ui/components/StoreViewer.d.ts +16 -0
  146. package/dist/src/ui/components/StoreViewer.js +86 -0
  147. package/dist/src/ui/components/StoreViewer.js.map +1 -0
  148. package/dist/src/ui/components/TabbedConsole.d.ts +15 -0
  149. package/dist/src/ui/components/TabbedConsole.js +93 -0
  150. package/dist/src/ui/components/TabbedConsole.js.map +1 -0
  151. package/dist/src/ui/components/common/DataTree.d.ts +15 -0
  152. package/dist/src/ui/components/common/DataTree.js +95 -0
  153. package/dist/src/ui/components/common/DataTree.js.map +1 -0
  154. package/dist/src/ui/components/common/EyeIcon.d.ts +11 -0
  155. package/dist/src/ui/components/common/EyeIcon.js +11 -0
  156. package/dist/src/ui/components/common/EyeIcon.js.map +1 -0
  157. package/dist/src/ui/index.d.ts +1 -0
  158. package/dist/src/ui/index.js +20 -0
  159. package/dist/src/ui/index.js.map +1 -0
  160. package/package.json +104 -0
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const jsx_runtime_1 = require("react/jsx-runtime");
4
+ const react_1 = require("react");
5
+ const JobsView = ({ appInstalled }) => {
6
+ const [jobs, setJobs] = (0, react_1.useState)([]);
7
+ const [selectedJob, setSelectedJob] = (0, react_1.useState)(null);
8
+ const [executions, setExecutions] = (0, react_1.useState)([]);
9
+ const [selectedExecution, setSelectedExecution] = (0, react_1.useState)(null);
10
+ const [executionStates, setExecutionStates] = (0, react_1.useState)([]);
11
+ const [expandedStates, setExpandedStates] = (0, react_1.useState)(new Set());
12
+ const [loading, setLoading] = (0, react_1.useState)(false);
13
+ const [startJobDialogOpen, setStartJobDialogOpen] = (0, react_1.useState)(false);
14
+ const [jobParameters, setJobParameters] = (0, react_1.useState)({});
15
+ const [startJobError, setStartJobError] = (0, react_1.useState)(null);
16
+ const [pollingInterval, setPollingInterval] = (0, react_1.useState)(null);
17
+ // Fetch jobs on mount
18
+ (0, react_1.useEffect)(() => {
19
+ if (appInstalled) {
20
+ fetchJobs();
21
+ }
22
+ }, [appInstalled]);
23
+ // Fetch executions when job is selected
24
+ (0, react_1.useEffect)(() => {
25
+ // Clear any existing polling when job changes
26
+ if (pollingInterval) {
27
+ clearInterval(pollingInterval);
28
+ setPollingInterval(null);
29
+ }
30
+ if (selectedJob) {
31
+ fetchExecutions(selectedJob);
32
+ }
33
+ }, [selectedJob]);
34
+ // Fetch execution states when execution is selected
35
+ (0, react_1.useEffect)(() => {
36
+ if (selectedExecution) {
37
+ fetchExecutionStates(selectedExecution);
38
+ }
39
+ }, [selectedExecution]);
40
+ // Polling effect for running jobs
41
+ (0, react_1.useEffect)(() => {
42
+ const hasRunningJobs = executions.some(execution => execution.status === 'running');
43
+ if (hasRunningJobs && selectedJob && !pollingInterval) {
44
+ // Start polling every 2 seconds for running jobs
45
+ const interval = setInterval(async () => {
46
+ await fetchExecutions(selectedJob);
47
+ if (selectedExecution) {
48
+ await fetchExecutionStates(selectedExecution);
49
+ }
50
+ }, 2000);
51
+ setPollingInterval(interval);
52
+ }
53
+ else if (!hasRunningJobs && pollingInterval) {
54
+ // Stop polling when no running jobs
55
+ clearInterval(pollingInterval);
56
+ setPollingInterval(null);
57
+ }
58
+ // Cleanup on unmount
59
+ return () => {
60
+ if (pollingInterval) {
61
+ clearInterval(pollingInterval);
62
+ }
63
+ };
64
+ }, [executions, selectedJob, selectedExecution, pollingInterval]);
65
+ const fetchJobs = async () => {
66
+ try {
67
+ const response = await fetch('/devserver/api/jobs');
68
+ if (response.ok) {
69
+ const data = await response.json();
70
+ setJobs(data.jobs || []);
71
+ if (data.jobs && data.jobs.length > 0 && !selectedJob) {
72
+ setSelectedJob(data.jobs[0].id);
73
+ }
74
+ }
75
+ }
76
+ catch (error) {
77
+ console.error('Error fetching jobs:', error);
78
+ }
79
+ };
80
+ const fetchExecutions = async (jobId) => {
81
+ try {
82
+ const response = await fetch(`/devserver/api/jobs/executions?jobId=${jobId}&limit=50`);
83
+ if (response.ok) {
84
+ const data = await response.json();
85
+ setExecutions(data.executions || []);
86
+ if (data.executions && data.executions.length > 0) {
87
+ setSelectedExecution(data.executions[0].id);
88
+ }
89
+ else {
90
+ setSelectedExecution(null);
91
+ setExecutionStates([]);
92
+ }
93
+ }
94
+ }
95
+ catch (error) {
96
+ console.error('Error fetching executions:', error);
97
+ }
98
+ };
99
+ const fetchExecutionStates = async (executionId) => {
100
+ try {
101
+ const response = await fetch(`/devserver/api/jobs/executions/${executionId}/states`);
102
+ if (response.ok) {
103
+ const data = await response.json();
104
+ setExecutionStates(data.states || []);
105
+ }
106
+ }
107
+ catch (error) {
108
+ console.error('Error fetching execution states:', error);
109
+ }
110
+ };
111
+ const startJob = async () => {
112
+ if (!selectedJob)
113
+ return;
114
+ setLoading(true);
115
+ setStartJobError(null);
116
+ try {
117
+ const response = await fetch(`/devserver/api/jobs/${selectedJob}/start`, {
118
+ method: 'POST',
119
+ headers: {
120
+ 'Content-Type': 'application/json',
121
+ },
122
+ body: JSON.stringify({
123
+ parameters: jobParameters
124
+ })
125
+ });
126
+ const data = await response.json();
127
+ if (response.ok) {
128
+ // Job started successfully - close modal immediately and reset loading state
129
+ setStartJobDialogOpen(false);
130
+ setJobParameters({});
131
+ setStartJobError(null);
132
+ setLoading(false);
133
+ // Get the execution ID from the response
134
+ const newExecutionId = data.execution?.id;
135
+ // Refresh executions to show the new running job (with small delay to ensure job is persisted)
136
+ setTimeout(async () => {
137
+ await fetchExecutions(selectedJob);
138
+ // Force polling for a short period to catch the running state and completion
139
+ const forcePollingInterval = setInterval(async () => {
140
+ await fetchExecutions(selectedJob);
141
+ // Always fetch states for the newest execution (first in list)
142
+ const response = await fetch(`/devserver/api/jobs/executions?jobId=${selectedJob}&limit=1`);
143
+ if (response.ok) {
144
+ const data = await response.json();
145
+ if (data.executions && data.executions.length > 0) {
146
+ await fetchExecutionStates(data.executions[0].id);
147
+ }
148
+ }
149
+ }, 1000);
150
+ // Stop force polling after 15 seconds
151
+ setTimeout(() => {
152
+ clearInterval(forcePollingInterval);
153
+ }, 15000);
154
+ }, 100);
155
+ if (!data.success) {
156
+ // Job failed to start - log the error but modal is already closed
157
+ console.error('Job execution failed to start:', data.error);
158
+ }
159
+ }
160
+ else {
161
+ // Request failed - show error and keep modal open for retry
162
+ const errorMessage = data.error?.message || data.error || 'Failed to start job';
163
+ setStartJobError(errorMessage);
164
+ console.error('Failed to start job:', data.error);
165
+ }
166
+ }
167
+ catch (error) {
168
+ // Network or other error
169
+ const errorMessage = error instanceof Error ? error.message : 'Network error occurred';
170
+ setStartJobError(errorMessage);
171
+ console.error('Error starting job:', error);
172
+ }
173
+ finally {
174
+ setLoading(false);
175
+ }
176
+ };
177
+ const formatTimestamp = (timestamp) => {
178
+ return new Date(timestamp).toLocaleString();
179
+ };
180
+ const formatExecutionTime = (time) => {
181
+ if (!time)
182
+ return 'N/A';
183
+ return `${time}ms`;
184
+ };
185
+ const getStatusColor = (status) => {
186
+ switch (status) {
187
+ case 'completed': return '#28a745';
188
+ case 'running': return '#007bff';
189
+ case 'failed': return '#dc3545';
190
+ case 'interrupted': return '#ffc107';
191
+ default: return '#6c757d';
192
+ }
193
+ };
194
+ const toggleStateExpansion = (stateId) => {
195
+ const newExpanded = new Set(expandedStates);
196
+ if (newExpanded.has(stateId)) {
197
+ newExpanded.delete(stateId);
198
+ }
199
+ else {
200
+ newExpanded.add(stateId);
201
+ }
202
+ setExpandedStates(newExpanded);
203
+ };
204
+ const updateJobParameter = (key, value) => {
205
+ setJobParameters(prev => ({
206
+ ...prev,
207
+ [key]: value
208
+ }));
209
+ };
210
+ const removeJobParameter = (key) => {
211
+ const newParams = { ...jobParameters };
212
+ delete newParams[key];
213
+ setJobParameters(newParams);
214
+ };
215
+ const addJobParameter = () => {
216
+ const key = `param_${Object.keys(jobParameters).length + 1}`;
217
+ updateJobParameter(key, '');
218
+ };
219
+ if (!appInstalled) {
220
+ return ((0, jsx_runtime_1.jsx)("div", { className: "jobs-not-installed", children: (0, jsx_runtime_1.jsxs)("div", { className: "placeholder-content", children: [(0, jsx_runtime_1.jsx)("h3", { children: "Jobs Not Available" }), (0, jsx_runtime_1.jsx)("p", { children: "Install your app first to manage jobs. Jobs will appear here after installation." })] }) }));
221
+ }
222
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "jobs-view", children: [(0, jsx_runtime_1.jsxs)("div", { className: "jobs-layout", children: [(0, jsx_runtime_1.jsxs)("div", { className: "jobs-sidebar", children: [(0, jsx_runtime_1.jsxs)("div", { className: "jobs-header", children: [(0, jsx_runtime_1.jsx)("h4", { children: "Jobs" }), selectedJob && ((0, jsx_runtime_1.jsx)("button", { className: "start-job-btn", onClick: () => {
223
+ setStartJobDialogOpen(true);
224
+ setStartJobError(null);
225
+ }, disabled: loading, children: "Start Job" }))] }), (0, jsx_runtime_1.jsx)("div", { className: "jobs-list", children: jobs.length === 0 ? ((0, jsx_runtime_1.jsx)("div", { className: "no-jobs", children: (0, jsx_runtime_1.jsx)("p", { children: "No jobs defined in app.yml" }) })) : (jobs.map((job) => ((0, jsx_runtime_1.jsxs)("div", { className: `job-item ${selectedJob === job.id ? 'active' : ''} ${!job.validation.valid ? 'invalid' : ''}`, onClick: () => setSelectedJob(job.id), children: [(0, jsx_runtime_1.jsx)("div", { className: "job-name", children: job.id }), (0, jsx_runtime_1.jsx)("div", { className: "job-description", children: job.description }), (0, jsx_runtime_1.jsxs)("div", { className: "job-meta", children: [job.isSourceJob && (0, jsx_runtime_1.jsx)("span", { className: "job-badge source", children: "Source" }), job.cron && (0, jsx_runtime_1.jsx)("span", { className: "job-badge cron", children: "Scheduled" }), !job.validation.valid && ((0, jsx_runtime_1.jsx)("span", { className: "job-badge error", title: job.validation.error, children: "Invalid" }))] })] }, job.id)))) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "executions-panel", children: [(0, jsx_runtime_1.jsxs)("div", { className: "executions-header", children: [(0, jsx_runtime_1.jsx)("h4", { children: "Execution History" }), selectedJob && ((0, jsx_runtime_1.jsxs)("span", { className: "selected-job", children: ["Job: ", selectedJob] }))] }), (0, jsx_runtime_1.jsx)("div", { className: "executions-list", children: executions.length === 0 ? ((0, jsx_runtime_1.jsx)("div", { className: "no-executions", children: (0, jsx_runtime_1.jsx)("p", { children: selectedJob ? 'No executions yet' : 'Select a job to see executions' }) })) : (executions.map((execution) => ((0, jsx_runtime_1.jsxs)("div", { className: `execution-item ${selectedExecution === execution.id ? 'active' : ''}`, onClick: () => setSelectedExecution(execution.id), children: [(0, jsx_runtime_1.jsxs)("div", { className: "execution-status", children: [execution.status === 'running' ? ((0, jsx_runtime_1.jsx)("span", { className: "status-spinner" })) : ((0, jsx_runtime_1.jsx)("span", { className: "status-dot", style: { backgroundColor: getStatusColor(execution.status) } })), (0, jsx_runtime_1.jsx)("span", { className: "status-text", children: execution.status })] }), (0, jsx_runtime_1.jsxs)("div", { className: "execution-time", children: [(0, jsx_runtime_1.jsx)("div", { className: "started-at", children: formatTimestamp(execution.startedAt) }), execution.completedAt && ((0, jsx_runtime_1.jsxs)("div", { className: "execution-duration", children: ["Duration: ", formatExecutionTime(execution.executionTime)] }))] }), (0, jsx_runtime_1.jsx)("div", { className: "execution-stats", children: (0, jsx_runtime_1.jsxs)("span", { className: "state-count", children: [execution.stateCount, " states"] }) }), execution.error && ((0, jsx_runtime_1.jsxs)("div", { className: "execution-error", children: ["Error: ", execution.error.message] }))] }, execution.id)))) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "states-panel", children: [(0, jsx_runtime_1.jsxs)("div", { className: "states-header", children: [(0, jsx_runtime_1.jsx)("h4", { children: "Job States" }), selectedExecution && ((0, jsx_runtime_1.jsxs)("span", { className: "selected-execution", children: ["Execution: ", selectedExecution.slice(0, 8), "..."] }))] }), (0, jsx_runtime_1.jsx)("div", { className: "states-list", children: executionStates.length === 0 ? ((0, jsx_runtime_1.jsx)("div", { className: "no-states", children: (0, jsx_runtime_1.jsx)("p", { children: selectedExecution ? 'No states recorded' : 'Select an execution to see states' }) })) : (executionStates.map((state) => ((0, jsx_runtime_1.jsxs)("div", { className: "state-item", children: [(0, jsx_runtime_1.jsxs)("div", { className: "state-header", onClick: () => toggleStateExpansion(state.id), children: [(0, jsx_runtime_1.jsxs)("div", { className: "state-meta", children: [(0, jsx_runtime_1.jsxs)("div", { className: "state-primary-info", children: [(0, jsx_runtime_1.jsx)("span", { className: "state-timestamp", children: formatTimestamp(state.timestamp) }), (0, jsx_runtime_1.jsx)("span", { className: `state-phase ${state.phase}`, children: state.phase })] }), state.complete && ((0, jsx_runtime_1.jsx)("div", { className: "state-secondary-info", children: (() => {
226
+ const currentExecution = executions.find(e => e.id === state.executionId);
227
+ const isError = currentExecution?.status === 'failed' && currentExecution?.error;
228
+ return ((0, jsx_runtime_1.jsx)("span", { className: `state-status ${isError ? 'error' : 'complete'}`, children: isError ? 'Error' : 'Completed' }));
229
+ })() }))] }), (0, jsx_runtime_1.jsx)("div", { className: "state-expand", children: (0, jsx_runtime_1.jsx)("span", { className: `expand-icon ${expandedStates.has(state.id) ? 'expanded' : ''}`, children: "\u25BC" }) })] }), expandedStates.has(state.id) && ((0, jsx_runtime_1.jsx)("div", { className: "state-content", children: (0, jsx_runtime_1.jsx)("pre", { children: JSON.stringify(state.state, null, 2) }) }))] }, state.id)))) })] })] }), startJobDialogOpen && ((0, jsx_runtime_1.jsx)("div", { className: "modal-overlay", children: (0, jsx_runtime_1.jsxs)("div", { className: "modal", children: [(0, jsx_runtime_1.jsxs)("div", { className: "modal-header", children: [(0, jsx_runtime_1.jsxs)("h3", { children: ["Start Job: ", selectedJob] }), (0, jsx_runtime_1.jsx)("button", { className: "modal-close", onClick: () => {
230
+ setStartJobDialogOpen(false);
231
+ setStartJobError(null);
232
+ setJobParameters({});
233
+ }, children: "\u00D7" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "modal-body", children: [startJobError && ((0, jsx_runtime_1.jsxs)("div", { className: "start-job-error", children: [(0, jsx_runtime_1.jsx)("h4", { children: "Error" }), (0, jsx_runtime_1.jsx)("p", { children: startJobError })] })), (0, jsx_runtime_1.jsxs)("div", { className: "job-parameters", children: [(0, jsx_runtime_1.jsx)("h4", { children: "Parameters" }), (0, jsx_runtime_1.jsxs)("div", { className: "parameter-list", children: [Object.entries(jobParameters).map(([key, value]) => ((0, jsx_runtime_1.jsxs)("div", { className: "parameter-row", children: [(0, jsx_runtime_1.jsx)("input", { type: "text", value: key, onChange: (e) => {
234
+ const newKey = e.target.value;
235
+ const newParams = { ...jobParameters };
236
+ delete newParams[key];
237
+ newParams[newKey] = value;
238
+ setJobParameters(newParams);
239
+ }, placeholder: "Parameter name", className: "parameter-key" }), (0, jsx_runtime_1.jsx)("input", { type: "text", value: typeof value === 'string' ? value : JSON.stringify(value), onChange: (e) => {
240
+ try {
241
+ updateJobParameter(key, JSON.parse(e.target.value));
242
+ }
243
+ catch {
244
+ updateJobParameter(key, e.target.value);
245
+ }
246
+ }, placeholder: "Parameter value (JSON or string)", className: "parameter-value" }), (0, jsx_runtime_1.jsx)("button", { className: "remove-parameter", onClick: () => removeJobParameter(key), children: "\u00D7" })] }, key))), (0, jsx_runtime_1.jsx)("button", { className: "add-parameter", onClick: addJobParameter, children: "Add Parameter" })] })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "modal-footer", children: [(0, jsx_runtime_1.jsx)("button", { className: "cancel-btn", onClick: () => {
247
+ setStartJobDialogOpen(false);
248
+ setStartJobError(null);
249
+ setJobParameters({});
250
+ }, children: "Cancel" }), startJobError ? ((0, jsx_runtime_1.jsx)("button", { className: "start-btn", onClick: () => {
251
+ setStartJobDialogOpen(false);
252
+ setStartJobError(null);
253
+ setJobParameters({});
254
+ }, children: "Close" })) : ((0, jsx_runtime_1.jsx)("button", { className: "start-btn", onClick: startJob, disabled: loading, children: loading ? 'Starting...' : 'Start Job' }))] })] }) }))] }));
255
+ };
256
+ exports.default = JobsView;
257
+ //# sourceMappingURL=JobsView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JobsView.js","sourceRoot":"","sources":["../../../../src/ui/components/JobsView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ interface KVStoreViewerProps {
3
+ data: {
4
+ [key: string]: any;
5
+ };
6
+ title: string;
7
+ apiEndpoint: string;
8
+ onUpdate: (updatedData: any) => void;
9
+ }
10
+ declare const KVStoreViewer: React.FC<KVStoreViewerProps>;
11
+ export default KVStoreViewer;
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const jsx_runtime_1 = require("react/jsx-runtime");
4
+ const react_1 = require("react");
5
+ const KVStoreViewer = ({ data, title, apiEndpoint, onUpdate }) => {
6
+ const [editingKey, setEditingKey] = (0, react_1.useState)(null);
7
+ const [editValue, setEditValue] = (0, react_1.useState)('');
8
+ const [newKey, setNewKey] = (0, react_1.useState)('');
9
+ const [newValue, setNewValue] = (0, react_1.useState)('');
10
+ const [showAddForm, setShowAddForm] = (0, react_1.useState)(false);
11
+ const startEditing = (key, value) => {
12
+ setEditingKey(key);
13
+ // Format JSON for editing
14
+ setEditValue(JSON.stringify(value, null, 2));
15
+ };
16
+ const saveEdit = async (key) => {
17
+ try {
18
+ // Parse JSON value
19
+ let newValue;
20
+ try {
21
+ newValue = JSON.parse(editValue);
22
+ }
23
+ catch (error) {
24
+ alert('Invalid JSON format. Please check your syntax.');
25
+ return;
26
+ }
27
+ // Update via API - API expects value wrapped in object
28
+ const response = await fetch(`${apiEndpoint}/${encodeURIComponent(key)}`, {
29
+ method: 'PUT',
30
+ headers: {
31
+ 'Content-Type': 'application/json',
32
+ },
33
+ body: JSON.stringify(newValue),
34
+ });
35
+ if (!response.ok) {
36
+ throw new Error(`Failed to update KV value: ${response.statusText}`);
37
+ }
38
+ const result = await response.json();
39
+ // API only returns the key, so we trust that our value was stored correctly
40
+ // Update local state with what we sent
41
+ const updatedData = { ...data, [key]: newValue };
42
+ onUpdate(updatedData);
43
+ setEditingKey(null);
44
+ setEditValue('');
45
+ }
46
+ catch (error) {
47
+ console.error('Error updating KV value:', error);
48
+ alert(`Failed to update value: ${error instanceof Error ? error.message : String(error)}`);
49
+ }
50
+ };
51
+ const deleteKey = async (key) => {
52
+ if (!confirm(`Are you sure you want to delete the key "${key}"?`)) {
53
+ return;
54
+ }
55
+ try {
56
+ // Delete via API
57
+ const response = await fetch(`${apiEndpoint}/${encodeURIComponent(key)}`, {
58
+ method: 'DELETE',
59
+ });
60
+ if (!response.ok) {
61
+ throw new Error(`Failed to delete KV value: ${response.statusText}`);
62
+ }
63
+ // Update local state
64
+ const updatedData = { ...data };
65
+ delete updatedData[key];
66
+ onUpdate(updatedData);
67
+ }
68
+ catch (error) {
69
+ console.error('Error deleting KV value:', error);
70
+ alert(`Failed to delete value: ${error instanceof Error ? error.message : String(error)}`);
71
+ }
72
+ };
73
+ const addNewEntry = async () => {
74
+ if (!newKey.trim()) {
75
+ alert('Please enter a key name');
76
+ return;
77
+ }
78
+ try {
79
+ // Parse JSON value
80
+ let value;
81
+ try {
82
+ value = JSON.parse(newValue);
83
+ }
84
+ catch (error) {
85
+ alert('Invalid JSON format. Please check your syntax.');
86
+ return;
87
+ }
88
+ // Add via API - API expects value wrapped in object
89
+ const response = await fetch(`${apiEndpoint}/${encodeURIComponent(newKey)}`, {
90
+ method: 'PUT',
91
+ headers: {
92
+ 'Content-Type': 'application/json',
93
+ },
94
+ body: JSON.stringify({ value }),
95
+ });
96
+ if (!response.ok) {
97
+ throw new Error(`Failed to add KV value: ${response.statusText}`);
98
+ }
99
+ const result = await response.json();
100
+ // API only returns the key, so we trust that our value was stored correctly
101
+ // Update local state with what we sent
102
+ const updatedData = { ...data, [newKey]: value };
103
+ onUpdate(updatedData);
104
+ // Reset form
105
+ setNewKey('');
106
+ setNewValue('');
107
+ setShowAddForm(false);
108
+ }
109
+ catch (error) {
110
+ console.error('Error adding KV value:', error);
111
+ alert(`Failed to add value: ${error instanceof Error ? error.message : String(error)}`);
112
+ }
113
+ };
114
+ const cancelEdit = () => {
115
+ setEditingKey(null);
116
+ setEditValue('');
117
+ };
118
+ const cancelAdd = () => {
119
+ setNewKey('');
120
+ setNewValue('');
121
+ setShowAddForm(false);
122
+ };
123
+ const keys = Object.keys(data).sort();
124
+ const [expandedKeys, setExpandedKeys] = (0, react_1.useState)(new Set());
125
+ const toggleKey = (key) => {
126
+ const newExpanded = new Set(expandedKeys);
127
+ if (newExpanded.has(key)) {
128
+ newExpanded.delete(key);
129
+ }
130
+ else {
131
+ newExpanded.add(key);
132
+ }
133
+ setExpandedKeys(newExpanded);
134
+ };
135
+ const renderKeyValue = (key, value) => {
136
+ const isEditing = editingKey === key;
137
+ if (isEditing) {
138
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "edit-mode", children: [(0, jsx_runtime_1.jsx)("textarea", { className: "edit-input", value: editValue, onChange: (e) => setEditValue(e.target.value), placeholder: "Enter JSON document", rows: 8, style: { width: '100%', fontFamily: 'monospace' } }), (0, jsx_runtime_1.jsxs)("div", { className: "edit-controls", children: [(0, jsx_runtime_1.jsx)("button", { className: "save-btn", onClick: () => saveEdit(key), children: "Save" }), (0, jsx_runtime_1.jsx)("button", { className: "cancel-btn", onClick: cancelEdit, children: "Cancel" })] })] }));
139
+ }
140
+ // Show formatted JSON for all values
141
+ return ((0, jsx_runtime_1.jsx)("div", { className: "json-display", children: (0, jsx_runtime_1.jsx)("pre", { style: {
142
+ margin: 0,
143
+ padding: '8px',
144
+ background: '#3c3c3c',
145
+ border: '1px solid #4a4a4a',
146
+ borderRadius: '3px',
147
+ color: '#cccccc',
148
+ fontFamily: 'monospace',
149
+ fontSize: '11px',
150
+ whiteSpace: 'pre-wrap',
151
+ wordWrap: 'break-word',
152
+ overflowX: 'auto'
153
+ }, children: JSON.stringify(value, null, 2) }) }));
154
+ };
155
+ return ((0, jsx_runtime_1.jsx)("div", { className: "kv-store-viewer compact-store", children: (0, jsx_runtime_1.jsxs)("div", { className: "store-sections", children: [keys.map((key) => {
156
+ const value = data[key];
157
+ const isExpanded = expandedKeys.has(key);
158
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "store-section", children: [(0, jsx_runtime_1.jsxs)("div", { className: "section-header", onClick: () => toggleKey(key), style: { cursor: 'pointer' }, children: [(0, jsx_runtime_1.jsx)("span", { className: "expand-icon", children: isExpanded ? '▼' : '▶' }), (0, jsx_runtime_1.jsx)("span", { className: "section-name", children: key }), (0, jsx_runtime_1.jsxs)("div", { className: "section-actions", children: [(0, jsx_runtime_1.jsx)("button", { className: "edit-icon", onClick: (e) => {
159
+ e.stopPropagation();
160
+ startEditing(key, value);
161
+ }, title: "Edit JSON", children: "\u270F\uFE0F" }), (0, jsx_runtime_1.jsx)("button", { className: "delete-icon", onClick: (e) => {
162
+ e.stopPropagation();
163
+ deleteKey(key);
164
+ }, title: "Delete Entry", children: "\uD83D\uDDD1\uFE0F" })] })] }), isExpanded && ((0, jsx_runtime_1.jsx)("div", { className: "json-content", children: renderKeyValue(key, value) }))] }, key));
165
+ }), showAddForm && ((0, jsx_runtime_1.jsxs)("div", { className: "store-section add-form", children: [(0, jsx_runtime_1.jsxs)("div", { className: "section-header", children: [(0, jsx_runtime_1.jsx)("span", { className: "expand-icon" }), (0, jsx_runtime_1.jsx)("input", { type: "text", value: newKey, onChange: (e) => setNewKey(e.target.value), placeholder: "Key name", className: "key-input" }), (0, jsx_runtime_1.jsxs)("div", { className: "section-actions", children: [(0, jsx_runtime_1.jsx)("button", { className: "save-btn", onClick: addNewEntry, children: "Save" }), (0, jsx_runtime_1.jsx)("button", { className: "cancel-btn", onClick: cancelAdd, children: "Cancel" })] })] }), (0, jsx_runtime_1.jsx)("div", { className: "primitive-value", children: (0, jsx_runtime_1.jsx)("textarea", { value: newValue, onChange: (e) => setNewValue(e.target.value), placeholder: 'Enter JSON document (e.g., {"field1": "value1", "field2": "value2"})', className: "value-input", rows: 4, style: { width: '100%', fontFamily: 'monospace' } }) })] })), (0, jsx_runtime_1.jsx)("div", { className: "add-entry-section", children: (0, jsx_runtime_1.jsx)("button", { className: "add-entry-btn", onClick: () => setShowAddForm(!showAddForm), children: showAddForm ? 'Cancel' : '+ Add Entry' }) }), keys.length === 0 && !showAddForm && ((0, jsx_runtime_1.jsx)("div", { className: "empty-store", children: "No entries in this store" }))] }) }));
166
+ };
167
+ exports.default = KVStoreViewer;
168
+ //# sourceMappingURL=KVStoreViewer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KVStoreViewer.js","sourceRoot":"","sources":["../../../../src/ui/components/KVStoreViewer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ interface NotificationEntry {
3
+ id: string;
4
+ status: 'info' | 'success' | 'warn' | 'error';
5
+ activity: string;
6
+ title: string;
7
+ summary: string;
8
+ details?: string;
9
+ timestamp: string;
10
+ }
11
+ interface NotificationViewerProps {
12
+ notifications: NotificationEntry[];
13
+ onRefresh?: () => void;
14
+ }
15
+ declare const NotificationViewer: React.FC<NotificationViewerProps>;
16
+ export default NotificationViewer;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const jsx_runtime_1 = require("react/jsx-runtime");
4
+ const react_1 = require("react");
5
+ const NotificationViewer = ({ notifications, onRefresh }) => {
6
+ const [expandedNotifications, setExpandedNotifications] = (0, react_1.useState)(new Set());
7
+ const toggleNotification = (id) => {
8
+ const newExpanded = new Set(expandedNotifications);
9
+ if (newExpanded.has(id)) {
10
+ newExpanded.delete(id);
11
+ }
12
+ else {
13
+ newExpanded.add(id);
14
+ }
15
+ setExpandedNotifications(newExpanded);
16
+ };
17
+ const clearAllNotifications = async () => {
18
+ if (!confirm('Are you sure you want to clear all notifications?')) {
19
+ return;
20
+ }
21
+ try {
22
+ const response = await fetch('/devserver/api/stores/notifications', {
23
+ method: 'DELETE',
24
+ });
25
+ if (response.ok && onRefresh) {
26
+ onRefresh();
27
+ }
28
+ }
29
+ catch (error) {
30
+ console.error('Error clearing notifications:', error);
31
+ }
32
+ };
33
+ const deleteNotification = async (id) => {
34
+ try {
35
+ const response = await fetch(`/devserver/api/stores/notifications/${id}`, {
36
+ method: 'DELETE',
37
+ });
38
+ if (response.ok && onRefresh) {
39
+ onRefresh();
40
+ }
41
+ }
42
+ catch (error) {
43
+ console.error('Error deleting notification:', error);
44
+ }
45
+ };
46
+ const formatTimestamp = (timestamp) => {
47
+ return new Date(timestamp).toLocaleString();
48
+ };
49
+ const getStatusIcon = (status) => {
50
+ switch (status) {
51
+ case 'info': return 'ℹ️';
52
+ case 'success': return '✅';
53
+ case 'warn': return '⚠️';
54
+ case 'error': return '❌';
55
+ default: return 'ℹ️';
56
+ }
57
+ };
58
+ // Sort notifications by timestamp (newest first)
59
+ const sortedNotifications = [...notifications].sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
60
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "notification-viewer", children: [(0, jsx_runtime_1.jsxs)("div", { className: "notification-controls", children: [(0, jsx_runtime_1.jsx)("button", { className: "clear-notifications-btn", onClick: clearAllNotifications, children: "Clear All" }), onRefresh && ((0, jsx_runtime_1.jsx)("button", { className: "refresh-notifications-btn", onClick: onRefresh, children: "Refresh" }))] }), (0, jsx_runtime_1.jsx)("div", { className: "notification-list", children: sortedNotifications.length > 0 ? (sortedNotifications.map((notification) => {
61
+ const isExpanded = expandedNotifications.has(notification.id);
62
+ return ((0, jsx_runtime_1.jsxs)("div", { className: `notification-item notification-${notification.status}`, children: [(0, jsx_runtime_1.jsxs)("div", { className: "notification-header", onClick: () => toggleNotification(notification.id), children: [(0, jsx_runtime_1.jsx)("div", { className: "notification-main", children: (0, jsx_runtime_1.jsxs)("div", { className: "notification-single-line", children: [(0, jsx_runtime_1.jsx)("span", { className: "notification-icon", children: getStatusIcon(notification.status) }), (0, jsx_runtime_1.jsx)("span", { className: "notification-activity", children: notification.activity }), (0, jsx_runtime_1.jsx)("span", { className: "notification-separator", children: "\u2022" }), (0, jsx_runtime_1.jsx)("span", { className: "notification-title", children: notification.title }), (0, jsx_runtime_1.jsx)("span", { className: "notification-separator", children: "\u2022" }), (0, jsx_runtime_1.jsx)("span", { className: "notification-summary", children: notification.summary }), (0, jsx_runtime_1.jsx)("span", { className: "notification-timestamp", children: formatTimestamp(notification.timestamp) })] }) }), (0, jsx_runtime_1.jsxs)("div", { className: "notification-actions", children: [(0, jsx_runtime_1.jsx)("button", { className: "delete-notification-btn", onClick: (e) => {
63
+ e.stopPropagation();
64
+ deleteNotification(notification.id);
65
+ }, title: "Delete notification", children: "\uD83D\uDDD1\uFE0F" }), (0, jsx_runtime_1.jsx)("span", { className: "expand-icon", children: isExpanded ? '▼' : '▶' })] })] }), isExpanded && notification.details && ((0, jsx_runtime_1.jsx)("div", { className: "notification-details", children: (0, jsx_runtime_1.jsx)("pre", { children: notification.details }) }))] }, notification.id));
66
+ })) : ((0, jsx_runtime_1.jsx)("div", { className: "no-notifications", children: "No notifications yet" })) })] }));
67
+ };
68
+ exports.default = NotificationViewer;
69
+ //# sourceMappingURL=NotificationViewer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotificationViewer.js","sourceRoot":"","sources":["../../../../src/ui/components/NotificationViewer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ interface SecretsStoreViewerProps {
3
+ secrets: {
4
+ [sectionName: string]: {
5
+ [fieldName: string]: any;
6
+ };
7
+ };
8
+ onUpdate: (updatedSecrets: any) => void;
9
+ }
10
+ declare const SecretsStoreViewer: React.FC<SecretsStoreViewerProps>;
11
+ export default SecretsStoreViewer;