@optimizely/ocp-local-env 1.0.0-beta.13 → 1.0.0-beta.15

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 (108) hide show
  1. package/README.md +21 -0
  2. package/dist/package.json +6 -1
  3. package/dist/public/bundle.9ecff4861dc6af9af49a.js +3 -0
  4. package/dist/public/bundle.9ecff4861dc6af9af49a.js.map +1 -0
  5. package/dist/public/index.html +1 -1
  6. package/dist/src/cli.js +2 -2
  7. package/dist/src/cli.js.map +1 -1
  8. package/dist/src/executor/JobExecutor.js +0 -17
  9. package/dist/src/executor/JobExecutor.js.map +1 -1
  10. package/dist/src/local_engine/LocalNotifier.d.ts +2 -0
  11. package/dist/src/local_engine/LocalNotifier.js +7 -0
  12. package/dist/src/local_engine/LocalNotifier.js.map +1 -1
  13. package/dist/src/local_engine/LocalSourceApi.d.ts +40 -0
  14. package/dist/src/local_engine/LocalSourceApi.js +69 -0
  15. package/dist/src/local_engine/LocalSourceApi.js.map +1 -0
  16. package/dist/src/local_engine/local-engine-child-base.d.ts +0 -12
  17. package/dist/src/local_engine/local-engine-child-base.js +0 -127
  18. package/dist/src/local_engine/local-engine-child-base.js.map +1 -1
  19. package/dist/src/local_engine/local-engine-client.d.ts +19 -29
  20. package/dist/src/local_engine/local-engine-client.js +41 -94
  21. package/dist/src/local_engine/local-engine-client.js.map +1 -1
  22. package/dist/src/local_engine/local-engine-types.d.ts +13 -50
  23. package/dist/src/local_engine/local-engine-unified.d.ts +6 -13
  24. package/dist/src/local_engine/local-engine-unified.js +51 -217
  25. package/dist/src/local_engine/local-engine-unified.js.map +1 -1
  26. package/dist/src/local_engine/localSDKConfig.d.ts +6 -0
  27. package/dist/src/local_engine/localSDKConfig.js +23 -1
  28. package/dist/src/local_engine/localSDKConfig.js.map +1 -1
  29. package/dist/src/local_engine/storage/LocalConfigStore.d.ts +0 -17
  30. package/dist/src/local_engine/storage/LocalConfigStore.js +1 -38
  31. package/dist/src/local_engine/storage/LocalConfigStore.js.map +1 -1
  32. package/dist/src/local_engine/storage/SourceDataStore.d.ts +16 -14
  33. package/dist/src/local_engine/storage/SourceDataStore.js +57 -57
  34. package/dist/src/local_engine/storage/SourceDataStore.js.map +1 -1
  35. package/dist/src/server/api/destinations.js +1 -1
  36. package/dist/src/server/api/destinations.js.map +1 -1
  37. package/dist/src/server/api/opalTools.js +1 -1
  38. package/dist/src/server/api/opalTools.js.map +1 -1
  39. package/dist/src/server/api/sources.d.ts +1 -2
  40. package/dist/src/server/api/sources.js +16 -275
  41. package/dist/src/server/api/sources.js.map +1 -1
  42. package/dist/src/server/api/v1.js +43 -0
  43. package/dist/src/server/api/v1.js.map +1 -1
  44. package/dist/src/server/api.d.ts +4 -0
  45. package/dist/src/server/api.js +105 -8
  46. package/dist/src/server/api.js.map +1 -1
  47. package/dist/src/server/browserFocus.d.ts +5 -0
  48. package/dist/src/server/browserFocus.js +39 -0
  49. package/dist/src/server/browserFocus.js.map +1 -0
  50. package/dist/src/server/config.d.ts +3 -0
  51. package/dist/src/server/config.js +7 -0
  52. package/dist/src/server/config.js.map +1 -1
  53. package/dist/src/server/mockDataGenerator.d.ts +1 -1
  54. package/dist/src/server/mockDataGenerator.js +75 -33
  55. package/dist/src/server/mockDataGenerator.js.map +1 -1
  56. package/dist/src/server/mockToolDataGenerator.d.ts +1 -1
  57. package/dist/src/server/mockToolDataGenerator.js +138 -96
  58. package/dist/src/server/mockToolDataGenerator.js.map +1 -1
  59. package/dist/src/server.js +97 -155
  60. package/dist/src/server.js.map +1 -1
  61. package/dist/src/types/app.d.ts +0 -1
  62. package/dist/src/ui/components/App.js +165 -44
  63. package/dist/src/ui/components/App.js.map +1 -1
  64. package/dist/src/ui/components/FunctionsView.d.ts +1 -0
  65. package/dist/src/ui/components/FunctionsView.js +32 -25
  66. package/dist/src/ui/components/FunctionsView.js.map +1 -1
  67. package/dist/src/ui/components/JobsView.js +1 -1
  68. package/dist/src/ui/components/JobsView.js.map +1 -1
  69. package/dist/src/ui/components/NotificationViewer.d.ts +2 -11
  70. package/dist/src/ui/components/NotificationViewer.js +62 -9
  71. package/dist/src/ui/components/NotificationViewer.js.map +1 -1
  72. package/dist/src/ui/components/OpalToolsView.d.ts +1 -0
  73. package/dist/src/ui/components/OpalToolsView.js +9 -3
  74. package/dist/src/ui/components/OpalToolsView.js.map +1 -1
  75. package/dist/src/ui/components/SourceEmittedDataPanel.d.ts +8 -0
  76. package/dist/src/ui/components/SourceEmittedDataPanel.js +103 -0
  77. package/dist/src/ui/components/SourceEmittedDataPanel.js.map +1 -0
  78. package/dist/src/ui/components/SourcesView.js +4 -8
  79. package/dist/src/ui/components/SourcesView.js.map +1 -1
  80. package/dist/src/ui/components/StoreViewer.js +1 -1
  81. package/dist/src/ui/components/StoreViewer.js.map +1 -1
  82. package/dist/src/ui/components/TabbedConsole.d.ts +4 -0
  83. package/dist/src/ui/components/TabbedConsole.js +54 -6
  84. package/dist/src/ui/components/TabbedConsole.js.map +1 -1
  85. package/dist/src/ui/store/formStateSlice.d.ts +1 -1
  86. package/dist/src/ui/store/formStateSlice.js +1 -1
  87. package/package.json +6 -1
  88. package/dist/public/bundle.722850005313c74f911a.js +0 -3
  89. package/dist/public/bundle.722850005313c74f911a.js.map +0 -1
  90. package/dist/src/executor/SourceExecutor.d.ts +0 -32
  91. package/dist/src/executor/SourceExecutor.js +0 -163
  92. package/dist/src/executor/SourceExecutor.js.map +0 -1
  93. package/dist/src/local_engine/storage/SourceJobExecutionStore.d.ts +0 -25
  94. package/dist/src/local_engine/storage/SourceJobExecutionStore.js +0 -61
  95. package/dist/src/local_engine/storage/SourceJobExecutionStore.js.map +0 -1
  96. package/dist/src/ui/components/SourceDataViewer.d.ts +0 -8
  97. package/dist/src/ui/components/SourceDataViewer.js +0 -84
  98. package/dist/src/ui/components/SourceDataViewer.js.map +0 -1
  99. package/dist/src/ui/components/SourceJobsSection.d.ts +0 -8
  100. package/dist/src/ui/components/SourceJobsSection.js +0 -99
  101. package/dist/src/ui/components/SourceJobsSection.js.map +0 -1
  102. package/dist/src/ui/components/SourceLifecycleSection.d.ts +0 -7
  103. package/dist/src/ui/components/SourceLifecycleSection.js +0 -58
  104. package/dist/src/ui/components/SourceLifecycleSection.js.map +0 -1
  105. package/dist/src/ui/components/SourceWebhookEditor.d.ts +0 -8
  106. package/dist/src/ui/components/SourceWebhookEditor.js +0 -181
  107. package/dist/src/ui/components/SourceWebhookEditor.js.map +0 -1
  108. /package/dist/public/{bundle.722850005313c74f911a.js.LICENSE.txt → bundle.9ecff4861dc6af9af49a.js.LICENSE.txt} +0 -0
@@ -1,32 +0,0 @@
1
- import { App } from '../types/app';
2
- import { SourceWebhookRequest, SourceJobRequest } from '../local_engine/local-engine-types';
3
- import { LocalConfigStore } from '../local_engine/storage/LocalConfigStore';
4
- export interface SourceWebhookResponse {
5
- status: number;
6
- headers: [string, string][];
7
- body: any;
8
- }
9
- export interface SourceCallbackResponse {
10
- success: boolean;
11
- message?: string;
12
- }
13
- export interface SourceJobResult {
14
- success: boolean;
15
- logs: string[];
16
- executionTime: number;
17
- error?: string;
18
- result?: any;
19
- }
20
- export declare class SourceExecutor {
21
- private app;
22
- private localEngineClient;
23
- private configStore;
24
- constructor(app: App, configStore: LocalConfigStore);
25
- executeSourceWebhook(request: SourceWebhookRequest): Promise<SourceWebhookResponse>;
26
- executeSourceCreate(sourceId: string): Promise<SourceCallbackResponse>;
27
- executeSourceUpdate(sourceId: string): Promise<SourceCallbackResponse>;
28
- executeSourceDelete(sourceId: string): Promise<SourceCallbackResponse>;
29
- executeSourceEnable(sourceId: string): Promise<SourceCallbackResponse>;
30
- executeSourcePause(sourceId: string): Promise<SourceCallbackResponse>;
31
- executeSourceJob(request: SourceJobRequest): Promise<SourceJobResult>;
32
- }
@@ -1,163 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SourceExecutor = void 0;
4
- const local_engine_client_1 = require("../local_engine/local-engine-client");
5
- const LogManager_1 = require("../logging/LogManager");
6
- const config_1 = require("../server/config");
7
- const logger = LogManager_1.LogManager.getInstance();
8
- /**
9
- * Create app configuration object for IPC communication
10
- */
11
- function createAppConfig(app) {
12
- return {
13
- manifest: app.manifest,
14
- isBuilt: true,
15
- isValid: true,
16
- path: app.path,
17
- baseUrl: `http://${config_1.config.server.host}:${config_1.config.server.port}`
18
- };
19
- }
20
- class SourceExecutor {
21
- constructor(app, configStore) {
22
- this.app = app;
23
- this.localEngineClient = local_engine_client_1.LocalEngineClient.getInstance();
24
- this.configStore = configStore;
25
- }
26
- async executeSourceWebhook(request) {
27
- try {
28
- logger.logSourceExecution(request.sourceId, 'webhook', 'started', {
29
- method: request.method,
30
- path: request.path
31
- });
32
- const source = this.app.manifest.sources?.[request.sourceId];
33
- if (!source) {
34
- throw new Error(`Source ${request.sourceId} not found in manifest`);
35
- }
36
- const result = await this.localEngineClient.executeSourceWebhook(request, createAppConfig(this.app));
37
- logger.logSourceExecution(request.sourceId, 'webhook', 'success', {
38
- status: result.status
39
- });
40
- return result;
41
- }
42
- catch (error) {
43
- logger.logSourceExecution(request.sourceId, 'webhook', 'error', { error });
44
- throw error;
45
- }
46
- }
47
- async executeSourceCreate(sourceId) {
48
- try {
49
- logger.logSourceExecution(sourceId, 'create', 'started');
50
- const source = this.app.manifest.sources?.[sourceId];
51
- if (!source) {
52
- throw new Error(`Source ${sourceId} not found in manifest`);
53
- }
54
- // Retrieve GUID from config store
55
- const guid = this.configStore.getSourceGuid(sourceId);
56
- const result = await this.localEngineClient.executeSourceCreate(sourceId, guid, createAppConfig(this.app));
57
- logger.logSourceExecution(sourceId, 'create', 'success', { result });
58
- return result;
59
- }
60
- catch (error) {
61
- logger.logSourceExecution(sourceId, 'create', 'error', { error });
62
- throw error;
63
- }
64
- }
65
- async executeSourceUpdate(sourceId) {
66
- try {
67
- logger.logSourceExecution(sourceId, 'update', 'started');
68
- const source = this.app.manifest.sources?.[sourceId];
69
- if (!source) {
70
- throw new Error(`Source ${sourceId} not found in manifest`);
71
- }
72
- // Retrieve GUID from config store
73
- const guid = this.configStore.getSourceGuid(sourceId);
74
- const result = await this.localEngineClient.executeSourceUpdate(sourceId, guid, createAppConfig(this.app));
75
- logger.logSourceExecution(sourceId, 'update', 'success', { result });
76
- return result;
77
- }
78
- catch (error) {
79
- logger.logSourceExecution(sourceId, 'update', 'error', { error });
80
- throw error;
81
- }
82
- }
83
- async executeSourceDelete(sourceId) {
84
- try {
85
- logger.logSourceExecution(sourceId, 'delete', 'started');
86
- const source = this.app.manifest.sources?.[sourceId];
87
- if (!source) {
88
- throw new Error(`Source ${sourceId} not found in manifest`);
89
- }
90
- // Retrieve GUID from config store
91
- const guid = this.configStore.getSourceGuid(sourceId);
92
- const result = await this.localEngineClient.executeSourceDelete(sourceId, guid, createAppConfig(this.app));
93
- logger.logSourceExecution(sourceId, 'delete', 'success', { result });
94
- return result;
95
- }
96
- catch (error) {
97
- logger.logSourceExecution(sourceId, 'delete', 'error', { error });
98
- throw error;
99
- }
100
- }
101
- async executeSourceEnable(sourceId) {
102
- try {
103
- logger.logSourceExecution(sourceId, 'enable', 'started');
104
- const source = this.app.manifest.sources?.[sourceId];
105
- if (!source) {
106
- throw new Error(`Source ${sourceId} not found in manifest`);
107
- }
108
- // Retrieve GUID from config store
109
- const guid = this.configStore.getSourceGuid(sourceId);
110
- const result = await this.localEngineClient.executeSourceEnable(sourceId, guid, createAppConfig(this.app));
111
- logger.logSourceExecution(sourceId, 'enable', 'success', { result });
112
- return result;
113
- }
114
- catch (error) {
115
- logger.logSourceExecution(sourceId, 'enable', 'error', { error });
116
- throw error;
117
- }
118
- }
119
- async executeSourcePause(sourceId) {
120
- try {
121
- logger.logSourceExecution(sourceId, 'pause', 'started');
122
- const source = this.app.manifest.sources?.[sourceId];
123
- if (!source) {
124
- throw new Error(`Source ${sourceId} not found in manifest`);
125
- }
126
- // Retrieve GUID from config store
127
- const guid = this.configStore.getSourceGuid(sourceId);
128
- const result = await this.localEngineClient.executeSourcePause(sourceId, guid, createAppConfig(this.app));
129
- logger.logSourceExecution(sourceId, 'pause', 'success', { result });
130
- return result;
131
- }
132
- catch (error) {
133
- logger.logSourceExecution(sourceId, 'pause', 'error', { error });
134
- throw error;
135
- }
136
- }
137
- async executeSourceJob(request) {
138
- try {
139
- logger.logSourceExecution(request.sourceId, 'job', 'started', {
140
- jobId: request.jobId
141
- });
142
- const source = this.app.manifest.sources?.[request.sourceId];
143
- if (!source) {
144
- throw new Error(`Source ${request.sourceId} not found in manifest`);
145
- }
146
- const result = await this.localEngineClient.executeSourceJob(request, createAppConfig(this.app));
147
- logger.logSourceExecution(request.sourceId, 'job', 'success', {
148
- jobId: request.jobId,
149
- executionTime: result.executionTime
150
- });
151
- return result;
152
- }
153
- catch (error) {
154
- logger.logSourceExecution(request.sourceId, 'job', 'error', {
155
- jobId: request.jobId,
156
- error
157
- });
158
- throw error;
159
- }
160
- }
161
- }
162
- exports.SourceExecutor = SourceExecutor;
163
- //# sourceMappingURL=SourceExecutor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SourceExecutor.js","sourceRoot":"","sources":["../../../src/executor/SourceExecutor.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- export interface SourceJobExecution {
2
- jobId: string;
3
- timestamp: number;
4
- success: boolean;
5
- logs: string[];
6
- executionTime: number;
7
- error?: string;
8
- result?: any;
9
- }
10
- export interface SourceJobExecutionFile {
11
- sourceId: string;
12
- executions: SourceJobExecution[];
13
- }
14
- export declare class SourceJobExecutionStore {
15
- private storageDir;
16
- private maxExecutions;
17
- constructor(appRootDir: string);
18
- private ensureStorageDir;
19
- private getFilePath;
20
- private readFile;
21
- private writeFile;
22
- addExecution(sourceId: string, execution: SourceJobExecution): void;
23
- getExecutions(sourceId: string, jobId?: string): SourceJobExecution[];
24
- clear(sourceId: string): void;
25
- }
@@ -1,61 +0,0 @@
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.SourceJobExecutionStore = void 0;
7
- const path_1 = __importDefault(require("path"));
8
- const fs_1 = __importDefault(require("fs"));
9
- class SourceJobExecutionStore {
10
- constructor(appRootDir) {
11
- this.maxExecutions = 100;
12
- this.storageDir = path_1.default.join(appRootDir, 'storage', 'source-job-executions');
13
- this.ensureStorageDir();
14
- }
15
- ensureStorageDir() {
16
- if (!fs_1.default.existsSync(this.storageDir)) {
17
- fs_1.default.mkdirSync(this.storageDir, { recursive: true });
18
- }
19
- }
20
- getFilePath(sourceId) {
21
- return path_1.default.join(this.storageDir, `${sourceId}.json`);
22
- }
23
- readFile(sourceId) {
24
- const filePath = this.getFilePath(sourceId);
25
- if (!fs_1.default.existsSync(filePath)) {
26
- return { sourceId, executions: [] };
27
- }
28
- const content = fs_1.default.readFileSync(filePath, 'utf-8');
29
- return JSON.parse(content);
30
- }
31
- writeFile(data) {
32
- const filePath = this.getFilePath(data.sourceId);
33
- fs_1.default.writeFileSync(filePath, JSON.stringify(data, null, 2));
34
- }
35
- addExecution(sourceId, execution) {
36
- const file = this.readFile(sourceId);
37
- file.executions.push(execution);
38
- // Prune to keep only last maxExecutions
39
- if (file.executions.length > this.maxExecutions) {
40
- file.executions = file.executions.slice(-this.maxExecutions);
41
- }
42
- this.writeFile(file);
43
- }
44
- getExecutions(sourceId, jobId) {
45
- const file = this.readFile(sourceId);
46
- let executions = file.executions;
47
- if (jobId) {
48
- executions = executions.filter(e => e.jobId === jobId);
49
- }
50
- // Return in reverse chronological order (most recent first)
51
- return executions.reverse();
52
- }
53
- clear(sourceId) {
54
- const filePath = this.getFilePath(sourceId);
55
- if (fs_1.default.existsSync(filePath)) {
56
- fs_1.default.unlinkSync(filePath);
57
- }
58
- }
59
- }
60
- exports.SourceJobExecutionStore = SourceJobExecutionStore;
61
- //# sourceMappingURL=SourceJobExecutionStore.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SourceJobExecutionStore.js","sourceRoot":"","sources":["../../../../src/local_engine/storage/SourceJobExecutionStore.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,4CAAoB;AAiBpB,MAAa,uBAAuB;IAIlC,YAAY,UAAkB;QAFtB,kBAAa,GAAW,GAAG,CAAC;QAGlC,IAAI,CAAC,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,uBAAuB,CAAC,CAAC;QAC5E,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,YAAE,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,QAAgB;QAClC,OAAO,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,QAAQ,OAAO,CAAC,CAAC;IACxD,CAAC;IAEO,QAAQ,CAAC,QAAgB;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QACtC,CAAC;QACD,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAEO,SAAS,CAAC,IAA4B;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,YAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,YAAY,CAAC,QAAgB,EAAE,SAA6B;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAErC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEhC,wCAAwC;QACxC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAChD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,aAAa,CAAC,QAAgB,EAAE,KAAc;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAErC,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAEjC,IAAI,KAAK,EAAE,CAAC;YACV,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;QACzD,CAAC;QAED,4DAA4D;QAC5D,OAAO,UAAU,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,QAAgB;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;CACF;AAjED,0DAiEC"}
@@ -1,8 +0,0 @@
1
- import React from 'react';
2
- interface SourceDataViewerProps {
3
- sourceId: string;
4
- apiBaseUrl: string;
5
- context?: 'webhook' | 'job';
6
- }
7
- export declare const SourceDataViewer: React.FC<SourceDataViewerProps>;
8
- export {};
@@ -1,84 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SourceDataViewer = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const react_1 = require("react");
6
- const SourceDataViewer = ({ sourceId, apiBaseUrl, context }) => {
7
- const [data, setData] = (0, react_1.useState)([]);
8
- const [loading, setLoading] = (0, react_1.useState)(false);
9
- const [error, setError] = (0, react_1.useState)(null);
10
- const [autoRefresh, setAutoRefresh] = (0, react_1.useState)(true);
11
- const intervalRef = (0, react_1.useRef)(null);
12
- (0, react_1.useEffect)(() => {
13
- fetchData();
14
- // Set up auto-refresh
15
- if (autoRefresh) {
16
- intervalRef.current = setInterval(fetchData, 2000);
17
- }
18
- return () => {
19
- if (intervalRef.current) {
20
- clearInterval(intervalRef.current);
21
- }
22
- };
23
- }, [sourceId, context, autoRefresh]);
24
- const fetchData = async () => {
25
- try {
26
- setLoading(true);
27
- let url = `${apiBaseUrl}/sources/${sourceId}/data`;
28
- if (context) {
29
- url += `?context=${context}`;
30
- }
31
- const response = await fetch(url);
32
- if (!response.ok) {
33
- const errorData = await response.json();
34
- throw new Error(errorData.error || 'Failed to fetch data');
35
- }
36
- const result = await response.json();
37
- setData(result.data || []);
38
- setError(null);
39
- }
40
- catch (err) {
41
- setError(`Failed to load data: ${err.message}`);
42
- console.error(err);
43
- }
44
- finally {
45
- setLoading(false);
46
- }
47
- };
48
- const clearData = async () => {
49
- try {
50
- let url = `${apiBaseUrl}/sources/${sourceId}/data`;
51
- if (context) {
52
- url += `?context=${context}`;
53
- }
54
- const response = await fetch(url, {
55
- method: 'DELETE'
56
- });
57
- if (!response.ok) {
58
- throw new Error('Failed to clear data');
59
- }
60
- setData([]);
61
- }
62
- catch (err) {
63
- setError(`Failed to clear data: ${err.message}`);
64
- console.error(err);
65
- }
66
- };
67
- const exportData = () => {
68
- const dataStr = JSON.stringify(data, null, 2);
69
- const dataBlob = new Blob([dataStr], { type: 'application/json' });
70
- const url = URL.createObjectURL(dataBlob);
71
- const link = document.createElement('a');
72
- link.href = url;
73
- link.download = `source-${sourceId}-data-${Date.now()}.json`;
74
- link.click();
75
- URL.revokeObjectURL(url);
76
- };
77
- const formatTimestamp = (timestamp) => {
78
- const date = new Date(timestamp);
79
- return date.toLocaleString();
80
- };
81
- return ((0, jsx_runtime_1.jsxs)("div", { className: "source-data-viewer", children: [(0, jsx_runtime_1.jsxs)("div", { className: "data-viewer-header", children: [(0, jsx_runtime_1.jsx)("h3", { children: "Emitted Data" }), (0, jsx_runtime_1.jsxs)("div", { className: "data-viewer-controls", children: [(0, jsx_runtime_1.jsxs)("label", { className: "auto-refresh-toggle", children: [(0, jsx_runtime_1.jsx)("input", { type: "checkbox", checked: autoRefresh, onChange: (e) => setAutoRefresh(e.target.checked) }), "Auto-refresh"] }), (0, jsx_runtime_1.jsx)("button", { onClick: fetchData, disabled: loading, children: "Refresh" }), (0, jsx_runtime_1.jsx)("button", { onClick: exportData, disabled: data.length === 0, children: "Export" }), (0, jsx_runtime_1.jsx)("button", { onClick: clearData, disabled: data.length === 0, children: "Clear" })] })] }), error && ((0, jsx_runtime_1.jsx)("div", { className: "data-viewer-error", children: error })), (0, jsx_runtime_1.jsx)("div", { className: "data-entries", children: data.length === 0 ? ((0, jsx_runtime_1.jsxs)("div", { className: "no-data", children: [(0, jsx_runtime_1.jsx)("p", { children: "No data emitted yet" }), (0, jsx_runtime_1.jsx)("p", { className: "hint", children: "Data emitted via source.emit() will appear here" })] })) : ((0, jsx_runtime_1.jsx)("div", { className: "entries-list", children: data.slice().reverse().map((entry, index) => ((0, jsx_runtime_1.jsxs)("div", { className: "data-entry", children: [(0, jsx_runtime_1.jsxs)("div", { className: "entry-header", children: [(0, jsx_runtime_1.jsx)("span", { className: "entry-timestamp", children: formatTimestamp(entry.timestamp) }), entry.metadata && ((0, jsx_runtime_1.jsxs)("span", { className: "entry-metadata", children: [Object.keys(entry.metadata).length, " metadata fields"] }))] }), (0, jsx_runtime_1.jsx)("div", { className: "entry-data", children: (0, jsx_runtime_1.jsx)("pre", { children: JSON.stringify(entry.data, null, 2) }) }), entry.metadata && ((0, jsx_runtime_1.jsxs)("details", { className: "entry-metadata-details", children: [(0, jsx_runtime_1.jsx)("summary", { children: "Metadata" }), (0, jsx_runtime_1.jsx)("pre", { children: JSON.stringify(entry.metadata, null, 2) })] }))] }, index))) })) }), (0, jsx_runtime_1.jsx)("div", { className: "data-viewer-footer", children: (0, jsx_runtime_1.jsxs)("span", { children: [data.length, " entries (max 50)"] }) })] }));
82
- };
83
- exports.SourceDataViewer = SourceDataViewer;
84
- //# sourceMappingURL=SourceDataViewer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SourceDataViewer.js","sourceRoot":"","sources":["../../../../src/ui/components/SourceDataViewer.tsx"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import React from 'react';
2
- interface SourceJobsSectionProps {
3
- sourceId: string;
4
- jobs: Record<string, any>;
5
- apiBaseUrl: string;
6
- }
7
- export declare const SourceJobsSection: React.FC<SourceJobsSectionProps>;
8
- export {};
@@ -1,99 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SourceJobsSection = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const react_1 = require("react");
6
- const useQueryParams_1 = require("../hooks/useQueryParams");
7
- const SourceDataViewer_1 = require("./SourceDataViewer");
8
- const SourceJobsSection = ({ sourceId, jobs, apiBaseUrl }) => {
9
- const { getParam, setParams } = (0, useQueryParams_1.useQueryParams)();
10
- const [executions, setExecutions] = (0, react_1.useState)([]);
11
- const [expandedResult, setExpandedResult] = (0, react_1.useState)(false);
12
- const [loading, setLoading] = (0, react_1.useState)(false);
13
- const [error, setError] = (0, react_1.useState)(null);
14
- const jobList = Object.entries(jobs);
15
- // Derive selection from URL (only when on jobs tab)
16
- const selectedJobId = getParam('sourceJob');
17
- const selectedExecutionId = getParam('execution');
18
- const selectedJob = jobList.find(([id]) => id === selectedJobId)?.[0] || null;
19
- const selectedExecution = executions.find((e) => e.timestamp?.toString() === selectedExecutionId) || null;
20
- const handleJobSelect = (0, react_1.useCallback)((jobId, replace = false) => {
21
- setParams({ sourceJob: jobId, execution: null }, replace);
22
- }, [setParams]);
23
- const handleExecutionSelect = (0, react_1.useCallback)((execution, replace = false) => {
24
- setParams({ execution: execution.timestamp.toString() }, replace);
25
- }, [setParams]);
26
- // Auto-select first job
27
- (0, react_1.useEffect)(() => {
28
- if (jobList.length > 0 && !selectedJobId) {
29
- handleJobSelect(jobList[0][0], true); // replace: true for auto-selection
30
- }
31
- // eslint-disable-next-line react-hooks/exhaustive-deps
32
- }, [jobList, selectedJobId]);
33
- // Fetch executions when job is selected
34
- (0, react_1.useEffect)(() => {
35
- if (selectedJob) {
36
- fetchExecutions(selectedJob);
37
- }
38
- }, [selectedJob]);
39
- // Auto-select first execution when job changes
40
- (0, react_1.useEffect)(() => {
41
- if (executions.length > 0 && !selectedExecutionId) {
42
- handleExecutionSelect(executions[0], true); // replace: true for auto-selection
43
- }
44
- // eslint-disable-next-line react-hooks/exhaustive-deps
45
- }, [executions, selectedExecutionId]);
46
- const fetchExecutions = async (jobId) => {
47
- try {
48
- const response = await fetch(`${apiBaseUrl}/sources/${sourceId}/jobs/${jobId}/executions`);
49
- if (!response.ok) {
50
- throw new Error('Failed to fetch executions');
51
- }
52
- const data = await response.json();
53
- const jobExecutions = data.executions || [];
54
- setExecutions(jobExecutions);
55
- if (jobExecutions.length === 0) {
56
- setParams({ execution: null });
57
- }
58
- }
59
- catch (err) {
60
- console.error(`Failed to fetch executions for job ${jobId}:`, err);
61
- setExecutions([]);
62
- setParams({ execution: null });
63
- }
64
- };
65
- const runJob = async (jobId) => {
66
- try {
67
- setLoading(true);
68
- setError(null);
69
- const response = await fetch(`${apiBaseUrl}/sources/${sourceId}/jobs/${jobId}`, {
70
- method: 'POST',
71
- headers: { 'Content-Type': 'application/json' },
72
- body: JSON.stringify({ parameters: {} })
73
- });
74
- if (!response.ok) {
75
- const errorData = await response.json();
76
- throw new Error(errorData.error || 'Failed to run job');
77
- }
78
- // Refresh executions
79
- await fetchExecutions(jobId);
80
- }
81
- catch (err) {
82
- setError(`Failed to run job ${jobId}: ${err.message}`);
83
- console.error(err);
84
- }
85
- finally {
86
- setLoading(false);
87
- }
88
- };
89
- const formatTimestamp = (timestamp) => {
90
- const date = new Date(timestamp);
91
- return date.toLocaleString();
92
- };
93
- const getStatusColor = (success) => {
94
- return success ? '#28a745' : '#dc3545';
95
- };
96
- return ((0, jsx_runtime_1.jsxs)("div", { className: "source-jobs-container", children: [(0, jsx_runtime_1.jsxs)("div", { className: "source-jobs-controls", children: [(0, jsx_runtime_1.jsxs)("div", { className: "job-selector-group", children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "job-select", children: "Source Job:" }), (0, jsx_runtime_1.jsx)("select", { id: "job-select", value: selectedJob || '', onChange: (e) => handleJobSelect(e.target.value), disabled: jobList.length === 0, children: jobList.length === 0 ? ((0, jsx_runtime_1.jsx)("option", { value: "", children: "No jobs defined" })) : (jobList.map(([jobId, jobConfig]) => ((0, jsx_runtime_1.jsxs)("option", { value: jobId, children: [jobId, " - ", jobConfig.description || 'No description'] }, jobId)))) })] }), selectedJob && ((0, jsx_runtime_1.jsx)("button", { className: "start-job-btn", onClick: () => runJob(selectedJob), disabled: loading, children: loading ? 'Running...' : 'Run Job' }))] }), (0, jsx_runtime_1.jsxs)("div", { className: "source-jobs-panels", children: [(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, index) => ((0, jsx_runtime_1.jsxs)("div", { className: `execution-item ${selectedExecution === execution ? 'active' : ''}`, onClick: () => handleExecutionSelect(execution), children: [(0, jsx_runtime_1.jsxs)("div", { className: "execution-status", children: [(0, jsx_runtime_1.jsx)("span", { className: "status-dot", style: { backgroundColor: getStatusColor(execution.success) } }), (0, jsx_runtime_1.jsx)("span", { className: "status-text", children: execution.success ? 'Completed' : 'Failed' })] }), (0, jsx_runtime_1.jsxs)("div", { className: "execution-time", children: [(0, jsx_runtime_1.jsx)("div", { className: "started-at", children: formatTimestamp(execution.timestamp) }), (0, jsx_runtime_1.jsxs)("div", { className: "execution-duration", children: ["Duration: ", execution.executionTime, "ms"] })] }), (0, jsx_runtime_1.jsx)("div", { className: "execution-stats", children: (0, jsx_runtime_1.jsx)("span", { className: "state-count", children: "1 state" }) }), execution.error && ((0, jsx_runtime_1.jsxs)("div", { className: "execution-error", children: ["Error: ", execution.error] }))] }, index)))) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "source-jobs-right-column", children: [(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.timestamp.toString().slice(0, 8), "..."] }))] }), (0, jsx_runtime_1.jsx)("div", { className: "states-list", children: !selectedExecution ? ((0, jsx_runtime_1.jsx)("div", { className: "no-states", children: (0, jsx_runtime_1.jsx)("p", { children: "Select an execution to see states" }) })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [selectedExecution.result && ((0, jsx_runtime_1.jsxs)("div", { className: "state-item", children: [(0, jsx_runtime_1.jsxs)("div", { className: "state-header", onClick: () => setExpandedResult(!expandedResult), 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(selectedExecution.timestamp) }), (0, jsx_runtime_1.jsx)("span", { className: "state-phase perform", children: "PERFORM" })] }), (0, jsx_runtime_1.jsx)("div", { className: "state-secondary-info", children: (0, jsx_runtime_1.jsx)("span", { className: `state-status ${selectedExecution.success ? 'complete' : 'error'}`, children: selectedExecution.success ? 'Completed' : 'Error' }) })] }), (0, jsx_runtime_1.jsx)("div", { className: "state-expand", children: (0, jsx_runtime_1.jsx)("span", { className: `expand-icon ${expandedResult ? 'expanded' : ''}`, children: "\u25BC" }) })] }), expandedResult && ((0, jsx_runtime_1.jsx)("div", { className: "state-content", children: (0, jsx_runtime_1.jsx)("pre", { children: JSON.stringify(selectedExecution.result, null, 2) }) }))] })), selectedExecution.error && !selectedExecution.result && ((0, jsx_runtime_1.jsxs)("div", { className: "state-item", children: [(0, jsx_runtime_1.jsxs)("div", { className: "state-header", onClick: () => setExpandedResult(!expandedResult), 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(selectedExecution.timestamp) }), (0, jsx_runtime_1.jsx)("span", { className: "state-phase perform", children: "PERFORM" })] }), (0, jsx_runtime_1.jsx)("div", { className: "state-secondary-info", children: (0, jsx_runtime_1.jsx)("span", { className: "state-status error", children: "Error" }) })] }), (0, jsx_runtime_1.jsx)("div", { className: "state-expand", children: (0, jsx_runtime_1.jsx)("span", { className: `expand-icon ${expandedResult ? 'expanded' : ''}`, children: "\u25BC" }) })] }), expandedResult && ((0, jsx_runtime_1.jsx)("div", { className: "state-content", children: (0, jsx_runtime_1.jsx)("pre", { children: selectedExecution.error }) }))] }))] })) })] }), (0, jsx_runtime_1.jsx)("div", { className: "source-panel", children: (0, jsx_runtime_1.jsx)(SourceDataViewer_1.SourceDataViewer, { sourceId: sourceId, apiBaseUrl: apiBaseUrl, context: "job" }) })] })] }), error && ((0, jsx_runtime_1.jsx)("div", { className: "toast-notification toast-error", children: (0, jsx_runtime_1.jsxs)("div", { className: "toast-content", children: [(0, jsx_runtime_1.jsx)("strong", { children: "Error" }), (0, jsx_runtime_1.jsx)("div", { className: "toast-message", children: error })] }) }))] }));
97
- };
98
- exports.SourceJobsSection = SourceJobsSection;
99
- //# sourceMappingURL=SourceJobsSection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SourceJobsSection.js","sourceRoot":"","sources":["../../../../src/ui/components/SourceJobsSection.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import React from 'react';
2
- interface SourceLifecycleSectionProps {
3
- sourceId: string;
4
- apiBaseUrl: string;
5
- }
6
- export declare const SourceLifecycleSection: React.FC<SourceLifecycleSectionProps>;
7
- export {};
@@ -1,58 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SourceLifecycleSection = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const react_1 = require("react");
6
- const SourceLifecycleSection = ({ sourceId, apiBaseUrl }) => {
7
- const [loading, setLoading] = (0, react_1.useState)({});
8
- const [lastResponse, setLastResponse] = (0, react_1.useState)(null);
9
- const lifecycleMethods = [
10
- { id: 'create', label: 'Create', description: 'Setup source webhooks' },
11
- { id: 'update', label: 'Update', description: 'Update source configuration' },
12
- { id: 'delete', label: 'Delete', description: 'Cleanup tasks' },
13
- { id: 'enable', label: 'Enable', description: 'Enable source' },
14
- { id: 'pause', label: 'Pause', description: 'Pause source' }
15
- ];
16
- const executeLifecycle = async (action) => {
17
- try {
18
- setLoading(prev => ({ ...prev, [action]: true }));
19
- const response = await fetch(`${apiBaseUrl}/sources/${sourceId}/${action}`, {
20
- method: 'POST',
21
- headers: { 'Content-Type': 'application/json' }
22
- });
23
- if (!response.ok) {
24
- const errorData = await response.json();
25
- throw new Error(errorData.error || `Failed to execute ${action}`);
26
- }
27
- const data = await response.json();
28
- const result = data.result;
29
- // Store response for display
30
- setLastResponse({
31
- action,
32
- timestamp: Date.now(),
33
- success: result.success,
34
- message: result.message
35
- });
36
- }
37
- catch (err) {
38
- // Store error response
39
- setLastResponse({
40
- action,
41
- timestamp: Date.now(),
42
- success: false,
43
- message: err.message
44
- });
45
- console.error(err);
46
- }
47
- finally {
48
- setLoading(prev => ({ ...prev, [action]: false }));
49
- }
50
- };
51
- const formatTimestamp = (timestamp) => {
52
- const date = new Date(timestamp);
53
- return date.toLocaleString();
54
- };
55
- return ((0, jsx_runtime_1.jsx)("div", { className: "source-lifecycle-container", children: (0, jsx_runtime_1.jsxs)("div", { className: "lifecycle-two-panel", children: [(0, jsx_runtime_1.jsxs)("div", { className: "lifecycle-methods-panel", children: [(0, jsx_runtime_1.jsxs)("div", { className: "panel-header", children: [(0, jsx_runtime_1.jsx)("h3", { children: "Lifecycle Hooks" }), (0, jsx_runtime_1.jsxs)("p", { className: "panel-description", children: ["Trigger lifecycle callbacks for ", (0, jsx_runtime_1.jsx)("strong", { children: sourceId })] })] }), (0, jsx_runtime_1.jsx)("div", { className: "lifecycle-methods-list", children: lifecycleMethods.map(method => ((0, jsx_runtime_1.jsx)("div", { className: "lifecycle-method-item", children: (0, jsx_runtime_1.jsxs)("div", { className: "method-header", children: [(0, jsx_runtime_1.jsxs)("div", { className: "method-info", children: [(0, jsx_runtime_1.jsx)("h4", { children: method.label }), (0, jsx_runtime_1.jsx)("p", { children: method.description })] }), (0, jsx_runtime_1.jsx)("button", { className: "lifecycle-trigger-btn", onClick: () => executeLifecycle(method.id), disabled: loading[method.id], children: loading[method.id] ? 'Running...' : 'Trigger' })] }) }, method.id))) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "lifecycle-response-panel", children: [(0, jsx_runtime_1.jsx)("div", { className: "panel-header", children: (0, jsx_runtime_1.jsx)("h3", { children: "Response" }) }), (0, jsx_runtime_1.jsx)("div", { className: "response-content", children: !lastResponse ? ((0, jsx_runtime_1.jsxs)("div", { className: "no-response", children: [(0, jsx_runtime_1.jsx)("p", { children: "No lifecycle hook has been triggered yet." }), (0, jsx_runtime_1.jsx)("p", { className: "hint", children: "Click a \"Trigger\" button to execute a lifecycle hook." })] })) : ((0, jsx_runtime_1.jsxs)("div", { className: "response-details", children: [(0, jsx_runtime_1.jsxs)("div", { className: "response-header", children: [(0, jsx_runtime_1.jsxs)("div", { className: `response-status ${lastResponse.success ? 'success' : 'error'}`, children: [(0, jsx_runtime_1.jsx)("span", { className: "status-dot" }), (0, jsx_runtime_1.jsx)("span", { className: "status-text", children: lastResponse.success ? 'Success' : 'Error' })] }), (0, jsx_runtime_1.jsxs)("div", { className: "response-meta", children: [(0, jsx_runtime_1.jsx)("span", { className: "response-action", children: lastResponse.action }), (0, jsx_runtime_1.jsx)("span", { className: "response-time", children: formatTimestamp(lastResponse.timestamp) })] })] }), lastResponse.message && ((0, jsx_runtime_1.jsxs)("div", { className: "response-message", children: [(0, jsx_runtime_1.jsx)("label", { children: "Message:" }), (0, jsx_runtime_1.jsx)("pre", { children: lastResponse.message })] }))] })) })] })] }) }));
56
- };
57
- exports.SourceLifecycleSection = SourceLifecycleSection;
58
- //# sourceMappingURL=SourceLifecycleSection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SourceLifecycleSection.js","sourceRoot":"","sources":["../../../../src/ui/components/SourceLifecycleSection.tsx"],"names":[],"mappings":"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"}