@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.
- package/README.md +165 -0
- package/dist/package.json +104 -0
- package/dist/public/bundle.da978bb5437cd82e6d37.js +3 -0
- package/dist/public/bundle.da978bb5437cd82e6d37.js.LICENSE.txt +49 -0
- package/dist/public/bundle.da978bb5437cd82e6d37.js.map +1 -0
- package/dist/public/index.html +1 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +88 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/executor/FunctionExecutor.d.ts +56 -0
- package/dist/src/executor/FunctionExecutor.js +175 -0
- package/dist/src/executor/FunctionExecutor.js.map +1 -0
- package/dist/src/executor/JobExecutor.d.ts +60 -0
- package/dist/src/executor/JobExecutor.js +203 -0
- package/dist/src/executor/JobExecutor.js.map +1 -0
- package/dist/src/executor/LifecycleExecutor.d.ts +45 -0
- package/dist/src/executor/LifecycleExecutor.js +153 -0
- package/dist/src/executor/LifecycleExecutor.js.map +1 -0
- package/dist/src/executor/watcher.d.ts +63 -0
- package/dist/src/executor/watcher.js +213 -0
- package/dist/src/executor/watcher.js.map +1 -0
- package/dist/src/functions/hello.d.ts +4 -0
- package/dist/src/functions/hello.js +8 -0
- package/dist/src/functions/hello.js.map +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +9 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/jobs/dailyJob.d.ts +4 -0
- package/dist/src/jobs/dailyJob.js +8 -0
- package/dist/src/jobs/dailyJob.js.map +1 -0
- package/dist/src/local_engine/LocalNotifier.d.ts +10 -0
- package/dist/src/local_engine/LocalNotifier.js +26 -0
- package/dist/src/local_engine/LocalNotifier.js.map +1 -0
- package/dist/src/local_engine/local-engine-child-base.d.ts +79 -0
- package/dist/src/local_engine/local-engine-child-base.js +304 -0
- package/dist/src/local_engine/local-engine-child-base.js.map +1 -0
- package/dist/src/local_engine/local-engine-client.d.ts +80 -0
- package/dist/src/local_engine/local-engine-client.js +333 -0
- package/dist/src/local_engine/local-engine-client.js.map +1 -0
- package/dist/src/local_engine/local-engine-types.d.ts +132 -0
- package/dist/src/local_engine/local-engine-types.js +6 -0
- package/dist/src/local_engine/local-engine-types.js.map +1 -0
- package/dist/src/local_engine/local-engine-unified.d.ts +40 -0
- package/dist/src/local_engine/local-engine-unified.js +406 -0
- package/dist/src/local_engine/local-engine-unified.js.map +1 -0
- package/dist/src/local_engine/local-engine-utils.d.ts +70 -0
- package/dist/src/local_engine/local-engine-utils.js +192 -0
- package/dist/src/local_engine/local-engine-utils.js.map +1 -0
- package/dist/src/local_engine/localSDKConfig.d.ts +30 -0
- package/dist/src/local_engine/localSDKConfig.js +392 -0
- package/dist/src/local_engine/localSDKConfig.js.map +1 -0
- package/dist/src/local_engine/storage/LocalConfigStore.d.ts +56 -0
- package/dist/src/local_engine/storage/LocalConfigStore.js +129 -0
- package/dist/src/local_engine/storage/LocalConfigStore.js.map +1 -0
- package/dist/src/local_engine/storage/LocalJobStore.d.ts +110 -0
- package/dist/src/local_engine/storage/LocalJobStore.js +239 -0
- package/dist/src/local_engine/storage/LocalJobStore.js.map +1 -0
- package/dist/src/local_engine/storage/LocalKVStore.d.ts +105 -0
- package/dist/src/local_engine/storage/LocalKVStore.js +1002 -0
- package/dist/src/local_engine/storage/LocalKVStore.js.map +1 -0
- package/dist/src/local_engine/storage/LocalNotificationStore.d.ts +27 -0
- package/dist/src/local_engine/storage/LocalNotificationStore.js +125 -0
- package/dist/src/local_engine/storage/LocalNotificationStore.js.map +1 -0
- package/dist/src/local_engine/storage/LocalSecretsStore.d.ts +114 -0
- package/dist/src/local_engine/storage/LocalSecretsStore.js +319 -0
- package/dist/src/local_engine/storage/LocalSecretsStore.js.map +1 -0
- package/dist/src/local_engine/storage/LocalSettingsStore.d.ts +161 -0
- package/dist/src/local_engine/storage/LocalSettingsStore.js +417 -0
- package/dist/src/local_engine/storage/LocalSettingsStore.js.map +1 -0
- package/dist/src/local_engine/storage/NumberSet.d.ts +21 -0
- package/dist/src/local_engine/storage/NumberSet.js +32 -0
- package/dist/src/local_engine/storage/NumberSet.js.map +1 -0
- package/dist/src/local_engine/storage/StringSet.d.ts +21 -0
- package/dist/src/local_engine/storage/StringSet.js +32 -0
- package/dist/src/local_engine/storage/StringSet.js.map +1 -0
- package/dist/src/local_engine/types.d.ts +52 -0
- package/dist/src/local_engine/types.js +6 -0
- package/dist/src/local_engine/types.js.map +1 -0
- package/dist/src/local_engine/utils.d.ts +31 -0
- package/dist/src/local_engine/utils.js +126 -0
- package/dist/src/local_engine/utils.js.map +1 -0
- package/dist/src/logging/LogManager.d.ts +89 -0
- package/dist/src/logging/LogManager.js +237 -0
- package/dist/src/logging/LogManager.js.map +1 -0
- package/dist/src/server/api/functions.d.ts +7 -0
- package/dist/src/server/api/functions.js +80 -0
- package/dist/src/server/api/functions.js.map +1 -0
- package/dist/src/server/api/jobs.d.ts +8 -0
- package/dist/src/server/api/jobs.js +242 -0
- package/dist/src/server/api/jobs.js.map +1 -0
- package/dist/src/server/api/lifecycle.d.ts +6 -0
- package/dist/src/server/api/lifecycle.js +73 -0
- package/dist/src/server/api/lifecycle.js.map +1 -0
- package/dist/src/server/api/settings.d.ts +6 -0
- package/dist/src/server/api/settings.js +117 -0
- package/dist/src/server/api/settings.js.map +1 -0
- package/dist/src/server/api/stores.d.ts +2 -0
- package/dist/src/server/api/stores.js +341 -0
- package/dist/src/server/api/stores.js.map +1 -0
- package/dist/src/server/api/v1.d.ts +10 -0
- package/dist/src/server/api/v1.js +711 -0
- package/dist/src/server/api/v1.js.map +1 -0
- package/dist/src/server/api.d.ts +8 -0
- package/dist/src/server/api.js +154 -0
- package/dist/src/server/api.js.map +1 -0
- package/dist/src/server/app-discovery.d.ts +5 -0
- package/dist/src/server/app-discovery.js +81 -0
- package/dist/src/server/app-discovery.js.map +1 -0
- package/dist/src/server/config.d.ts +21 -0
- package/dist/src/server/config.js +100 -0
- package/dist/src/server/config.js.map +1 -0
- package/dist/src/server/websocket.d.ts +0 -0
- package/dist/src/server/websocket.js +2 -0
- package/dist/src/server/websocket.js.map +1 -0
- package/dist/src/server.d.ts +2 -0
- package/dist/src/server.js +546 -0
- package/dist/src/server.js.map +1 -0
- package/dist/src/types/app.d.ts +155 -0
- package/dist/src/types/app.js +24 -0
- package/dist/src/types/app.js.map +1 -0
- package/dist/src/types/kvstore.d.ts +320 -0
- package/dist/src/types/kvstore.js +5 -0
- package/dist/src/types/kvstore.js.map +1 -0
- package/dist/src/ui/components/App.d.ts +6 -0
- package/dist/src/ui/components/App.js +255 -0
- package/dist/src/ui/components/App.js.map +1 -0
- package/dist/src/ui/components/FunctionsView.d.ts +6 -0
- package/dist/src/ui/components/FunctionsView.js +217 -0
- package/dist/src/ui/components/FunctionsView.js.map +1 -0
- package/dist/src/ui/components/JobsView.d.ts +6 -0
- package/dist/src/ui/components/JobsView.js +257 -0
- package/dist/src/ui/components/JobsView.js.map +1 -0
- package/dist/src/ui/components/KVStoreViewer.d.ts +11 -0
- package/dist/src/ui/components/KVStoreViewer.js +168 -0
- package/dist/src/ui/components/KVStoreViewer.js.map +1 -0
- package/dist/src/ui/components/NotificationViewer.d.ts +16 -0
- package/dist/src/ui/components/NotificationViewer.js +69 -0
- package/dist/src/ui/components/NotificationViewer.js.map +1 -0
- package/dist/src/ui/components/SecretsStoreViewer.d.ts +11 -0
- package/dist/src/ui/components/SecretsStoreViewer.js +179 -0
- package/dist/src/ui/components/SecretsStoreViewer.js.map +1 -0
- package/dist/src/ui/components/SettingsStoreViewer.d.ts +24 -0
- package/dist/src/ui/components/SettingsStoreViewer.js +132 -0
- package/dist/src/ui/components/SettingsStoreViewer.js.map +1 -0
- package/dist/src/ui/components/StoreViewer.d.ts +16 -0
- package/dist/src/ui/components/StoreViewer.js +86 -0
- package/dist/src/ui/components/StoreViewer.js.map +1 -0
- package/dist/src/ui/components/TabbedConsole.d.ts +15 -0
- package/dist/src/ui/components/TabbedConsole.js +93 -0
- package/dist/src/ui/components/TabbedConsole.js.map +1 -0
- package/dist/src/ui/components/common/DataTree.d.ts +15 -0
- package/dist/src/ui/components/common/DataTree.js +95 -0
- package/dist/src/ui/components/common/DataTree.js.map +1 -0
- package/dist/src/ui/components/common/EyeIcon.d.ts +11 -0
- package/dist/src/ui/components/common/EyeIcon.js +11 -0
- package/dist/src/ui/components/common/EyeIcon.js.map +1 -0
- package/dist/src/ui/index.d.ts +1 -0
- package/dist/src/ui/index.js +20 -0
- package/dist/src/ui/index.js.map +1 -0
- package/package.json +104 -0
|
@@ -0,0 +1,333 @@
|
|
|
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.LocalEngineClient = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* IPC Client for managing child process communication
|
|
9
|
+
*/
|
|
10
|
+
const child_process_1 = require("child_process");
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
const local_engine_utils_1 = require("./local-engine-utils");
|
|
13
|
+
class LocalEngineClient {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.connections = new Map();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Get or create a connection for the specified app
|
|
19
|
+
*/
|
|
20
|
+
async getConnection(appConfig, appDir) {
|
|
21
|
+
const connectionKey = appConfig.manifest.meta?.app_id || 'unknown';
|
|
22
|
+
let connection = this.connections.get(connectionKey);
|
|
23
|
+
// Check if existing connection is healthy
|
|
24
|
+
if (connection && (0, local_engine_utils_1.isConnectionHealthy)(connection)) {
|
|
25
|
+
connection.lastActivity = Date.now();
|
|
26
|
+
return connection;
|
|
27
|
+
}
|
|
28
|
+
// Clean up old connection if it exists
|
|
29
|
+
if (connection) {
|
|
30
|
+
await this.closeConnection(connectionKey);
|
|
31
|
+
}
|
|
32
|
+
// Create new connection
|
|
33
|
+
connection = await this.createConnection(appConfig, appDir);
|
|
34
|
+
this.connections.set(connectionKey, connection);
|
|
35
|
+
return connection;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Create a new IPC connection using the unified wrapper
|
|
39
|
+
*/
|
|
40
|
+
async createConnection(appConfig, appDir) {
|
|
41
|
+
const wrapperScript = path_1.default.join(__dirname, 'local-engine-unified.js');
|
|
42
|
+
console.log(`[IPC Client] Starting unified wrapper for app ${appConfig.manifest.meta?.app_id}: ${wrapperScript}`);
|
|
43
|
+
const childProcess = (0, child_process_1.spawn)('node', [wrapperScript], {
|
|
44
|
+
cwd: appDir,
|
|
45
|
+
stdio: ['pipe', 'pipe', 'pipe', 'ipc'],
|
|
46
|
+
env: { ...process.env }
|
|
47
|
+
});
|
|
48
|
+
const connection = {
|
|
49
|
+
process: childProcess,
|
|
50
|
+
ready: false,
|
|
51
|
+
pendingRequests: new Map(),
|
|
52
|
+
lastActivity: Date.now()
|
|
53
|
+
};
|
|
54
|
+
// Set up message handling
|
|
55
|
+
this.setupMessageHandlers(connection);
|
|
56
|
+
// Set up error handling
|
|
57
|
+
this.setupErrorHandlers(connection);
|
|
58
|
+
// Initialize the child process
|
|
59
|
+
await this.initializeChild(connection, appConfig, appDir);
|
|
60
|
+
return connection;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Set up message handlers for a connection
|
|
64
|
+
*/
|
|
65
|
+
setupMessageHandlers(connection) {
|
|
66
|
+
connection.process.on('message', (message) => {
|
|
67
|
+
try {
|
|
68
|
+
(0, local_engine_utils_1.logIPCMessage)('RECV', message, '[IPC Client]');
|
|
69
|
+
if (!(0, local_engine_utils_1.validateMessage)(message)) {
|
|
70
|
+
console.error('[IPC Client] Received invalid message:', message);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
this.handleChildMessage(connection, message);
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
console.error('[IPC Client] Error handling child message:', error);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
// Handle stdout/stderr for debugging
|
|
80
|
+
connection.process.stdout?.on('data', (data) => {
|
|
81
|
+
const output = data.toString().trim();
|
|
82
|
+
if (output) {
|
|
83
|
+
console.log(`[IPC Child STDOUT] ${output}`);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
connection.process.stderr?.on('data', (data) => {
|
|
87
|
+
const error = data.toString().trim();
|
|
88
|
+
if (error) {
|
|
89
|
+
console.error(`[IPC Child STDERR] ${error}`);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Set up error handlers for a connection
|
|
95
|
+
*/
|
|
96
|
+
setupErrorHandlers(connection) {
|
|
97
|
+
connection.process.on('error', (error) => {
|
|
98
|
+
console.error('[IPC Client] Child process error:', error);
|
|
99
|
+
this.handleConnectionError(connection, error);
|
|
100
|
+
});
|
|
101
|
+
connection.process.on('exit', (code, signal) => {
|
|
102
|
+
console.log(`[IPC Client] Child process exited with code ${code}, signal ${signal}`);
|
|
103
|
+
this.handleConnectionExit(connection, code, signal);
|
|
104
|
+
});
|
|
105
|
+
connection.process.on('close', () => {
|
|
106
|
+
console.log('[IPC Client] Child process closed');
|
|
107
|
+
connection.ready = false;
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Handle messages from child process
|
|
112
|
+
*/
|
|
113
|
+
handleChildMessage(connection, message) {
|
|
114
|
+
connection.lastActivity = Date.now();
|
|
115
|
+
switch (message.type) {
|
|
116
|
+
case 'ready':
|
|
117
|
+
this.handleReadyMessage(connection);
|
|
118
|
+
break;
|
|
119
|
+
case 'progress':
|
|
120
|
+
this.handleProgressMessage(connection, message);
|
|
121
|
+
break;
|
|
122
|
+
case 'log':
|
|
123
|
+
this.handleLogMessage(connection, message);
|
|
124
|
+
break;
|
|
125
|
+
case 'success':
|
|
126
|
+
this.handleSuccessMessage(connection, message);
|
|
127
|
+
break;
|
|
128
|
+
case 'error':
|
|
129
|
+
this.handleErrorMessage(connection, message);
|
|
130
|
+
break;
|
|
131
|
+
default:
|
|
132
|
+
console.warn(`[IPC Client] Unknown message type: ${message.type}`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Handle ready message from child
|
|
137
|
+
*/
|
|
138
|
+
handleReadyMessage(connection) {
|
|
139
|
+
console.log('[IPC Client] Child process is ready');
|
|
140
|
+
connection.ready = true;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Handle progress message from child
|
|
144
|
+
*/
|
|
145
|
+
handleProgressMessage(connection, message) {
|
|
146
|
+
const { requestId, message: progressMsg, progress } = message.data;
|
|
147
|
+
console.log(`[IPC Client] Progress for ${requestId}: ${progressMsg} (${progress || 'N/A'}%)`);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Handle log message from child
|
|
151
|
+
*/
|
|
152
|
+
handleLogMessage(connection, message) {
|
|
153
|
+
const { level, message: logMsg, requestId } = message.data;
|
|
154
|
+
const prefix = requestId ? `[${requestId.slice(0, 8)}]` : '[IPC Child]';
|
|
155
|
+
console.log(`${prefix} [${level.toUpperCase()}] ${logMsg}`);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Handle success message from child
|
|
159
|
+
*/
|
|
160
|
+
handleSuccessMessage(connection, message) {
|
|
161
|
+
const { requestId, result } = message.data;
|
|
162
|
+
const pendingRequest = connection.pendingRequests.get(requestId);
|
|
163
|
+
if (pendingRequest) {
|
|
164
|
+
(0, local_engine_utils_1.cleanupPendingRequest)(pendingRequest);
|
|
165
|
+
connection.pendingRequests.delete(requestId);
|
|
166
|
+
pendingRequest.resolve(result);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
console.warn(`[IPC Client] Received success for unknown request: ${requestId}`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Handle error message from child
|
|
174
|
+
*/
|
|
175
|
+
handleErrorMessage(connection, message) {
|
|
176
|
+
const { requestId, error: errorMsg, stack } = message.data;
|
|
177
|
+
const pendingRequest = connection.pendingRequests.get(requestId);
|
|
178
|
+
if (pendingRequest) {
|
|
179
|
+
(0, local_engine_utils_1.cleanupPendingRequest)(pendingRequest);
|
|
180
|
+
connection.pendingRequests.delete(requestId);
|
|
181
|
+
const error = (0, local_engine_utils_1.deserializeError)({ message: errorMsg, stack });
|
|
182
|
+
pendingRequest.reject(error);
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
console.warn(`[IPC Client] Received error for unknown request: ${requestId} - ${errorMsg}`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Handle connection errors
|
|
190
|
+
*/
|
|
191
|
+
handleConnectionError(connection, error) {
|
|
192
|
+
console.error('[IPC Client] Connection error:', error);
|
|
193
|
+
// Reject all pending requests
|
|
194
|
+
for (const [requestId, pendingRequest] of connection.pendingRequests) {
|
|
195
|
+
(0, local_engine_utils_1.cleanupPendingRequest)(pendingRequest);
|
|
196
|
+
pendingRequest.reject(new Error(`Connection error: ${error.message}`));
|
|
197
|
+
}
|
|
198
|
+
connection.pendingRequests.clear();
|
|
199
|
+
connection.ready = false;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Handle connection exit
|
|
203
|
+
*/
|
|
204
|
+
handleConnectionExit(connection, code, signal) {
|
|
205
|
+
// Reject all pending requests
|
|
206
|
+
for (const [requestId, pendingRequest] of connection.pendingRequests) {
|
|
207
|
+
(0, local_engine_utils_1.cleanupPendingRequest)(pendingRequest);
|
|
208
|
+
pendingRequest.reject(new Error(`Child process exited with code ${code}, signal ${signal}`));
|
|
209
|
+
}
|
|
210
|
+
connection.pendingRequests.clear();
|
|
211
|
+
connection.ready = false;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Initialize child process
|
|
215
|
+
*/
|
|
216
|
+
async initializeChild(connection, appConfig, appDir) {
|
|
217
|
+
return new Promise((resolve, reject) => {
|
|
218
|
+
const timeout = setTimeout(() => {
|
|
219
|
+
reject(new Error('Child process initialization timeout'));
|
|
220
|
+
}, local_engine_utils_1.IPC_CONFIG.DEFAULT_TIMEOUT);
|
|
221
|
+
const checkReady = () => {
|
|
222
|
+
if (connection.ready) {
|
|
223
|
+
clearTimeout(timeout);
|
|
224
|
+
resolve();
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
setTimeout(checkReady, 100);
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
// Send initialization message
|
|
231
|
+
const initMessage = {
|
|
232
|
+
...(0, local_engine_utils_1.createBaseMessage)('initialize'),
|
|
233
|
+
type: 'initialize',
|
|
234
|
+
data: { appConfig, appDir }
|
|
235
|
+
};
|
|
236
|
+
(0, local_engine_utils_1.sendIPCMessage)(connection.process, initMessage);
|
|
237
|
+
(0, local_engine_utils_1.logIPCMessage)('SEND', initMessage, '[IPC Client]');
|
|
238
|
+
checkReady();
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Send a request and wait for response
|
|
243
|
+
*/
|
|
244
|
+
async sendRequest(connection, message, timeoutMs = local_engine_utils_1.IPC_CONFIG.DEFAULT_TIMEOUT) {
|
|
245
|
+
return new Promise((resolve, reject) => {
|
|
246
|
+
const pendingRequest = (0, local_engine_utils_1.createPendingRequest)(message.id, message.type === 'execute_function' ? 'function' : 'lifecycle', resolve, reject, timeoutMs);
|
|
247
|
+
// Set up timeout
|
|
248
|
+
pendingRequest.timeout = (0, local_engine_utils_1.createRequestTimeout)(message.id, timeoutMs, reject, () => connection.pendingRequests.delete(message.id));
|
|
249
|
+
// Track the request
|
|
250
|
+
connection.pendingRequests.set(message.id, pendingRequest);
|
|
251
|
+
// Send the message
|
|
252
|
+
(0, local_engine_utils_1.logIPCMessage)('SEND', message, '[IPC Client]');
|
|
253
|
+
if (!(0, local_engine_utils_1.sendIPCMessage)(connection.process, message)) {
|
|
254
|
+
(0, local_engine_utils_1.cleanupPendingRequest)(pendingRequest);
|
|
255
|
+
connection.pendingRequests.delete(message.id);
|
|
256
|
+
reject(new Error('Failed to send IPC message'));
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Execute a function using IPC
|
|
262
|
+
*/
|
|
263
|
+
async executeFunction(request, appConfig, appDir) {
|
|
264
|
+
const connection = await this.getConnection(appConfig, appDir);
|
|
265
|
+
const message = {
|
|
266
|
+
...(0, local_engine_utils_1.createBaseMessage)('execute_function'),
|
|
267
|
+
type: 'execute_function',
|
|
268
|
+
data: request
|
|
269
|
+
};
|
|
270
|
+
return this.sendRequest(connection, message);
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Execute a lifecycle method using IPC
|
|
274
|
+
*/
|
|
275
|
+
async executeLifecycle(request, appConfig, appDir) {
|
|
276
|
+
const connection = await this.getConnection(appConfig, appDir);
|
|
277
|
+
const message = {
|
|
278
|
+
...(0, local_engine_utils_1.createBaseMessage)('execute_lifecycle'),
|
|
279
|
+
type: 'execute_lifecycle',
|
|
280
|
+
data: request
|
|
281
|
+
};
|
|
282
|
+
return this.sendRequest(connection, message);
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Execute a job using IPC
|
|
286
|
+
*/
|
|
287
|
+
async executeJob(request, appConfig, appDir) {
|
|
288
|
+
const connection = await this.getConnection(appConfig, appDir);
|
|
289
|
+
const message = {
|
|
290
|
+
...(0, local_engine_utils_1.createBaseMessage)('execute_job'),
|
|
291
|
+
type: 'execute_job',
|
|
292
|
+
data: request
|
|
293
|
+
};
|
|
294
|
+
return this.sendRequest(connection, message);
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Close a specific connection
|
|
298
|
+
*/
|
|
299
|
+
async closeConnection(connectionKey) {
|
|
300
|
+
const connection = this.connections.get(connectionKey);
|
|
301
|
+
if (!connection)
|
|
302
|
+
return;
|
|
303
|
+
try {
|
|
304
|
+
// Send shutdown message
|
|
305
|
+
const shutdownMessage = {
|
|
306
|
+
...(0, local_engine_utils_1.createBaseMessage)('shutdown'),
|
|
307
|
+
type: 'shutdown'
|
|
308
|
+
};
|
|
309
|
+
(0, local_engine_utils_1.sendIPCMessage)(connection.process, shutdownMessage);
|
|
310
|
+
// Wait a bit for graceful shutdown
|
|
311
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
312
|
+
// Force kill if still running
|
|
313
|
+
if (!connection.process.killed) {
|
|
314
|
+
connection.process.kill('SIGTERM');
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
catch (error) {
|
|
318
|
+
console.warn(`[IPC Client] Error during connection shutdown: ${error}`);
|
|
319
|
+
}
|
|
320
|
+
finally {
|
|
321
|
+
this.connections.delete(connectionKey);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Close all connections
|
|
326
|
+
*/
|
|
327
|
+
async closeAllConnections() {
|
|
328
|
+
const closePromises = Array.from(this.connections.keys()).map(key => this.closeConnection(key));
|
|
329
|
+
await Promise.all(closePromises);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
exports.LocalEngineClient = LocalEngineClient;
|
|
333
|
+
//# sourceMappingURL=local-engine-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-engine-client.js","sourceRoot":"","sources":["../../../src/local_engine/local-engine-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IPC Message Types and Schemas for Parent-Child Communication
|
|
3
|
+
*/
|
|
4
|
+
/// <reference types="node" />
|
|
5
|
+
export interface FunctionExecutionRequest {
|
|
6
|
+
functionId: string;
|
|
7
|
+
method: string;
|
|
8
|
+
fullpath: string;
|
|
9
|
+
path: string;
|
|
10
|
+
params: Record<string, any>;
|
|
11
|
+
headers: [string, string][];
|
|
12
|
+
body: any;
|
|
13
|
+
}
|
|
14
|
+
export interface LifecycleExecutionRequest {
|
|
15
|
+
method: string;
|
|
16
|
+
params?: any;
|
|
17
|
+
scriptPath: string;
|
|
18
|
+
appDir: string;
|
|
19
|
+
}
|
|
20
|
+
export interface JobExecutionRequest {
|
|
21
|
+
jobId: string;
|
|
22
|
+
parameters?: Record<string, any>;
|
|
23
|
+
dataSyncId?: string;
|
|
24
|
+
sourceKey?: string;
|
|
25
|
+
executionId: string;
|
|
26
|
+
appDir: string;
|
|
27
|
+
}
|
|
28
|
+
export interface AppConfig {
|
|
29
|
+
manifest: any;
|
|
30
|
+
path: string;
|
|
31
|
+
isBuilt: boolean;
|
|
32
|
+
isValid: boolean;
|
|
33
|
+
}
|
|
34
|
+
export interface IPCMessage {
|
|
35
|
+
id: string;
|
|
36
|
+
type: string;
|
|
37
|
+
timestamp: number;
|
|
38
|
+
}
|
|
39
|
+
export interface InitializeMessage extends IPCMessage {
|
|
40
|
+
type: 'initialize';
|
|
41
|
+
data: {
|
|
42
|
+
appConfig: AppConfig;
|
|
43
|
+
appDir: string;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export interface ExecuteFunctionMessage extends IPCMessage {
|
|
47
|
+
type: 'execute_function';
|
|
48
|
+
data: FunctionExecutionRequest;
|
|
49
|
+
}
|
|
50
|
+
export interface ExecuteLifecycleMessage extends IPCMessage {
|
|
51
|
+
type: 'execute_lifecycle';
|
|
52
|
+
data: LifecycleExecutionRequest;
|
|
53
|
+
}
|
|
54
|
+
export interface ExecuteJobMessage extends IPCMessage {
|
|
55
|
+
type: 'execute_job';
|
|
56
|
+
data: JobExecutionRequest;
|
|
57
|
+
}
|
|
58
|
+
export interface ShutdownMessage extends IPCMessage {
|
|
59
|
+
type: 'shutdown';
|
|
60
|
+
}
|
|
61
|
+
export interface CancelMessage extends IPCMessage {
|
|
62
|
+
type: 'cancel';
|
|
63
|
+
data: {
|
|
64
|
+
cancelId: string;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export type ParentMessage = InitializeMessage | ExecuteFunctionMessage | ExecuteLifecycleMessage | ExecuteJobMessage | ShutdownMessage | CancelMessage;
|
|
68
|
+
export interface ReadyMessage extends IPCMessage {
|
|
69
|
+
type: 'ready';
|
|
70
|
+
}
|
|
71
|
+
export interface ProgressMessage extends IPCMessage {
|
|
72
|
+
type: 'progress';
|
|
73
|
+
data: {
|
|
74
|
+
requestId: string;
|
|
75
|
+
message: string;
|
|
76
|
+
progress?: number;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
export interface LogMessage extends IPCMessage {
|
|
80
|
+
type: 'log';
|
|
81
|
+
data: {
|
|
82
|
+
requestId?: string;
|
|
83
|
+
level: 'debug' | 'info' | 'warn' | 'error';
|
|
84
|
+
message: string;
|
|
85
|
+
timestamp: number;
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
export interface SuccessMessage extends IPCMessage {
|
|
89
|
+
type: 'success';
|
|
90
|
+
data: {
|
|
91
|
+
requestId: string;
|
|
92
|
+
result: any;
|
|
93
|
+
executionTime: number;
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
export interface ErrorMessage extends IPCMessage {
|
|
97
|
+
type: 'error';
|
|
98
|
+
data: {
|
|
99
|
+
requestId: string;
|
|
100
|
+
error: string;
|
|
101
|
+
stack?: string;
|
|
102
|
+
executionTime: number;
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
export interface FunctionSuccessMessage extends SuccessMessage {
|
|
106
|
+
data: SuccessMessage['data'] & {
|
|
107
|
+
status: number;
|
|
108
|
+
headers: [string, string][];
|
|
109
|
+
body: any;
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
export interface LifecycleSuccessMessage extends SuccessMessage {
|
|
113
|
+
data: SuccessMessage['data'] & {
|
|
114
|
+
result: any;
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
export type ChildMessage = ReadyMessage | ProgressMessage | LogMessage | SuccessMessage | ErrorMessage | FunctionSuccessMessage | LifecycleSuccessMessage;
|
|
118
|
+
export type IPCMessageUnion = ParentMessage | ChildMessage;
|
|
119
|
+
export interface PendingRequest {
|
|
120
|
+
id: string;
|
|
121
|
+
type: 'function' | 'lifecycle';
|
|
122
|
+
startTime: number;
|
|
123
|
+
resolve: (result: any) => void;
|
|
124
|
+
reject: (error: Error) => void;
|
|
125
|
+
timeout?: NodeJS.Timeout;
|
|
126
|
+
}
|
|
127
|
+
export interface IPCConnection {
|
|
128
|
+
process: any;
|
|
129
|
+
ready: boolean;
|
|
130
|
+
pendingRequests: Map<string, PendingRequest>;
|
|
131
|
+
lastActivity: number;
|
|
132
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-engine-types.js","sourceRoot":"","sources":["../../../src/local_engine/local-engine-types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Local Engine Unified
|
|
4
|
+
*
|
|
5
|
+
* This script runs in the app's Node.js process context and executes both OCP functions
|
|
6
|
+
* and lifecycle methods using IPC communication with the parent process.
|
|
7
|
+
* This is a single, persistent process that handles all app execution requests.
|
|
8
|
+
*/
|
|
9
|
+
import { LocalEngineChildBase } from './local-engine-child-base';
|
|
10
|
+
import { AppConfig, FunctionExecutionRequest, LifecycleExecutionRequest, JobExecutionRequest } from './local-engine-types';
|
|
11
|
+
export declare class LocalEngineUnified extends LocalEngineChildBase {
|
|
12
|
+
private sdkComponents;
|
|
13
|
+
private configureLocalSDKs;
|
|
14
|
+
private cleanUpLocalSDKs;
|
|
15
|
+
private LocalSettingsStore;
|
|
16
|
+
private LocalConfigStore;
|
|
17
|
+
private isInitialized;
|
|
18
|
+
/**
|
|
19
|
+
* Initialize the wrapper with app configuration
|
|
20
|
+
* This happens once when the process starts
|
|
21
|
+
*/
|
|
22
|
+
protected initialize(appConfig: AppConfig, appDir: string): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Execute a function with the given request
|
|
25
|
+
*/
|
|
26
|
+
protected executeFunction(request: FunctionExecutionRequest): Promise<any>;
|
|
27
|
+
/**
|
|
28
|
+
* Execute a lifecycle method with the given request
|
|
29
|
+
*/
|
|
30
|
+
protected executeLifecycle(request: LifecycleExecutionRequest): Promise<any>;
|
|
31
|
+
/**
|
|
32
|
+
* Execute a job with the given request
|
|
33
|
+
*/
|
|
34
|
+
protected executeJob(request: JobExecutionRequest): Promise<any>;
|
|
35
|
+
/**
|
|
36
|
+
* Clean up SDK configuration
|
|
37
|
+
* This only happens when the process is shutting down
|
|
38
|
+
*/
|
|
39
|
+
protected cleanup(): Promise<void>;
|
|
40
|
+
}
|