@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,192 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IPC_CONFIG = exports.isConnectionHealthy = exports.deserializeError = exports.serializeError = exports.cleanupPendingRequest = exports.createPendingRequest = exports.logIPCMessage = exports.safeSerialize = exports.createRequestTimeout = exports.sendIPCMessage = exports.validateMessage = exports.createBaseMessage = exports.generateMessageId = void 0;
4
+ /**
5
+ * IPC Communication Utilities
6
+ */
7
+ const crypto_1 = require("crypto");
8
+ /**
9
+ * Generate a unique correlation ID for IPC messages
10
+ */
11
+ function generateMessageId() {
12
+ return (0, crypto_1.randomUUID)();
13
+ }
14
+ exports.generateMessageId = generateMessageId;
15
+ /**
16
+ * Create a base IPC message with common fields
17
+ */
18
+ function createBaseMessage(type) {
19
+ return {
20
+ id: generateMessageId(),
21
+ type,
22
+ timestamp: Date.now()
23
+ };
24
+ }
25
+ exports.createBaseMessage = createBaseMessage;
26
+ /**
27
+ * Validate that a message conforms to the IPC schema
28
+ */
29
+ function validateMessage(message) {
30
+ return (typeof message === 'object' &&
31
+ message !== null &&
32
+ typeof message.id === 'string' &&
33
+ typeof message.type === 'string' &&
34
+ typeof message.timestamp === 'number');
35
+ }
36
+ exports.validateMessage = validateMessage;
37
+ /**
38
+ * Send a message through IPC with error handling
39
+ */
40
+ function sendIPCMessage(process, message) {
41
+ try {
42
+ if (process.send) {
43
+ process.send(message);
44
+ return true;
45
+ }
46
+ else {
47
+ console.error('[IPC] Process does not support IPC communication');
48
+ return false;
49
+ }
50
+ }
51
+ catch (error) {
52
+ console.error('[IPC] Failed to send message:', error);
53
+ return false;
54
+ }
55
+ }
56
+ exports.sendIPCMessage = sendIPCMessage;
57
+ /**
58
+ * Create a timeout for pending requests
59
+ */
60
+ function createRequestTimeout(requestId, timeoutMs, reject, cleanup) {
61
+ return setTimeout(() => {
62
+ cleanup();
63
+ reject(new Error(`IPC request ${requestId} timed out after ${timeoutMs}ms`));
64
+ }, timeoutMs);
65
+ }
66
+ exports.createRequestTimeout = createRequestTimeout;
67
+ /**
68
+ * Safe JSON serialization for IPC messages
69
+ */
70
+ function safeSerialize(data) {
71
+ try {
72
+ // Handle special cases that don't serialize well
73
+ return JSON.parse(JSON.stringify(data, (key, value) => {
74
+ // Convert Uint8Array to regular array for serialization
75
+ if (value instanceof Uint8Array) {
76
+ return Array.from(value);
77
+ }
78
+ // Handle functions by converting to string representation
79
+ if (typeof value === 'function') {
80
+ return `[Function: ${value.name || 'anonymous'}]`;
81
+ }
82
+ // Handle circular references
83
+ if (typeof value === 'object' && value !== null) {
84
+ if (value.constructor && value.constructor.name !== 'Object' && value.constructor.name !== 'Array') {
85
+ return `[${value.constructor.name}]`;
86
+ }
87
+ }
88
+ return value;
89
+ }));
90
+ }
91
+ catch (error) {
92
+ console.warn('[IPC] Failed to serialize data, using fallback:', error);
93
+ return { __serialization_error: String(data) };
94
+ }
95
+ }
96
+ exports.safeSerialize = safeSerialize;
97
+ /**
98
+ * Log IPC messages for debugging
99
+ */
100
+ function logIPCMessage(direction, message, prefix = '[IPC]') {
101
+ const arrow = direction === 'SEND' ? '→' : '←';
102
+ console.log(`${prefix} ${arrow} ${message.type} (${message.id.slice(0, 8)})`);
103
+ // Log additional details for certain message types
104
+ if (message.type === 'execute_function' && 'data' in message) {
105
+ console.log(`${prefix} Function: ${message.data.functionId}`);
106
+ }
107
+ else if (message.type === 'execute_lifecycle' && 'data' in message) {
108
+ console.log(`${prefix} Method: ${message.data.method}`);
109
+ }
110
+ else if (message.type === 'error' && 'data' in message) {
111
+ console.log(`${prefix} Error: ${message.data.error}`);
112
+ }
113
+ }
114
+ exports.logIPCMessage = logIPCMessage;
115
+ /**
116
+ * Create a pending request tracker
117
+ */
118
+ function createPendingRequest(id, type, resolve, reject, timeoutMs = 30000) {
119
+ return {
120
+ id,
121
+ type,
122
+ startTime: Date.now(),
123
+ resolve,
124
+ reject,
125
+ timeout: undefined // Will be set by caller
126
+ };
127
+ }
128
+ exports.createPendingRequest = createPendingRequest;
129
+ /**
130
+ * Clean up a pending request and its timeout
131
+ */
132
+ function cleanupPendingRequest(request) {
133
+ if (request.timeout) {
134
+ clearTimeout(request.timeout);
135
+ request.timeout = undefined;
136
+ }
137
+ }
138
+ exports.cleanupPendingRequest = cleanupPendingRequest;
139
+ /**
140
+ * Convert error to serializable format for IPC
141
+ */
142
+ function serializeError(error) {
143
+ if (error instanceof Error) {
144
+ return {
145
+ message: error.message,
146
+ stack: error.stack,
147
+ name: error.name
148
+ };
149
+ }
150
+ else {
151
+ return {
152
+ message: String(error)
153
+ };
154
+ }
155
+ }
156
+ exports.serializeError = serializeError;
157
+ /**
158
+ * Convert serialized error back to Error object
159
+ */
160
+ function deserializeError(errorData) {
161
+ const error = new Error(errorData.message);
162
+ if (errorData.stack) {
163
+ error.stack = errorData.stack;
164
+ }
165
+ if (errorData.name) {
166
+ error.name = errorData.name;
167
+ }
168
+ return error;
169
+ }
170
+ exports.deserializeError = deserializeError;
171
+ /**
172
+ * Check if IPC connection is healthy
173
+ */
174
+ function isConnectionHealthy(connection, maxIdleTime = 300000) {
175
+ return (connection.process &&
176
+ !connection.process.killed &&
177
+ connection.ready &&
178
+ (Date.now() - connection.lastActivity) < maxIdleTime);
179
+ }
180
+ exports.isConnectionHealthy = isConnectionHealthy;
181
+ /**
182
+ * Constants for IPC configuration
183
+ */
184
+ exports.IPC_CONFIG = {
185
+ DEFAULT_TIMEOUT: 30000,
186
+ MAX_IDLE_TIME: 300000,
187
+ HEARTBEAT_INTERVAL: 60000,
188
+ MAX_MESSAGE_SIZE: 10 * 1024 * 1024,
189
+ RETRY_ATTEMPTS: 3,
190
+ RETRY_DELAY: 1000 // 1 second
191
+ };
192
+ //# sourceMappingURL=local-engine-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-engine-utils.js","sourceRoot":"","sources":["../../../src/local_engine/local-engine-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Local Engine - SDK Configuration
3
+ *
4
+ * This file runs inside the app's Node.js process and configures the app's SDK instance
5
+ * for local testing. It uses dynamic require() calls to load the SDK from the app's
6
+ * node_modules, ensuring the same module instance is used by both this configuration
7
+ * code and the app's lifecycle code.
8
+ */
9
+ /**
10
+ * Configure SDKs for local testing environment using the app's SDK instance
11
+ *
12
+ * @param app - App configuration object
13
+ * @param settingsStore - Local settings store instance
14
+ * @param appPath - Path to the app directory (used to resolve app's node_modules)
15
+ * @param installId - Mock install ID for local testing
16
+ * @param configStore - Local config store instance for GUID management
17
+ */
18
+ export declare function configureLocalSDKs(app: any, settingsStore: any, appPath: string, installId?: number, configStore?: any): {
19
+ success: boolean;
20
+ error?: undefined;
21
+ } | {
22
+ success: boolean;
23
+ error: any;
24
+ };
25
+ /**
26
+ * Clean up SDK configuration after app execution
27
+ *
28
+ * @param appPath - Path to the app directory (used to resolve app's node_modules)
29
+ */
30
+ export declare function cleanUpLocalSDKs(appPath: string): void;
@@ -0,0 +1,392 @@
1
+ "use strict";
2
+ /**
3
+ * Local Engine - SDK Configuration
4
+ *
5
+ * This file runs inside the app's Node.js process and configures the app's SDK instance
6
+ * for local testing. It uses dynamic require() calls to load the SDK from the app's
7
+ * node_modules, ensuring the same module instance is used by both this configuration
8
+ * code and the app's lifecycle code.
9
+ */
10
+ var __importDefault = (this && this.__importDefault) || function (mod) {
11
+ return (mod && mod.__esModule) ? mod : { "default": mod };
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.cleanUpLocalSDKs = exports.configureLocalSDKs = void 0;
15
+ const path_1 = __importDefault(require("path"));
16
+ const LocalKVStore_1 = require("./storage/LocalKVStore");
17
+ const LocalSecretsStore_1 = require("./storage/LocalSecretsStore");
18
+ const LocalNotifier_1 = require("./LocalNotifier");
19
+ /**
20
+ * Mock implementation of BaseKVStore for stores we don't need in local testing
21
+ */
22
+ class MockKVStore {
23
+ async get(key, fields) {
24
+ console.warn(`MockKVStore: get(${key}, ${fields || 'all'}) called - returning empty object`);
25
+ return {};
26
+ }
27
+ async put(key, value) {
28
+ console.warn(`MockKVStore: put(${key}, ${JSON.stringify(value)}) called - no-op`);
29
+ return true;
30
+ }
31
+ async patch(key, value) {
32
+ console.warn(`MockKVStore: patch(${key}, ${JSON.stringify(value)}) called - returning empty object`);
33
+ return {};
34
+ }
35
+ async delete(key, fields) {
36
+ console.warn(`MockKVStore: delete(${key}, ${fields || 'all'}) called - no-op`);
37
+ return true;
38
+ }
39
+ async exists(key) {
40
+ console.warn(`MockKVStore: exists(${key}) called - returning false`);
41
+ return false;
42
+ }
43
+ }
44
+ /**
45
+ * Wrapper to make LocalSettingsStore compatible with BaseKVStore interface
46
+ */
47
+ class LocalSettingsStoreWrapper {
48
+ constructor(settingsStore) {
49
+ this.settingsStore = settingsStore;
50
+ }
51
+ async get(key, fields) {
52
+ console.log(`[LocalSettingsStoreWrapper] GET request: key="${key}", fields=${JSON.stringify(fields)}`);
53
+ try {
54
+ // For settings store, key is typically a section name
55
+ const sectionSettings = this.settingsStore.getSectionSettings(key);
56
+ if (fields && fields.length > 0) {
57
+ // Return only requested fields
58
+ const filteredSettings = {};
59
+ fields.forEach((field) => {
60
+ if (sectionSettings[field] !== undefined) {
61
+ filteredSettings[field] = sectionSettings[field];
62
+ }
63
+ });
64
+ console.log(`[LocalSettingsStoreWrapper] GET result: key="${key}" -> ${JSON.stringify(filteredSettings)}`);
65
+ return filteredSettings;
66
+ }
67
+ else {
68
+ // Return all settings for the section
69
+ console.log(`[LocalSettingsStoreWrapper] GET result: key="${key}" -> ${JSON.stringify(sectionSettings)}`);
70
+ return sectionSettings;
71
+ }
72
+ }
73
+ catch (error) {
74
+ console.warn(`[LocalSettingsStoreWrapper] GET failed: key="${key}":`, error);
75
+ return {};
76
+ }
77
+ }
78
+ async put(key, value) {
79
+ console.log(`[LocalSettingsStoreWrapper] PUT request: key="${key}", value=${JSON.stringify(value)}`);
80
+ try {
81
+ // Store the entire value object for the section
82
+ this.settingsStore.updateSectionSettings(key, value);
83
+ console.log(`[LocalSettingsStoreWrapper] PUT completed: updated entire section "${key}"`);
84
+ return true;
85
+ }
86
+ catch (error) {
87
+ console.warn(`[LocalSettingsStoreWrapper] PUT failed: key="${key}", value=${JSON.stringify(value)}:`, error);
88
+ return true;
89
+ }
90
+ }
91
+ async patch(key, value) {
92
+ console.log(`[LocalSettingsStoreWrapper] PATCH request: key="${key}", value=${JSON.stringify(value)}`);
93
+ try {
94
+ const currentSettings = this.settingsStore.getSectionSettings(key);
95
+ // Update only the specified fields
96
+ this.settingsStore.updateSectionSettings(key, value);
97
+ console.log(`[LocalSettingsStoreWrapper] PATCH completed: updated fields in section "${key}"`);
98
+ return currentSettings;
99
+ }
100
+ catch (error) {
101
+ console.warn(`[LocalSettingsStoreWrapper] PATCH failed: key="${key}", value=${JSON.stringify(value)}:`, error);
102
+ return {};
103
+ }
104
+ }
105
+ async delete(key, fields) {
106
+ console.log(`[LocalSettingsStoreWrapper] DELETE request: key="${key}", fields=${JSON.stringify(fields)}`);
107
+ try {
108
+ if (fields && fields.length > 0) {
109
+ // Delete specific fields
110
+ const currentSettings = this.settingsStore.getSectionSettings(key);
111
+ fields.forEach((field) => {
112
+ delete currentSettings[field];
113
+ });
114
+ this.settingsStore.updateSectionSettings(key, currentSettings);
115
+ console.log(`[LocalSettingsStoreWrapper] DELETE completed: removed fields ${JSON.stringify(fields)} from section "${key}"`);
116
+ }
117
+ else {
118
+ // Clear the entire section
119
+ this.settingsStore.updateSectionSettings(key, {});
120
+ console.log(`[LocalSettingsStoreWrapper] DELETE completed: cleared entire section "${key}"`);
121
+ }
122
+ return true;
123
+ }
124
+ catch (error) {
125
+ console.warn(`[LocalSettingsStoreWrapper] DELETE failed: key="${key}", fields=${JSON.stringify(fields)}:`, error);
126
+ return true;
127
+ }
128
+ }
129
+ async exists(key) {
130
+ console.log(`[LocalSettingsStoreWrapper] EXISTS request: key="${key}"`);
131
+ try {
132
+ const sectionSettings = this.settingsStore.getSectionSettings(key);
133
+ const exists = Object.keys(sectionSettings).length > 0;
134
+ console.log(`[LocalSettingsStoreWrapper] EXISTS result: key="${key}" -> ${exists}`);
135
+ return exists;
136
+ }
137
+ catch (error) {
138
+ console.warn(`[LocalSettingsStoreWrapper] EXISTS failed: key="${key}":`, error);
139
+ return false;
140
+ }
141
+ }
142
+ }
143
+ /**
144
+ * Wrapper to make LocalSecretsStore compatible with BaseKVStore interface
145
+ */
146
+ class LocalSecretsStoreWrapper {
147
+ constructor(secretsStore) {
148
+ this.secretsStore = secretsStore;
149
+ }
150
+ async get(key, fields) {
151
+ try {
152
+ // For secrets store, key is typically a section name
153
+ const sectionSecrets = this.secretsStore.getSectionSecrets(key);
154
+ if (fields && fields.length > 0) {
155
+ // Return only requested fields
156
+ const filteredSecrets = {};
157
+ fields.forEach((field) => {
158
+ if (sectionSecrets[field] !== undefined) {
159
+ filteredSecrets[field] = sectionSecrets[field];
160
+ }
161
+ });
162
+ return filteredSecrets;
163
+ }
164
+ else {
165
+ // Return all secrets for the section
166
+ return sectionSecrets;
167
+ }
168
+ }
169
+ catch (error) {
170
+ console.warn(`[LocalSecretsStoreWrapper] GET failed: key="${key}":`, error);
171
+ return {};
172
+ }
173
+ }
174
+ async put(key, value) {
175
+ try {
176
+ // Store the entire value object for the section
177
+ this.secretsStore.updateSectionSecrets(key, value);
178
+ return true;
179
+ }
180
+ catch (error) {
181
+ console.warn(`[LocalSecretsStoreWrapper] PUT failed: key="${key}", value=${JSON.stringify(value)}:`, error);
182
+ return true;
183
+ }
184
+ }
185
+ async patch(key, value) {
186
+ try {
187
+ const currentSecrets = this.secretsStore.getSectionSecrets(key);
188
+ // Update only the specified fields
189
+ this.secretsStore.updateSectionSecrets(key, value);
190
+ return currentSecrets;
191
+ }
192
+ catch (error) {
193
+ console.warn(`[LocalSecretsStoreWrapper] PATCH failed: key="${key}", value=${JSON.stringify(value)}:`, error);
194
+ return {};
195
+ }
196
+ }
197
+ async delete(key, fields) {
198
+ try {
199
+ if (fields && fields.length > 0) {
200
+ // Delete specific fields
201
+ this.secretsStore.deleteSecretFields(key, fields);
202
+ }
203
+ else {
204
+ // Clear the entire section
205
+ this.secretsStore.updateSectionSecrets(key, {});
206
+ }
207
+ return true;
208
+ }
209
+ catch (error) {
210
+ console.warn(`[LocalSecretsStoreWrapper] DELETE failed: key="${key}", fields=${JSON.stringify(fields)}:`, error);
211
+ return true;
212
+ }
213
+ }
214
+ async exists(key) {
215
+ try {
216
+ return this.secretsStore.hasSectionSecrets(key);
217
+ }
218
+ catch (error) {
219
+ console.warn(`[LocalSecretsStoreWrapper] EXISTS failed: key="${key}":`, error);
220
+ return false;
221
+ }
222
+ }
223
+ }
224
+ /**
225
+ * Mock notifier for local testing
226
+ */
227
+ class MockNotifier {
228
+ async notify(message) {
229
+ console.warn('MockNotifier: notify called -', message);
230
+ }
231
+ }
232
+ /**
233
+ * Local implementation of FunctionApi that returns URLs pointing to the local test server
234
+ */
235
+ class LocalFunctionApi {
236
+ constructor(appPath, appManifest, configStore, baseUrl = 'http://localhost:3000') {
237
+ this.appPath = appPath;
238
+ this.baseUrl = baseUrl;
239
+ this.appManifest = appManifest;
240
+ this.configStore = configStore;
241
+ }
242
+ async getEndpoints(installId) {
243
+ const actualInstallId = installId || 1;
244
+ // Get non-global functions from app manifest
245
+ const functions = this.appManifest.functions || {};
246
+ const endpoints = {};
247
+ Object.entries(functions).forEach(([functionKey, functionDef]) => {
248
+ // Only include non-global functions
249
+ if (!functionDef.global) {
250
+ // Get GUID for this function from config store
251
+ const guid = this.configStore.getFunctionGuid(functionKey);
252
+ const appId = this.appManifest.meta.app_id;
253
+ endpoints[functionKey] = `${this.baseUrl}/functions/${appId}/${functionKey}/${guid}`;
254
+ }
255
+ });
256
+ console.log(`[LocalFunctionApi] Generated non-global endpoints for install ${actualInstallId}:`, endpoints);
257
+ return endpoints;
258
+ }
259
+ async getGlobalEndpoints() {
260
+ // Get global functions from app manifest
261
+ const functions = this.appManifest.functions || {};
262
+ const endpoints = {};
263
+ Object.entries(functions).forEach(([functionKey, functionDef]) => {
264
+ // Only include global functions
265
+ if (functionDef.global) {
266
+ const appId = this.appManifest.meta.app_id;
267
+ // Global functions don't have GUID in the path
268
+ endpoints[functionKey] = `${this.baseUrl}/functions/${appId}/${functionKey}`;
269
+ }
270
+ });
271
+ console.log(`[LocalFunctionApi] Generated global endpoints:`, endpoints);
272
+ return endpoints;
273
+ }
274
+ getAuthorizationGrantUrl() {
275
+ const grantUrl = `${this.baseUrl}/auth/grant`;
276
+ console.log(`[LocalFunctionApi] Generated authorization grant URL:`, grantUrl);
277
+ return grantUrl;
278
+ }
279
+ }
280
+ /**
281
+ * Configure SDKs for local testing environment using the app's SDK instance
282
+ *
283
+ * @param app - App configuration object
284
+ * @param settingsStore - Local settings store instance
285
+ * @param appPath - Path to the app directory (used to resolve app's node_modules)
286
+ * @param installId - Mock install ID for local testing
287
+ * @param configStore - Local config store instance for GUID management
288
+ */
289
+ function configureLocalSDKs(app, settingsStore, appPath, installId = 1, configStore) {
290
+ const { app_id, display_name, version, vendor } = app.manifest.meta;
291
+ // Dynamically load the SDK from the app's node_modules to ensure we use the same instance
292
+ const appSdkPath = path_1.default.join(appPath, 'node_modules', '@zaiusinc/app-sdk');
293
+ try {
294
+ const App = require(appSdkPath);
295
+ const { initializeStores, LogLevel, setNotifier, initializeFunctionApi } = require(appSdkPath);
296
+ // Configure the app SDK context (similar to production)
297
+ App.setContext({
298
+ manifest: app.manifest,
299
+ trackerId: 'local-testing-tracker',
300
+ installId: installId
301
+ });
302
+ // Set up logging context
303
+ const logContext = {
304
+ app_id,
305
+ app_version: version,
306
+ tracker_id: 'local-testing-tracker',
307
+ install_id: installId,
308
+ entry_point: 'local-testing',
309
+ request_id: `local-${Date.now()}`
310
+ };
311
+ App.setLogContext(logContext);
312
+ App.setLogLevel(LogLevel.Debug); // Use debug level for local testing
313
+ // Initialize stores with local implementations
314
+ const secretsStore = LocalSecretsStore_1.LocalSecretsStore.getInstance(appPath);
315
+ initializeStores({
316
+ settings: new LocalSettingsStoreWrapper(settingsStore),
317
+ secrets: new LocalSecretsStoreWrapper(secretsStore),
318
+ kvStore: LocalKVStore_1.LocalKVStore.getInstance(appPath),
319
+ sharedKvStore: LocalKVStore_1.LocalKVStore.getInstance(appPath, 'shared-kvstore.json') // Shared KV store with disk persistence
320
+ });
321
+ // Set up local notifier
322
+ const localNotifier = new LocalNotifier_1.LocalNotifier(appPath);
323
+ setNotifier(localNotifier);
324
+ // Initialize function API with local implementation
325
+ if (configStore) {
326
+ const localFunctionApi = new LocalFunctionApi(appPath, app.manifest, configStore);
327
+ initializeFunctionApi(localFunctionApi);
328
+ }
329
+ else {
330
+ console.warn('[LocalSDKConfig] Config store not provided, skipping function API initialization');
331
+ }
332
+ console.log(`Configured local SDKs for app: ${display_name} v${version} (${app_id})`);
333
+ return { success: true };
334
+ }
335
+ catch (error) {
336
+ console.error(`Failed to configure local SDKs: ${error.message}`);
337
+ console.error(`Attempted to load SDK from: ${appSdkPath}`);
338
+ return { success: false, error: error.message };
339
+ }
340
+ }
341
+ exports.configureLocalSDKs = configureLocalSDKs;
342
+ /**
343
+ * Clean up SDK configuration after app execution
344
+ *
345
+ * @param appPath - Path to the app directory (used to resolve app's node_modules)
346
+ */
347
+ function cleanUpLocalSDKs(appPath) {
348
+ try {
349
+ // Dynamically load the SDK from the app's node_modules
350
+ const appSdkPath = path_1.default.join(appPath, 'node_modules', '@zaiusinc/app-sdk');
351
+ const App = require(appSdkPath);
352
+ const { initializeStores, LogLevel, setNotifier } = require(appSdkPath);
353
+ // Reset to default/unknown context
354
+ App.setContext({
355
+ manifest: {
356
+ meta: {
357
+ app_id: 'unknown',
358
+ display_name: 'unknown',
359
+ version: '0.0.0',
360
+ vendor: 'unknown',
361
+ support_url: '',
362
+ summary: '',
363
+ contact_email: '',
364
+ categories: [],
365
+ availability: [],
366
+ },
367
+ runtime: 'node18'
368
+ },
369
+ trackerId: 'unknown',
370
+ installId: -1
371
+ });
372
+ App.setLogContext({
373
+ app_id: 'unknown',
374
+ app_version: '0.0.0'
375
+ });
376
+ App.setLogLevel(LogLevel.Info);
377
+ // Reset stores to disabled state
378
+ initializeStores({
379
+ settings: new MockKVStore(),
380
+ secrets: new MockKVStore(),
381
+ kvStore: new MockKVStore(),
382
+ sharedKvStore: new MockKVStore()
383
+ });
384
+ setNotifier(new MockNotifier());
385
+ console.log('Cleaned up local SDKs');
386
+ }
387
+ catch (error) {
388
+ console.warn(`Error during SDK cleanup: ${error.message}`);
389
+ }
390
+ }
391
+ exports.cleanUpLocalSDKs = cleanUpLocalSDKs;
392
+ //# sourceMappingURL=localSDKConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localSDKConfig.js","sourceRoot":"","sources":["../../../src/local_engine/localSDKConfig.ts"],"names":[],"mappings":"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"}