@rglabs/butterfly 1.0.0

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 (136) hide show
  1. package/.claude/settings.local.json +25 -0
  2. package/dist/commands/add.d.ts +21 -0
  3. package/dist/commands/add.d.ts.map +1 -0
  4. package/dist/commands/add.js +301 -0
  5. package/dist/commands/add.js.map +1 -0
  6. package/dist/commands/download.d.ts +4 -0
  7. package/dist/commands/download.d.ts.map +1 -0
  8. package/dist/commands/download.js +309 -0
  9. package/dist/commands/download.js.map +1 -0
  10. package/dist/commands/setup.d.ts +3 -0
  11. package/dist/commands/setup.d.ts.map +1 -0
  12. package/dist/commands/setup.js +41 -0
  13. package/dist/commands/setup.js.map +1 -0
  14. package/dist/commands/start/handlers/aiTasks.d.ts +4 -0
  15. package/dist/commands/start/handlers/aiTasks.d.ts.map +1 -0
  16. package/dist/commands/start/handlers/aiTasks.js +95 -0
  17. package/dist/commands/start/handlers/aiTasks.js.map +1 -0
  18. package/dist/commands/start/handlers/cronjobs.d.ts +4 -0
  19. package/dist/commands/start/handlers/cronjobs.d.ts.map +1 -0
  20. package/dist/commands/start/handlers/cronjobs.js +80 -0
  21. package/dist/commands/start/handlers/cronjobs.js.map +1 -0
  22. package/dist/commands/start/handlers/emailLayouts.d.ts +4 -0
  23. package/dist/commands/start/handlers/emailLayouts.d.ts.map +1 -0
  24. package/dist/commands/start/handlers/emailLayouts.js +83 -0
  25. package/dist/commands/start/handlers/emailLayouts.js.map +1 -0
  26. package/dist/commands/start/handlers/emailTemplates.d.ts +4 -0
  27. package/dist/commands/start/handlers/emailTemplates.d.ts.map +1 -0
  28. package/dist/commands/start/handlers/emailTemplates.js +83 -0
  29. package/dist/commands/start/handlers/emailTemplates.js.map +1 -0
  30. package/dist/commands/start/handlers/index.d.ts +11 -0
  31. package/dist/commands/start/handlers/index.d.ts.map +1 -0
  32. package/dist/commands/start/handlers/index.js +11 -0
  33. package/dist/commands/start/handlers/index.js.map +1 -0
  34. package/dist/commands/start/handlers/objects.d.ts +8 -0
  35. package/dist/commands/start/handlers/objects.d.ts.map +1 -0
  36. package/dist/commands/start/handlers/objects.js +205 -0
  37. package/dist/commands/start/handlers/objects.js.map +1 -0
  38. package/dist/commands/start/handlers/pages.d.ts +4 -0
  39. package/dist/commands/start/handlers/pages.d.ts.map +1 -0
  40. package/dist/commands/start/handlers/pages.js +86 -0
  41. package/dist/commands/start/handlers/pages.js.map +1 -0
  42. package/dist/commands/start/handlers/pdfTemplates.d.ts +4 -0
  43. package/dist/commands/start/handlers/pdfTemplates.d.ts.map +1 -0
  44. package/dist/commands/start/handlers/pdfTemplates.js +81 -0
  45. package/dist/commands/start/handlers/pdfTemplates.js.map +1 -0
  46. package/dist/commands/start/handlers/reports.d.ts +4 -0
  47. package/dist/commands/start/handlers/reports.d.ts.map +1 -0
  48. package/dist/commands/start/handlers/reports.js +159 -0
  49. package/dist/commands/start/handlers/reports.js.map +1 -0
  50. package/dist/commands/start/handlers/stateMachines.d.ts +4 -0
  51. package/dist/commands/start/handlers/stateMachines.d.ts.map +1 -0
  52. package/dist/commands/start/handlers/stateMachines.js +549 -0
  53. package/dist/commands/start/handlers/stateMachines.js.map +1 -0
  54. package/dist/commands/start/handlers/workflows.d.ts +5 -0
  55. package/dist/commands/start/handlers/workflows.d.ts.map +1 -0
  56. package/dist/commands/start/handlers/workflows.js +277 -0
  57. package/dist/commands/start/handlers/workflows.js.map +1 -0
  58. package/dist/commands/start/index.d.ts +5 -0
  59. package/dist/commands/start/index.d.ts.map +1 -0
  60. package/dist/commands/start/index.js +304 -0
  61. package/dist/commands/start/index.js.map +1 -0
  62. package/dist/commands/start/types.d.ts +25 -0
  63. package/dist/commands/start/types.d.ts.map +1 -0
  64. package/dist/commands/start/types.js +2 -0
  65. package/dist/commands/start/types.js.map +1 -0
  66. package/dist/commands/start/utils.d.ts +10 -0
  67. package/dist/commands/start/utils.d.ts.map +1 -0
  68. package/dist/commands/start/utils.js +191 -0
  69. package/dist/commands/start/utils.js.map +1 -0
  70. package/dist/commands/start.d.ts +2 -0
  71. package/dist/commands/start.d.ts.map +1 -0
  72. package/dist/commands/start.js +2 -0
  73. package/dist/commands/start.js.map +1 -0
  74. package/dist/commands/upload.d.ts +3 -0
  75. package/dist/commands/upload.d.ts.map +1 -0
  76. package/dist/commands/upload.js +115 -0
  77. package/dist/commands/upload.js.map +1 -0
  78. package/dist/commands/workflow-info.d.ts +11 -0
  79. package/dist/commands/workflow-info.d.ts.map +1 -0
  80. package/dist/commands/workflow-info.js +159 -0
  81. package/dist/commands/workflow-info.js.map +1 -0
  82. package/dist/components/DownloadProgress.d.ts +11 -0
  83. package/dist/components/DownloadProgress.d.ts.map +1 -0
  84. package/dist/components/DownloadProgress.js +29 -0
  85. package/dist/components/DownloadProgress.js.map +1 -0
  86. package/dist/components/SetupForm.d.ts +8 -0
  87. package/dist/components/SetupForm.d.ts.map +1 -0
  88. package/dist/components/SetupForm.js +56 -0
  89. package/dist/components/SetupForm.js.map +1 -0
  90. package/dist/components/UploadProgress.d.ts +11 -0
  91. package/dist/components/UploadProgress.d.ts.map +1 -0
  92. package/dist/components/UploadProgress.js +29 -0
  93. package/dist/components/UploadProgress.js.map +1 -0
  94. package/dist/index.d.ts +3 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +63 -0
  97. package/dist/index.js.map +1 -0
  98. package/dist/types/index.d.ts +18 -0
  99. package/dist/types/index.d.ts.map +1 -0
  100. package/dist/types/index.js +2 -0
  101. package/dist/types/index.js.map +1 -0
  102. package/dist/utils/api.d.ts +47 -0
  103. package/dist/utils/api.d.ts.map +1 -0
  104. package/dist/utils/api.js +676 -0
  105. package/dist/utils/api.js.map +1 -0
  106. package/dist/utils/auth.d.ts +4 -0
  107. package/dist/utils/auth.d.ts.map +1 -0
  108. package/dist/utils/auth.js +22 -0
  109. package/dist/utils/auth.js.map +1 -0
  110. package/dist/utils/docs.d.ts +2 -0
  111. package/dist/utils/docs.d.ts.map +1 -0
  112. package/dist/utils/docs.js +41 -0
  113. package/dist/utils/docs.js.map +1 -0
  114. package/dist/utils/errorLogger.d.ts +6 -0
  115. package/dist/utils/errorLogger.d.ts.map +1 -0
  116. package/dist/utils/errorLogger.js +29 -0
  117. package/dist/utils/errorLogger.js.map +1 -0
  118. package/dist/utils/files.d.ts +14 -0
  119. package/dist/utils/files.d.ts.map +1 -0
  120. package/dist/utils/files.js +732 -0
  121. package/dist/utils/files.js.map +1 -0
  122. package/dist/utils/lockManager.d.ts +15 -0
  123. package/dist/utils/lockManager.d.ts.map +1 -0
  124. package/dist/utils/lockManager.js +126 -0
  125. package/dist/utils/lockManager.js.map +1 -0
  126. package/dist/utils/summaryGenerator.d.ts +2 -0
  127. package/dist/utils/summaryGenerator.d.ts.map +1 -0
  128. package/dist/utils/summaryGenerator.js +183 -0
  129. package/dist/utils/summaryGenerator.js.map +1 -0
  130. package/dist/utils/uploadHandler.d.ts +35 -0
  131. package/dist/utils/uploadHandler.d.ts.map +1 -0
  132. package/dist/utils/uploadHandler.js +706 -0
  133. package/dist/utils/uploadHandler.js.map +1 -0
  134. package/object_response.png +0 -0
  135. package/object_specs_response.png +0 -0
  136. package/package.json +56 -0
@@ -0,0 +1,676 @@
1
+ import axios from 'axios';
2
+ import { wrapper } from 'axios-cookiejar-support';
3
+ import { CookieJar } from 'tough-cookie';
4
+ export class ButterflyAPI {
5
+ config;
6
+ client;
7
+ cookieJar;
8
+ csrfToken;
9
+ debug = process.env.BUTTERFLY_DEBUG === 'true';
10
+ constructor(config) {
11
+ this.config = config;
12
+ this.cookieJar = new CookieJar(undefined, {
13
+ rejectPublicSuffixes: false,
14
+ allowSpecialUseDomain: true,
15
+ looseMode: true
16
+ });
17
+ this.client = wrapper(axios.create({
18
+ baseURL: config.endpoint,
19
+ timeout: 30000,
20
+ headers: {
21
+ 'Content-Type': 'application/json',
22
+ },
23
+ jar: this.cookieJar,
24
+ withCredentials: true,
25
+ }));
26
+ this.client.interceptors.request.use(async (config) => {
27
+ const url = new URL(config.url, this.config.endpoint);
28
+ const cookies = await this.cookieJar.getCookies(url.href);
29
+ if (cookies && cookies.length > 0) {
30
+ const cookieString = cookies.map(c => `${c.key}=${c.value}`).join('; ');
31
+ config.headers['Cookie'] = cookieString;
32
+ }
33
+ if (this.debug) {
34
+ console.log('\n--- REQUEST ---');
35
+ console.log('URL:', config.url);
36
+ console.log('Method:', config.method?.toUpperCase());
37
+ console.log('Headers:', JSON.stringify(config.headers, null, 2));
38
+ console.log('Data:', JSON.stringify(config.data, null, 2));
39
+ console.log('Existing Cookies:', cookies);
40
+ }
41
+ return config;
42
+ }, (error) => {
43
+ if (this.debug) {
44
+ console.error('Request Error:', error.message);
45
+ }
46
+ return Promise.reject(error);
47
+ });
48
+ this.client.interceptors.response.use((response) => {
49
+ if (this.debug) {
50
+ console.log('\n--- RESPONSE ---');
51
+ console.log('Status:', response.status, response.statusText);
52
+ console.log('Headers:', JSON.stringify(response.headers, null, 2));
53
+ console.log('Data:', JSON.stringify(response.data, null, 2));
54
+ console.log('Cookies:', this.cookieJar.getCookiesSync(this.config.endpoint));
55
+ }
56
+ return response;
57
+ }, (error) => {
58
+ if (this.debug) {
59
+ console.error('\n--- ERROR RESPONSE ---');
60
+ if (error.response) {
61
+ console.error('Status:', error.response.status, error.response.statusText);
62
+ console.error('Headers:', JSON.stringify(error.response.headers, null, 2));
63
+ console.error('Data:', JSON.stringify(error.response.data, null, 2));
64
+ }
65
+ else if (error.request) {
66
+ console.error('No response received');
67
+ console.error('Request:', error.request);
68
+ }
69
+ else {
70
+ console.error('Error:', error.message);
71
+ }
72
+ }
73
+ return Promise.reject(error);
74
+ });
75
+ }
76
+ async fetchCSRFToken() {
77
+ try {
78
+ if (this.debug) {
79
+ console.log('\nFetching CSRF token...');
80
+ }
81
+ const response = await this.client.get('/admin/ajax/user/csrf');
82
+ if (response.data && response.data.token && typeof response.data.token === 'string') {
83
+ const token = response.data.token;
84
+ this.csrfToken = token;
85
+ if (this.debug) {
86
+ console.log('CSRF token fetched successfully');
87
+ }
88
+ return token;
89
+ }
90
+ else {
91
+ throw new Error('CSRF token not found in response');
92
+ }
93
+ }
94
+ catch (error) {
95
+ console.error('Failed to fetch CSRF token:', error.message);
96
+ throw new Error('Failed to fetch CSRF token');
97
+ }
98
+ }
99
+ async authenticate() {
100
+ console.log('\nAttempting to authenticate...');
101
+ console.log('Endpoint:', this.config.endpoint);
102
+ console.log('Email:', this.config.email);
103
+ console.log('Password:', '***' + this.config.password.slice(-3));
104
+ try {
105
+ await this.fetchCSRFToken();
106
+ const formData = new URLSearchParams();
107
+ formData.append('email', this.config.email);
108
+ formData.append('password', this.config.password);
109
+ formData.append('csrf_token', this.csrfToken);
110
+ const response = await this.client.post('/admin/ajax/user/login', formData, {
111
+ headers: {
112
+ 'Content-Type': 'application/x-www-form-urlencoded',
113
+ }
114
+ });
115
+ if (!response.data || response.data.success !== true) {
116
+ throw new Error(`Authentication failed: ${response.data?.error || 'Invalid credentials'}`);
117
+ }
118
+ console.log('\nAuthentication successful!');
119
+ if (this.debug) {
120
+ console.log('Response status:', response.status);
121
+ console.log('Response data:', JSON.stringify(response.data, null, 2));
122
+ }
123
+ }
124
+ catch (error) {
125
+ console.error('\nAuthentication failed!');
126
+ if (error.response) {
127
+ console.error('Server responded with error:');
128
+ console.error('Status:', error.response.status, error.response.statusText);
129
+ console.error('Response data:', JSON.stringify(error.response.data, null, 2));
130
+ if (error.response.status === 401) {
131
+ throw new Error('Authentication failed: Invalid credentials');
132
+ }
133
+ else if (error.response.status === 404) {
134
+ throw new Error('Authentication failed: Login endpoint not found');
135
+ }
136
+ else if (error.response.status >= 500) {
137
+ throw new Error(`Authentication failed: Server error (${error.response.status})`);
138
+ }
139
+ else {
140
+ throw new Error(`Authentication failed: ${error.response.status} ${error.response.statusText}`);
141
+ }
142
+ }
143
+ else if (error.request) {
144
+ console.error('No response received from server');
145
+ console.error('This could be due to:');
146
+ console.error('- Network connectivity issues');
147
+ console.error('- Invalid endpoint URL');
148
+ console.error('- Server is down');
149
+ throw new Error('Authentication failed: No response from server');
150
+ }
151
+ else {
152
+ console.error('Request setup error:', error.message);
153
+ throw new Error(`Authentication failed: ${error.message}`);
154
+ }
155
+ }
156
+ }
157
+ get httpClient() {
158
+ return this.client;
159
+ }
160
+ async downloadResource(type, name) {
161
+ try {
162
+ const url = name ? `/${type}/${name}` : `/${type}`;
163
+ const response = await this.client.get(url);
164
+ return Array.isArray(response.data) ? response.data : [response.data];
165
+ }
166
+ catch (error) {
167
+ throw new Error(`Failed to download ${type}`);
168
+ }
169
+ }
170
+ async fetchTable(tableName, column, value) {
171
+ try {
172
+ if (this.debug) {
173
+ console.log(`Cookies before fetch${tableName}:`, this.cookieJar.getCookiesSync(this.config.endpoint));
174
+ }
175
+ const params = {
176
+ table_name: tableName,
177
+ db_alias: 'default'
178
+ };
179
+ if (column && value !== undefined) {
180
+ params.column = column;
181
+ params.value = value;
182
+ }
183
+ const response = await this.client.get('/admin/ajax/cms_object/get', { params });
184
+ if (response.data && response.data.success === false &&
185
+ (response.data.message === "Records Not Found" || response.data.message === "Object Not Found")) {
186
+ return [];
187
+ }
188
+ if (!response.data || !response.data.data) {
189
+ throw new Error(`Invalid response format from ${tableName} endpoint: ` + JSON.stringify(response.data));
190
+ }
191
+ return response.data.data;
192
+ }
193
+ catch (error) {
194
+ console.error(`Error fetching ${tableName}:`, error.message);
195
+ throw new Error(`Failed to fetch ${tableName} from Butterfly`);
196
+ }
197
+ }
198
+ async fetchObjects() {
199
+ return this.fetchTable('objects', 'is_cms_object', '0');
200
+ }
201
+ async fetchCMSObjects() {
202
+ return this.fetchTable('objects', 'is_cms_object', '1');
203
+ }
204
+ async fetchObjectSpecs(objectId) {
205
+ try {
206
+ return await this.fetchTable('object_specs', 'object_id', objectId.toString());
207
+ }
208
+ catch (error) {
209
+ console.error(`Error fetching specs for object ${objectId}:`, error.message);
210
+ return [];
211
+ }
212
+ }
213
+ async fetchAllObjectSpecs() {
214
+ try {
215
+ return await this.fetchTable('object_specs');
216
+ }
217
+ catch (error) {
218
+ console.error('Error fetching all object specs:', error.message);
219
+ return [];
220
+ }
221
+ }
222
+ async fetchReports() {
223
+ return this.fetchTable('cms_reports');
224
+ }
225
+ async fetchReportCategories() {
226
+ try {
227
+ return await this.fetchTable('cms_report_categories');
228
+ }
229
+ catch (error) {
230
+ console.error('Error fetching report categories:', error.message);
231
+ return [];
232
+ }
233
+ }
234
+ async fetchReportSpecs(reportId) {
235
+ try {
236
+ return await this.fetchTable('cms_report_specs', 'cms_report_id', reportId.toString());
237
+ }
238
+ catch (error) {
239
+ console.error(`Error fetching specs for report ${reportId}:`, error.message);
240
+ return [];
241
+ }
242
+ }
243
+ async fetchReportQueries(reportId) {
244
+ try {
245
+ return await this.fetchTable('cms_report_queries', 'cms_report_id', reportId.toString());
246
+ }
247
+ catch (error) {
248
+ console.error(`Error fetching queries for report ${reportId}:`, error.message);
249
+ return [];
250
+ }
251
+ }
252
+ async fetchAllReportSpecs() {
253
+ try {
254
+ return await this.fetchTable('cms_report_specs');
255
+ }
256
+ catch (error) {
257
+ console.error('Error fetching all report specs:', error.message);
258
+ return [];
259
+ }
260
+ }
261
+ async fetchAllReportQueries() {
262
+ try {
263
+ return await this.fetchTable('cms_report_queries');
264
+ }
265
+ catch (error) {
266
+ console.error('Error fetching all report queries:', error.message);
267
+ return [];
268
+ }
269
+ }
270
+ async updateReport(reportId, updateData) {
271
+ try {
272
+ const formData = new URLSearchParams();
273
+ formData.append('id', reportId.toString());
274
+ Object.entries(updateData).forEach(([key, value]) => {
275
+ if (value !== null && value !== undefined) {
276
+ formData.append(key, String(value));
277
+ }
278
+ });
279
+ const response = await this.client.post('/admin/ajax/cms_object/operation?do=cms_reports__edit', formData, {
280
+ headers: {
281
+ 'Content-Type': 'application/x-www-form-urlencoded',
282
+ }
283
+ });
284
+ return response.data;
285
+ }
286
+ catch (error) {
287
+ console.error(`Error updating report ${reportId}:`, error.message);
288
+ throw new Error(`Failed to update report: ${error.message}`);
289
+ }
290
+ }
291
+ async createReport(reportData) {
292
+ try {
293
+ const formData = new URLSearchParams();
294
+ Object.entries(reportData).forEach(([key, value]) => {
295
+ if (value !== null && value !== undefined) {
296
+ formData.append(key, String(value));
297
+ }
298
+ });
299
+ const response = await this.client.post('/admin/ajax/cms_object/operation?do=cms_reports__add', formData, {
300
+ headers: {
301
+ 'Content-Type': 'application/x-www-form-urlencoded',
302
+ }
303
+ });
304
+ return response.data;
305
+ }
306
+ catch (error) {
307
+ console.error('Error creating report:', error.message);
308
+ throw new Error(`Failed to create report: ${error.message}`);
309
+ }
310
+ }
311
+ async updateReportSpec(specId, updateData) {
312
+ try {
313
+ const formData = new URLSearchParams();
314
+ formData.append('id', specId.toString());
315
+ Object.entries(updateData).forEach(([key, value]) => {
316
+ if (value !== null && value !== undefined) {
317
+ formData.append(key, String(value));
318
+ }
319
+ });
320
+ const response = await this.client.post('/admin/ajax/cms_object/operation?do=cms_report_specs__edit', formData, {
321
+ headers: {
322
+ 'Content-Type': 'application/x-www-form-urlencoded',
323
+ }
324
+ });
325
+ return response.data;
326
+ }
327
+ catch (error) {
328
+ console.error(`Error updating report spec ${specId}:`, error.message);
329
+ throw new Error(`Failed to update report spec: ${error.message}`);
330
+ }
331
+ }
332
+ async createReportSpec(specData) {
333
+ try {
334
+ const formData = new URLSearchParams();
335
+ Object.entries(specData).forEach(([key, value]) => {
336
+ if (value !== null && value !== undefined) {
337
+ formData.append(key, String(value));
338
+ }
339
+ });
340
+ const response = await this.client.post('/admin/ajax/cms_object/operation?do=cms_report_specs__add', formData, {
341
+ headers: {
342
+ 'Content-Type': 'application/x-www-form-urlencoded',
343
+ }
344
+ });
345
+ return response.data;
346
+ }
347
+ catch (error) {
348
+ console.error('Error creating report spec:', error.message);
349
+ throw new Error(`Failed to create report spec: ${error.message}`);
350
+ }
351
+ }
352
+ async updateReportQuery(queryId, updateData) {
353
+ try {
354
+ const formData = new URLSearchParams();
355
+ formData.append('id', queryId.toString());
356
+ Object.entries(updateData).forEach(([key, value]) => {
357
+ if (value !== null && value !== undefined) {
358
+ formData.append(key, String(value));
359
+ }
360
+ });
361
+ const response = await this.client.post('/admin/ajax/cms_object/operation?do=cms_report_queries__edit', formData, {
362
+ headers: {
363
+ 'Content-Type': 'application/x-www-form-urlencoded',
364
+ }
365
+ });
366
+ return response.data;
367
+ }
368
+ catch (error) {
369
+ console.error(`Error updating report query ${queryId}:`, error.message);
370
+ throw new Error(`Failed to update report query: ${error.message}`);
371
+ }
372
+ }
373
+ async createReportQuery(queryData) {
374
+ try {
375
+ const formData = new URLSearchParams();
376
+ Object.entries(queryData).forEach(([key, value]) => {
377
+ if (value !== null && value !== undefined) {
378
+ formData.append(key, String(value));
379
+ }
380
+ });
381
+ const response = await this.client.post('/admin/ajax/cms_object/operation?do=cms_report_queries__add', formData, {
382
+ headers: {
383
+ 'Content-Type': 'application/x-www-form-urlencoded',
384
+ }
385
+ });
386
+ return response.data;
387
+ }
388
+ catch (error) {
389
+ console.error('Error creating report query:', error.message);
390
+ throw new Error(`Failed to create report query: ${error.message}`);
391
+ }
392
+ }
393
+ async uploadResource(filePath, data) {
394
+ try {
395
+ const pathParts = filePath.split('/');
396
+ const fileName = pathParts[pathParts.length - 1];
397
+ if (pathParts.includes('objects')) {
398
+ if (fileName === 'object.json') {
399
+ return await this.updateObject(data);
400
+ }
401
+ else if (fileName === 'spec.json') {
402
+ return await this.updateObjectSpec(data);
403
+ }
404
+ }
405
+ else if (pathParts.includes('reports')) {
406
+ if (fileName === 'report.json') {
407
+ return await this.updateReportFromData(data);
408
+ }
409
+ else if (fileName === 'spec.json') {
410
+ return await this.updateReportSpecFromData(data);
411
+ }
412
+ }
413
+ throw new Error(`Unsupported file type: ${fileName} in path: ${filePath}`);
414
+ }
415
+ catch (error) {
416
+ console.error(`Error uploading resource ${filePath}:`, error.message);
417
+ throw error;
418
+ }
419
+ }
420
+ async updateObject(objectData) {
421
+ const formData = new URLSearchParams();
422
+ if (this.csrfToken) {
423
+ formData.append('csrf_token', this.csrfToken);
424
+ }
425
+ Object.keys(objectData).forEach(key => {
426
+ if (objectData[key] !== null && objectData[key] !== undefined) {
427
+ formData.append(key, objectData[key].toString());
428
+ }
429
+ });
430
+ const url = `/admin/ajax/cms_object/operation?do=objects__edit`;
431
+ const response = await this.client.post(url, formData, {
432
+ headers: {
433
+ 'Content-Type': 'application/x-www-form-urlencoded',
434
+ }
435
+ });
436
+ if (!response.data || !response.data.success) {
437
+ throw new Error(`Failed to update object: ${response.data?.error || 'Unknown error'}`);
438
+ }
439
+ return response.data;
440
+ }
441
+ async updateObjectSpec(specData) {
442
+ const formData = new URLSearchParams();
443
+ if (this.csrfToken) {
444
+ formData.append('csrf_token', this.csrfToken);
445
+ }
446
+ Object.keys(specData).forEach(key => {
447
+ if (specData[key] !== null && specData[key] !== undefined) {
448
+ formData.append(key, specData[key].toString());
449
+ }
450
+ });
451
+ const url = `/admin/ajax/cms_object/operation?do=object_specs__edit`;
452
+ const response = await this.client.post(url, formData, {
453
+ headers: {
454
+ 'Content-Type': 'application/x-www-form-urlencoded',
455
+ }
456
+ });
457
+ if (!response.data || !response.data.success) {
458
+ throw new Error(`Failed to update object spec: ${response.data?.error || 'Unknown error'}`);
459
+ }
460
+ return response.data;
461
+ }
462
+ async updateReportFromData(reportData) {
463
+ const formData = new URLSearchParams();
464
+ if (this.csrfToken) {
465
+ formData.append('csrf_token', this.csrfToken);
466
+ }
467
+ Object.keys(reportData).forEach(key => {
468
+ if (reportData[key] !== null && reportData[key] !== undefined) {
469
+ formData.append(key, reportData[key].toString());
470
+ }
471
+ });
472
+ const url = `/admin/ajax/cms_object/operation?do=cms_reports__edit`;
473
+ const response = await this.client.post(url, formData, {
474
+ headers: {
475
+ 'Content-Type': 'application/x-www-form-urlencoded',
476
+ }
477
+ });
478
+ if (!response.data || !response.data.success) {
479
+ throw new Error(`Failed to update report: ${response.data?.error || 'Unknown error'}`);
480
+ }
481
+ return response.data;
482
+ }
483
+ async updateReportSpecFromData(specData) {
484
+ const formData = new URLSearchParams();
485
+ if (this.csrfToken) {
486
+ formData.append('csrf_token', this.csrfToken);
487
+ }
488
+ Object.keys(specData).forEach(key => {
489
+ if (specData[key] !== null && specData[key] !== undefined) {
490
+ formData.append(key, specData[key].toString());
491
+ }
492
+ });
493
+ const url = `/admin/ajax/cms_object/operation?do=cms_report_specs__edit`;
494
+ const response = await this.client.post(url, formData, {
495
+ headers: {
496
+ 'Content-Type': 'application/x-www-form-urlencoded',
497
+ }
498
+ });
499
+ if (!response.data || !response.data.success) {
500
+ throw new Error(`Failed to update report spec: ${response.data?.error || 'Unknown error'}`);
501
+ }
502
+ return response.data;
503
+ }
504
+ async createWorkflowConnection(connectionData) {
505
+ try {
506
+ const formData = new URLSearchParams();
507
+ Object.entries(connectionData).forEach(([key, value]) => {
508
+ if (value !== null && value !== undefined) {
509
+ formData.append(key, String(value));
510
+ }
511
+ });
512
+ const response = await this.client.post('/admin/ajax/cms_object/operation?do=bfy_workflow_connections__add', formData, {
513
+ headers: {
514
+ 'Content-Type': 'application/x-www-form-urlencoded',
515
+ }
516
+ });
517
+ return response.data;
518
+ }
519
+ catch (error) {
520
+ console.error('Error creating workflow connection:', error.message);
521
+ throw new Error(`Failed to create workflow connection: ${error.message}`);
522
+ }
523
+ }
524
+ async updateWorkflowConnection(connectionId, updateData) {
525
+ try {
526
+ const formData = new URLSearchParams();
527
+ formData.append('id', connectionId.toString());
528
+ Object.entries(updateData).forEach(([key, value]) => {
529
+ if (key !== 'id' && value !== null && value !== undefined) {
530
+ formData.append(key, String(value));
531
+ }
532
+ });
533
+ const response = await this.client.post('/admin/ajax/cms_object/operation?do=bfy_workflow_connections__edit', formData, {
534
+ headers: {
535
+ 'Content-Type': 'application/x-www-form-urlencoded',
536
+ }
537
+ });
538
+ return response.data;
539
+ }
540
+ catch (error) {
541
+ console.error(`Error updating workflow connection ${connectionId}:`, error.message);
542
+ throw new Error(`Failed to update workflow connection: ${error.message}`);
543
+ }
544
+ }
545
+ async deleteWorkflowConnection(connectionId) {
546
+ try {
547
+ const formData = new URLSearchParams();
548
+ formData.append('id', connectionId.toString());
549
+ const response = await this.client.post('/admin/ajax/cms_object/operation?do=bfy_workflow_connections__delete', formData, {
550
+ headers: {
551
+ 'Content-Type': 'application/x-www-form-urlencoded',
552
+ }
553
+ });
554
+ return response.data;
555
+ }
556
+ catch (error) {
557
+ console.error(`Error deleting workflow connection ${connectionId}:`, error.message);
558
+ throw new Error(`Failed to delete workflow connection: ${error.message}`);
559
+ }
560
+ }
561
+ async createWorkflowNode(nodeData) {
562
+ try {
563
+ const formData = new URLSearchParams();
564
+ Object.entries(nodeData).forEach(([key, value]) => {
565
+ if (value !== null && value !== undefined) {
566
+ if (typeof value === 'object') {
567
+ formData.append(key, JSON.stringify(value));
568
+ }
569
+ else {
570
+ formData.append(key, String(value));
571
+ }
572
+ }
573
+ });
574
+ const response = await this.client.post('/admin/ajax/cms_object/operation?do=bfy_workflow_nodes__add', formData, {
575
+ headers: {
576
+ 'Content-Type': 'application/x-www-form-urlencoded',
577
+ }
578
+ });
579
+ return response.data;
580
+ }
581
+ catch (error) {
582
+ console.error('Error creating workflow node:', error.message);
583
+ throw new Error(`Failed to create workflow node: ${error.message}`);
584
+ }
585
+ }
586
+ async updateWorkflowNode(nodeId, updateData) {
587
+ try {
588
+ const formData = new URLSearchParams();
589
+ formData.append('id', nodeId.toString());
590
+ Object.entries(updateData).forEach(([key, value]) => {
591
+ if (key !== 'id' && value !== null && value !== undefined) {
592
+ if (typeof value === 'object') {
593
+ formData.append(key, JSON.stringify(value));
594
+ }
595
+ else {
596
+ formData.append(key, String(value));
597
+ }
598
+ }
599
+ });
600
+ const response = await this.client.post('/admin/ajax/cms_object/operation?do=bfy_workflow_nodes__edit', formData, {
601
+ headers: {
602
+ 'Content-Type': 'application/x-www-form-urlencoded',
603
+ }
604
+ });
605
+ return response.data;
606
+ }
607
+ catch (error) {
608
+ console.error(`Error updating workflow node ${nodeId}:`, error.message);
609
+ throw new Error(`Failed to update workflow node: ${error.message}`);
610
+ }
611
+ }
612
+ async deleteWorkflowNode(nodeId) {
613
+ try {
614
+ const formData = new URLSearchParams();
615
+ formData.append('id', nodeId.toString());
616
+ const response = await this.client.post('/admin/ajax/cms_object/operation?do=bfy_workflow_nodes__delete', formData, {
617
+ headers: {
618
+ 'Content-Type': 'application/x-www-form-urlencoded',
619
+ }
620
+ });
621
+ return response.data;
622
+ }
623
+ catch (error) {
624
+ console.error(`Error deleting workflow node ${nodeId}:`, error.message);
625
+ throw new Error(`Failed to delete workflow node: ${error.message}`);
626
+ }
627
+ }
628
+ async createWorkflowVersion(versionData) {
629
+ try {
630
+ const formData = new URLSearchParams();
631
+ Object.entries(versionData).forEach(([key, value]) => {
632
+ if (value !== null && value !== undefined) {
633
+ formData.append(key, String(value));
634
+ }
635
+ });
636
+ const response = await this.client.post('/admin/ajax/cms_object/operation?do=bfy_workflow_versions__add', formData, {
637
+ headers: {
638
+ 'Content-Type': 'application/x-www-form-urlencoded',
639
+ }
640
+ });
641
+ return response.data;
642
+ }
643
+ catch (error) {
644
+ console.error('Error creating workflow version:', error.message);
645
+ throw new Error(`Failed to create workflow version: ${error.message}`);
646
+ }
647
+ }
648
+ async updateWorkflowVersion(versionId, updateData) {
649
+ try {
650
+ const formData = new URLSearchParams();
651
+ formData.append('id', versionId.toString());
652
+ Object.entries(updateData).forEach(([key, value]) => {
653
+ if (key !== 'id' && value !== null && value !== undefined) {
654
+ formData.append(key, String(value));
655
+ }
656
+ });
657
+ const response = await this.client.post('/admin/ajax/cms_object/operation?do=bfy_workflow_versions__edit', formData, {
658
+ headers: {
659
+ 'Content-Type': 'application/x-www-form-urlencoded',
660
+ }
661
+ });
662
+ return response.data;
663
+ }
664
+ catch (error) {
665
+ console.error(`Error updating workflow version ${versionId}:`, error.message);
666
+ throw new Error(`Failed to update workflow version: ${error.message}`);
667
+ }
668
+ }
669
+ async publishWorkflowVersion(versionId) {
670
+ return this.updateWorkflowVersion(versionId, { status: 2 });
671
+ }
672
+ async archiveWorkflowVersion(versionId) {
673
+ return this.updateWorkflowVersion(versionId, { status: 3 });
674
+ }
675
+ }
676
+ //# sourceMappingURL=api.js.map