@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.
- package/.claude/settings.local.json +25 -0
- package/dist/commands/add.d.ts +21 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +301 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/download.d.ts +4 -0
- package/dist/commands/download.d.ts.map +1 -0
- package/dist/commands/download.js +309 -0
- package/dist/commands/download.js.map +1 -0
- package/dist/commands/setup.d.ts +3 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +41 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/start/handlers/aiTasks.d.ts +4 -0
- package/dist/commands/start/handlers/aiTasks.d.ts.map +1 -0
- package/dist/commands/start/handlers/aiTasks.js +95 -0
- package/dist/commands/start/handlers/aiTasks.js.map +1 -0
- package/dist/commands/start/handlers/cronjobs.d.ts +4 -0
- package/dist/commands/start/handlers/cronjobs.d.ts.map +1 -0
- package/dist/commands/start/handlers/cronjobs.js +80 -0
- package/dist/commands/start/handlers/cronjobs.js.map +1 -0
- package/dist/commands/start/handlers/emailLayouts.d.ts +4 -0
- package/dist/commands/start/handlers/emailLayouts.d.ts.map +1 -0
- package/dist/commands/start/handlers/emailLayouts.js +83 -0
- package/dist/commands/start/handlers/emailLayouts.js.map +1 -0
- package/dist/commands/start/handlers/emailTemplates.d.ts +4 -0
- package/dist/commands/start/handlers/emailTemplates.d.ts.map +1 -0
- package/dist/commands/start/handlers/emailTemplates.js +83 -0
- package/dist/commands/start/handlers/emailTemplates.js.map +1 -0
- package/dist/commands/start/handlers/index.d.ts +11 -0
- package/dist/commands/start/handlers/index.d.ts.map +1 -0
- package/dist/commands/start/handlers/index.js +11 -0
- package/dist/commands/start/handlers/index.js.map +1 -0
- package/dist/commands/start/handlers/objects.d.ts +8 -0
- package/dist/commands/start/handlers/objects.d.ts.map +1 -0
- package/dist/commands/start/handlers/objects.js +205 -0
- package/dist/commands/start/handlers/objects.js.map +1 -0
- package/dist/commands/start/handlers/pages.d.ts +4 -0
- package/dist/commands/start/handlers/pages.d.ts.map +1 -0
- package/dist/commands/start/handlers/pages.js +86 -0
- package/dist/commands/start/handlers/pages.js.map +1 -0
- package/dist/commands/start/handlers/pdfTemplates.d.ts +4 -0
- package/dist/commands/start/handlers/pdfTemplates.d.ts.map +1 -0
- package/dist/commands/start/handlers/pdfTemplates.js +81 -0
- package/dist/commands/start/handlers/pdfTemplates.js.map +1 -0
- package/dist/commands/start/handlers/reports.d.ts +4 -0
- package/dist/commands/start/handlers/reports.d.ts.map +1 -0
- package/dist/commands/start/handlers/reports.js +159 -0
- package/dist/commands/start/handlers/reports.js.map +1 -0
- package/dist/commands/start/handlers/stateMachines.d.ts +4 -0
- package/dist/commands/start/handlers/stateMachines.d.ts.map +1 -0
- package/dist/commands/start/handlers/stateMachines.js +549 -0
- package/dist/commands/start/handlers/stateMachines.js.map +1 -0
- package/dist/commands/start/handlers/workflows.d.ts +5 -0
- package/dist/commands/start/handlers/workflows.d.ts.map +1 -0
- package/dist/commands/start/handlers/workflows.js +277 -0
- package/dist/commands/start/handlers/workflows.js.map +1 -0
- package/dist/commands/start/index.d.ts +5 -0
- package/dist/commands/start/index.d.ts.map +1 -0
- package/dist/commands/start/index.js +304 -0
- package/dist/commands/start/index.js.map +1 -0
- package/dist/commands/start/types.d.ts +25 -0
- package/dist/commands/start/types.d.ts.map +1 -0
- package/dist/commands/start/types.js +2 -0
- package/dist/commands/start/types.js.map +1 -0
- package/dist/commands/start/utils.d.ts +10 -0
- package/dist/commands/start/utils.d.ts.map +1 -0
- package/dist/commands/start/utils.js +191 -0
- package/dist/commands/start/utils.js.map +1 -0
- package/dist/commands/start.d.ts +2 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +2 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/upload.d.ts +3 -0
- package/dist/commands/upload.d.ts.map +1 -0
- package/dist/commands/upload.js +115 -0
- package/dist/commands/upload.js.map +1 -0
- package/dist/commands/workflow-info.d.ts +11 -0
- package/dist/commands/workflow-info.d.ts.map +1 -0
- package/dist/commands/workflow-info.js +159 -0
- package/dist/commands/workflow-info.js.map +1 -0
- package/dist/components/DownloadProgress.d.ts +11 -0
- package/dist/components/DownloadProgress.d.ts.map +1 -0
- package/dist/components/DownloadProgress.js +29 -0
- package/dist/components/DownloadProgress.js.map +1 -0
- package/dist/components/SetupForm.d.ts +8 -0
- package/dist/components/SetupForm.d.ts.map +1 -0
- package/dist/components/SetupForm.js +56 -0
- package/dist/components/SetupForm.js.map +1 -0
- package/dist/components/UploadProgress.d.ts +11 -0
- package/dist/components/UploadProgress.d.ts.map +1 -0
- package/dist/components/UploadProgress.js +29 -0
- package/dist/components/UploadProgress.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +63 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +18 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/api.d.ts +47 -0
- package/dist/utils/api.d.ts.map +1 -0
- package/dist/utils/api.js +676 -0
- package/dist/utils/api.js.map +1 -0
- package/dist/utils/auth.d.ts +4 -0
- package/dist/utils/auth.d.ts.map +1 -0
- package/dist/utils/auth.js +22 -0
- package/dist/utils/auth.js.map +1 -0
- package/dist/utils/docs.d.ts +2 -0
- package/dist/utils/docs.d.ts.map +1 -0
- package/dist/utils/docs.js +41 -0
- package/dist/utils/docs.js.map +1 -0
- package/dist/utils/errorLogger.d.ts +6 -0
- package/dist/utils/errorLogger.d.ts.map +1 -0
- package/dist/utils/errorLogger.js +29 -0
- package/dist/utils/errorLogger.js.map +1 -0
- package/dist/utils/files.d.ts +14 -0
- package/dist/utils/files.d.ts.map +1 -0
- package/dist/utils/files.js +732 -0
- package/dist/utils/files.js.map +1 -0
- package/dist/utils/lockManager.d.ts +15 -0
- package/dist/utils/lockManager.d.ts.map +1 -0
- package/dist/utils/lockManager.js +126 -0
- package/dist/utils/lockManager.js.map +1 -0
- package/dist/utils/summaryGenerator.d.ts +2 -0
- package/dist/utils/summaryGenerator.d.ts.map +1 -0
- package/dist/utils/summaryGenerator.js +183 -0
- package/dist/utils/summaryGenerator.js.map +1 -0
- package/dist/utils/uploadHandler.d.ts +35 -0
- package/dist/utils/uploadHandler.d.ts.map +1 -0
- package/dist/utils/uploadHandler.js +706 -0
- package/dist/utils/uploadHandler.js.map +1 -0
- package/object_response.png +0 -0
- package/object_specs_response.png +0 -0
- package/package.json +56 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import Spinner from 'ink-spinner';
|
|
4
|
+
const DownloadProgress = ({ resourceType, current, total, status, error, }) => {
|
|
5
|
+
return (React.createElement(Box, { flexDirection: "column" },
|
|
6
|
+
React.createElement(Box, null,
|
|
7
|
+
status === 'downloading' && (React.createElement(React.Fragment, null,
|
|
8
|
+
React.createElement(Text, { color: "cyan" },
|
|
9
|
+
React.createElement(Spinner, { type: "dots" })),
|
|
10
|
+
React.createElement(Text, null,
|
|
11
|
+
" Downloading ",
|
|
12
|
+
resourceType,
|
|
13
|
+
"... (",
|
|
14
|
+
current,
|
|
15
|
+
"/",
|
|
16
|
+
total,
|
|
17
|
+
")"))),
|
|
18
|
+
status === 'complete' && (React.createElement(Text, { color: "green" },
|
|
19
|
+
"\u2713 Downloaded ",
|
|
20
|
+
total,
|
|
21
|
+
" ",
|
|
22
|
+
resourceType,
|
|
23
|
+
" successfully!")),
|
|
24
|
+
status === 'error' && (React.createElement(Text, { color: "red" },
|
|
25
|
+
"\u2717 Error: ",
|
|
26
|
+
error)))));
|
|
27
|
+
};
|
|
28
|
+
export { DownloadProgress };
|
|
29
|
+
//# sourceMappingURL=DownloadProgress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DownloadProgress.js","sourceRoot":"","sources":["../../src/components/DownloadProgress.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,OAAO,MAAM,aAAa,CAAC;AAUlC,MAAM,gBAAgB,GAAoC,CAAC,EACzD,YAAY,EACZ,OAAO,EACP,KAAK,EACL,MAAM,EACN,KAAK,GACN,EAAE,EAAE;IACH,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ;QACzB,oBAAC,GAAG;YACD,MAAM,KAAK,aAAa,IAAI,CAC3B;gBACE,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM;oBAChB,oBAAC,OAAO,IAAC,IAAI,EAAC,MAAM,GAAG,CAClB;gBACP,oBAAC,IAAI;;oBAAe,YAAY;;oBAAO,OAAO;;oBAAG,KAAK;wBAAS,CAC9D,CACJ;YACA,MAAM,KAAK,UAAU,IAAI,CACxB,oBAAC,IAAI,IAAC,KAAK,EAAC,OAAO;;gBAAe,KAAK;;gBAAG,YAAY;iCAAsB,CAC7E;YACA,MAAM,KAAK,OAAO,IAAI,CACrB,oBAAC,IAAI,IAAC,KAAK,EAAC,KAAK;;gBAAW,KAAK,CAAQ,CAC1C,CACG,CACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { AuthConfig } from '../types/index.js';
|
|
3
|
+
interface SetupFormProps {
|
|
4
|
+
onSubmit: (config: AuthConfig) => void;
|
|
5
|
+
}
|
|
6
|
+
declare const SetupForm: React.FC<SetupFormProps>;
|
|
7
|
+
export { SetupForm };
|
|
8
|
+
//# sourceMappingURL=SetupForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SetupForm.d.ts","sourceRoot":"","sources":["../../src/components/SetupForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,UAAU,cAAc;IACtB,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;CACxC;AAED,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAkFvC,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { Box, Text, useInput } from 'ink';
|
|
3
|
+
import TextInput from 'ink-text-input';
|
|
4
|
+
const SetupForm = ({ onSubmit }) => {
|
|
5
|
+
const [step, setStep] = useState(0);
|
|
6
|
+
const [endpoint, setEndpoint] = useState('');
|
|
7
|
+
const [email, setEmail] = useState('');
|
|
8
|
+
const [password, setPassword] = useState('');
|
|
9
|
+
const [core, setCore] = useState(false);
|
|
10
|
+
const handleSubmit = () => {
|
|
11
|
+
if (step === 0 && endpoint) {
|
|
12
|
+
setStep(1);
|
|
13
|
+
}
|
|
14
|
+
else if (step === 1 && email) {
|
|
15
|
+
setStep(2);
|
|
16
|
+
}
|
|
17
|
+
else if (step === 2 && password) {
|
|
18
|
+
setStep(3);
|
|
19
|
+
}
|
|
20
|
+
else if (step === 3) {
|
|
21
|
+
onSubmit({ endpoint, email, password, core });
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
const handleCoreToggle = () => {
|
|
25
|
+
setCore(!core);
|
|
26
|
+
};
|
|
27
|
+
useInput((input, key) => {
|
|
28
|
+
if (step === 3) {
|
|
29
|
+
if (input === ' ') {
|
|
30
|
+
handleCoreToggle();
|
|
31
|
+
}
|
|
32
|
+
else if (key.return) {
|
|
33
|
+
handleSubmit();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
return (React.createElement(Box, { flexDirection: "column" },
|
|
38
|
+
React.createElement(Text, { color: "green" }, "Butterfly CLI Setup"),
|
|
39
|
+
React.createElement(Text, null, " "),
|
|
40
|
+
step >= 0 && (React.createElement(Box, null,
|
|
41
|
+
React.createElement(Text, null, "Endpoint: "),
|
|
42
|
+
step === 0 ? (React.createElement(TextInput, { value: endpoint, onChange: setEndpoint, onSubmit: handleSubmit })) : (React.createElement(Text, { color: "cyan" }, endpoint)))),
|
|
43
|
+
step >= 1 && (React.createElement(Box, null,
|
|
44
|
+
React.createElement(Text, null, "Email: "),
|
|
45
|
+
step === 1 ? (React.createElement(TextInput, { value: email, onChange: setEmail, onSubmit: handleSubmit })) : (React.createElement(Text, { color: "cyan" }, email)))),
|
|
46
|
+
step >= 2 && (React.createElement(Box, null,
|
|
47
|
+
React.createElement(Text, null, "Password: "),
|
|
48
|
+
step === 2 ? (React.createElement(TextInput, { value: password, onChange: setPassword, onSubmit: handleSubmit, mask: "*" })) : (React.createElement(Text, { color: "cyan" }, '*'.repeat(password.length))))),
|
|
49
|
+
step >= 3 && (React.createElement(Box, null,
|
|
50
|
+
React.createElement(Text, null, "Enable Core Features: "),
|
|
51
|
+
React.createElement(Text, { color: core ? "green" : "gray" },
|
|
52
|
+
core ? "[✓] Yes" : "[ ] No",
|
|
53
|
+
React.createElement(Text, { color: "gray" }, " (Press space to toggle, enter to continue)"))))));
|
|
54
|
+
};
|
|
55
|
+
export { SetupForm };
|
|
56
|
+
//# sourceMappingURL=SetupForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SetupForm.js","sourceRoot":"","sources":["../../src/components/SetupForm.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface UploadProgressProps {
|
|
3
|
+
current: number;
|
|
4
|
+
total: number;
|
|
5
|
+
currentFile: string;
|
|
6
|
+
status: 'uploading' | 'complete' | 'error';
|
|
7
|
+
error?: string;
|
|
8
|
+
}
|
|
9
|
+
declare const UploadProgress: React.FC<UploadProgressProps>;
|
|
10
|
+
export { UploadProgress };
|
|
11
|
+
//# sourceMappingURL=UploadProgress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UploadProgress.d.ts","sourceRoot":"","sources":["../../src/components/UploadProgress.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,UAAU,mBAAmB;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,QAAA,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAgCjD,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import Spinner from 'ink-spinner';
|
|
4
|
+
const UploadProgress = ({ current, total, currentFile, status, error, }) => {
|
|
5
|
+
return (React.createElement(Box, { flexDirection: "column" },
|
|
6
|
+
React.createElement(Box, null,
|
|
7
|
+
status === 'uploading' && (React.createElement(React.Fragment, null,
|
|
8
|
+
React.createElement(Text, { color: "cyan" },
|
|
9
|
+
React.createElement(Spinner, { type: "dots" })),
|
|
10
|
+
React.createElement(Text, null,
|
|
11
|
+
" Uploading files... (",
|
|
12
|
+
current,
|
|
13
|
+
"/",
|
|
14
|
+
total,
|
|
15
|
+
")"))),
|
|
16
|
+
status === 'complete' && (React.createElement(Text, { color: "green" },
|
|
17
|
+
"\u2713 Uploaded ",
|
|
18
|
+
total,
|
|
19
|
+
" files successfully!")),
|
|
20
|
+
status === 'error' && (React.createElement(Text, { color: "red" },
|
|
21
|
+
"\u2717 Error: ",
|
|
22
|
+
error))),
|
|
23
|
+
status === 'uploading' && currentFile && (React.createElement(Box, { marginLeft: 2 },
|
|
24
|
+
React.createElement(Text, { color: "gray" },
|
|
25
|
+
"Current: ",
|
|
26
|
+
currentFile)))));
|
|
27
|
+
};
|
|
28
|
+
export { UploadProgress };
|
|
29
|
+
//# sourceMappingURL=UploadProgress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UploadProgress.js","sourceRoot":"","sources":["../../src/components/UploadProgress.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,OAAO,MAAM,aAAa,CAAC;AAUlC,MAAM,cAAc,GAAkC,CAAC,EACrD,OAAO,EACP,KAAK,EACL,WAAW,EACX,MAAM,EACN,KAAK,GACN,EAAE,EAAE;IACH,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ;QACzB,oBAAC,GAAG;YACD,MAAM,KAAK,WAAW,IAAI,CACzB;gBACE,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM;oBAChB,oBAAC,OAAO,IAAC,IAAI,EAAC,MAAM,GAAG,CAClB;gBACP,oBAAC,IAAI;;oBAAuB,OAAO;;oBAAG,KAAK;wBAAS,CACnD,CACJ;YACA,MAAM,KAAK,UAAU,IAAI,CACxB,oBAAC,IAAI,IAAC,KAAK,EAAC,OAAO;;gBAAa,KAAK;uCAA4B,CAClE;YACA,MAAM,KAAK,OAAO,IAAI,CACrB,oBAAC,IAAI,IAAC,KAAK,EAAC,KAAK;;gBAAW,KAAK,CAAQ,CAC1C,CACG;QACL,MAAM,KAAK,WAAW,IAAI,WAAW,IAAI,CACxC,oBAAC,GAAG,IAAC,UAAU,EAAE,CAAC;YAChB,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM;;gBAAW,WAAW,CAAQ,CAC5C,CACP,CACG,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { program } from 'commander';
|
|
3
|
+
import { config } from 'dotenv';
|
|
4
|
+
import setupCommand from './commands/setup.js';
|
|
5
|
+
import downloadCommand from './commands/download.js';
|
|
6
|
+
import startCommand from './commands/start.js';
|
|
7
|
+
import uploadCommand from './commands/upload.js';
|
|
8
|
+
import addCommand from './commands/add.js';
|
|
9
|
+
import workflowInfoCommand from './commands/workflow-info.js';
|
|
10
|
+
config();
|
|
11
|
+
program
|
|
12
|
+
.name('butterfly-cli')
|
|
13
|
+
.description('CLI tool to download resources from the Butterfly platform')
|
|
14
|
+
.version('1.0.0');
|
|
15
|
+
program
|
|
16
|
+
.command('setup')
|
|
17
|
+
.description('Configure authentication for the Butterfly platform')
|
|
18
|
+
.action(setupCommand);
|
|
19
|
+
program
|
|
20
|
+
.command('download')
|
|
21
|
+
.description('Download resources from the Butterfly platform')
|
|
22
|
+
.option('-t, --type <type>', 'Resource type to download (objects, reports, bfy_ai_tasks, bfy_state_machines, pages, bfy_cronjobs, cms_email_templates, cms_email_layouts, bfy_workflows)')
|
|
23
|
+
.option('-n, --name <name>', 'Specific resource name to download')
|
|
24
|
+
.option('-o, --output <path>', 'Output directory path', './butterfly-resources')
|
|
25
|
+
.option('--cleanup', 'Clean existing contents before downloading')
|
|
26
|
+
.action(downloadCommand);
|
|
27
|
+
program
|
|
28
|
+
.command('start')
|
|
29
|
+
.description('Watch for changes in objects folder and sync with Butterfly platform')
|
|
30
|
+
.option('-o, --output <path>', 'Output directory path', './butterfly-resources')
|
|
31
|
+
.action(startCommand);
|
|
32
|
+
program
|
|
33
|
+
.command('upload <targets...>')
|
|
34
|
+
.description('Upload files or folders to the Butterfly platform')
|
|
35
|
+
.action(uploadCommand);
|
|
36
|
+
program
|
|
37
|
+
.command('add')
|
|
38
|
+
.description('Create new resources via API and download them')
|
|
39
|
+
.option('-t, --type <type>', 'Resource type to create (workflow, workflow-node, workflow-connection)')
|
|
40
|
+
.option('-w, --workflow <name>', 'Workflow name or ID (for workflow-node, workflow-connection)')
|
|
41
|
+
.option('-v, --version <number>', 'Version number (defaults to latest)')
|
|
42
|
+
.option('--title <title>', 'Title/name of the resource')
|
|
43
|
+
.option('--node-type <type>', 'Node identifier key (e.g., CustomScript, WebHook, RESTAPI)')
|
|
44
|
+
.option('--node-group <group>', 'Node group class (e.g., Code, Trigger, Connector, Output)')
|
|
45
|
+
.option('--system-name <name>', 'System name for the resource')
|
|
46
|
+
.option('--connect-from <spec>', 'Connect FROM existing node TO new node (format: node_id[:output_key])')
|
|
47
|
+
.option('--connect-to <spec>', 'Connect FROM new node TO existing node (format: node_id[:input_key])')
|
|
48
|
+
.option('--from <id>', 'Source node ID (for workflow-connection)')
|
|
49
|
+
.option('--from-output <key>', 'Source node output key (default: output)')
|
|
50
|
+
.option('--to <id>', 'Target node ID (for workflow-connection)')
|
|
51
|
+
.option('--to-input <key>', 'Target node input key (default: input)')
|
|
52
|
+
.option('-o, --output <path>', 'Output directory path', './butterfly-resources')
|
|
53
|
+
.action(addCommand);
|
|
54
|
+
program
|
|
55
|
+
.command('workflow-info')
|
|
56
|
+
.description('Get information about workflow node groups and node types')
|
|
57
|
+
.option('--groups', 'List all available node groups')
|
|
58
|
+
.option('--nodes <group>', 'List nodes in a specific group (e.g., --nodes Database)')
|
|
59
|
+
.option('--details <node>', 'Get details for a specific node (requires --group)')
|
|
60
|
+
.option('--group <group>', 'Node group for --details option')
|
|
61
|
+
.action(workflowInfoCommand);
|
|
62
|
+
program.parse();
|
|
63
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAC/C,OAAO,eAAe,MAAM,wBAAwB,CAAC;AACrD,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAC/C,OAAO,aAAa,MAAM,sBAAsB,CAAC;AACjD,OAAO,UAAU,MAAM,mBAAmB,CAAC;AAC3C,OAAO,mBAAmB,MAAM,6BAA6B,CAAC;AAE9D,MAAM,EAAE,CAAC;AAET,OAAO;KACJ,IAAI,CAAC,eAAe,CAAC;KACrB,WAAW,CAAC,4DAA4D,CAAC;KACzE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,qDAAqD,CAAC;KAClE,MAAM,CAAC,YAAY,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,mBAAmB,EAAE,4JAA4J,CAAC;KACzL,MAAM,CAAC,mBAAmB,EAAE,oCAAoC,CAAC;KACjE,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,EAAE,uBAAuB,CAAC;KAC/E,MAAM,CAAC,WAAW,EAAE,4CAA4C,CAAC;KACjE,MAAM,CAAC,eAAe,CAAC,CAAC;AAE3B,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,sEAAsE,CAAC;KACnF,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,EAAE,uBAAuB,CAAC;KAC/E,MAAM,CAAC,YAAY,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,qBAAqB,CAAC;KAC9B,WAAW,CAAC,mDAAmD,CAAC;KAChE,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,mBAAmB,EAAE,wEAAwE,CAAC;KACrG,MAAM,CAAC,uBAAuB,EAAE,8DAA8D,CAAC;KAC/F,MAAM,CAAC,wBAAwB,EAAE,qCAAqC,CAAC;KACvE,MAAM,CAAC,iBAAiB,EAAE,4BAA4B,CAAC;KACvD,MAAM,CAAC,oBAAoB,EAAE,4DAA4D,CAAC;KAC1F,MAAM,CAAC,sBAAsB,EAAE,2DAA2D,CAAC;KAC3F,MAAM,CAAC,sBAAsB,EAAE,8BAA8B,CAAC;KAC9D,MAAM,CAAC,uBAAuB,EAAE,uEAAuE,CAAC;KACxG,MAAM,CAAC,qBAAqB,EAAE,sEAAsE,CAAC;KACrG,MAAM,CAAC,aAAa,EAAE,0CAA0C,CAAC;KACjE,MAAM,CAAC,qBAAqB,EAAE,0CAA0C,CAAC;KACzE,MAAM,CAAC,WAAW,EAAE,0CAA0C,CAAC;KAC/D,MAAM,CAAC,kBAAkB,EAAE,wCAAwC,CAAC;KACpE,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,EAAE,uBAAuB,CAAC;KAC/E,MAAM,CAAC,UAAU,CAAC,CAAC;AAEtB,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,2DAA2D,CAAC;KACxE,MAAM,CAAC,UAAU,EAAE,gCAAgC,CAAC;KACpD,MAAM,CAAC,iBAAiB,EAAE,yDAAyD,CAAC;KACpF,MAAM,CAAC,kBAAkB,EAAE,oDAAoD,CAAC;KAChF,MAAM,CAAC,iBAAiB,EAAE,iCAAiC,CAAC;KAC5D,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAE/B,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface AuthConfig {
|
|
2
|
+
endpoint: string;
|
|
3
|
+
email: string;
|
|
4
|
+
password: string;
|
|
5
|
+
core?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface DownloadOptions {
|
|
8
|
+
type?: string;
|
|
9
|
+
name?: string;
|
|
10
|
+
output?: string;
|
|
11
|
+
cleanup?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface ApiResponse<T> {
|
|
14
|
+
success: boolean;
|
|
15
|
+
data?: T;
|
|
16
|
+
error?: string;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { AxiosInstance } from 'axios';
|
|
2
|
+
import { AuthConfig } from '../types/index.js';
|
|
3
|
+
export declare class ButterflyAPI {
|
|
4
|
+
private config;
|
|
5
|
+
private client;
|
|
6
|
+
private cookieJar;
|
|
7
|
+
private csrfToken?;
|
|
8
|
+
private debug;
|
|
9
|
+
constructor(config: AuthConfig);
|
|
10
|
+
fetchCSRFToken(): Promise<string>;
|
|
11
|
+
authenticate(): Promise<void>;
|
|
12
|
+
get httpClient(): AxiosInstance;
|
|
13
|
+
downloadResource(type: string, name?: string): Promise<any[]>;
|
|
14
|
+
fetchTable(tableName: string, column?: string, value?: string): Promise<any[]>;
|
|
15
|
+
fetchObjects(): Promise<any[]>;
|
|
16
|
+
fetchCMSObjects(): Promise<any[]>;
|
|
17
|
+
fetchObjectSpecs(objectId: number): Promise<any[]>;
|
|
18
|
+
fetchAllObjectSpecs(): Promise<any[]>;
|
|
19
|
+
fetchReports(): Promise<any[]>;
|
|
20
|
+
fetchReportCategories(): Promise<any[]>;
|
|
21
|
+
fetchReportSpecs(reportId: number): Promise<any[]>;
|
|
22
|
+
fetchReportQueries(reportId: number): Promise<any[]>;
|
|
23
|
+
fetchAllReportSpecs(): Promise<any[]>;
|
|
24
|
+
fetchAllReportQueries(): Promise<any[]>;
|
|
25
|
+
updateReport(reportId: number, updateData: Record<string, any>): Promise<any>;
|
|
26
|
+
createReport(reportData: Record<string, any>): Promise<any>;
|
|
27
|
+
updateReportSpec(specId: number, updateData: Record<string, any>): Promise<any>;
|
|
28
|
+
createReportSpec(specData: Record<string, any>): Promise<any>;
|
|
29
|
+
updateReportQuery(queryId: number, updateData: Record<string, any>): Promise<any>;
|
|
30
|
+
createReportQuery(queryData: Record<string, any>): Promise<any>;
|
|
31
|
+
uploadResource(filePath: string, data: any): Promise<any>;
|
|
32
|
+
private updateObject;
|
|
33
|
+
private updateObjectSpec;
|
|
34
|
+
private updateReportFromData;
|
|
35
|
+
private updateReportSpecFromData;
|
|
36
|
+
createWorkflowConnection(connectionData: Record<string, any>): Promise<any>;
|
|
37
|
+
updateWorkflowConnection(connectionId: number, updateData: Record<string, any>): Promise<any>;
|
|
38
|
+
deleteWorkflowConnection(connectionId: number): Promise<any>;
|
|
39
|
+
createWorkflowNode(nodeData: Record<string, any>): Promise<any>;
|
|
40
|
+
updateWorkflowNode(nodeId: number, updateData: Record<string, any>): Promise<any>;
|
|
41
|
+
deleteWorkflowNode(nodeId: number): Promise<any>;
|
|
42
|
+
createWorkflowVersion(versionData: Record<string, any>): Promise<any>;
|
|
43
|
+
updateWorkflowVersion(versionId: number, updateData: Record<string, any>): Promise<any>;
|
|
44
|
+
publishWorkflowVersion(versionId: number): Promise<any>;
|
|
45
|
+
archiveWorkflowVersion(versionId: number): Promise<any>;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"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"}
|