Skip to content

Commit c403d4c

Browse files
committed
Merge branch 'main' into develop
2 parents 525b761 + f506c32 commit c403d4c

35 files changed

+8572
-3278
lines changed

README.md

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,27 @@ A comprehensive web-based developer toolkit built with Flask. Simple, fast, and
1313

1414
## Features
1515

16-
- **9 Developer Tools** - JSON/YAML formatters, converters, diff viewer, regex tester, and more
16+
- **11 Developer Tools** - JSON/YAML formatters, converters, diff viewer, regex tester, aws-sf-viewer and more
1717
- **History Tracking** - Save and retrieve tool usage across sessions
1818
- **Configurable** - Enable/disable tools via configuration
1919
- **Modern UI** - Clean, responsive interface
2020
- **Privacy-First** - All processing happens locally
2121

2222
## Available Tools
2323

24-
| Tool | Description | Status |
25-
|------|-------------|--------|
26-
| **Scratchpad** | Simple note-taking tool with history tracking | Stable |
27-
| **JSON Tool** | Format, validate, and minify JSON data | Stable |
28-
| **YAML Tool** | Format, validate, and work with YAML data | Stable |
29-
| **JSON-YAML-XML Converter** | Bidirectional format conversion | Stable |
30-
| **Text Diff Tool** | Compare text side-by-side with highlighting | Stable |
31-
| **Regex Tester** | Interactive regex testing with live highlighting | Stable |
32-
| **Cron Parser** | Parse cron expressions with human-readable output | Stable |
33-
| **Scientific Calculator** | Advanced calculator with graphing support | Stable |
34-
| **JWT Decoder** | Decode and analyze JWT tokens | Stable |
35-
| **Sources Manager** | Manage data sources (local, S3, SFTP, HTTP) | Stable |
36-
| **AWS Step Functions Viewer** | Visualize state machines | Beta (disabled by default) |
24+
| Tool | Description | Status |
25+
|------|-------------|-----------------|
26+
| **Scratchpad** | Simple note-taking tool with history tracking | Disabled (Beta) |
27+
| **JSON Tool** | Format, validate, and minify JSON data | Stable |
28+
| **YAML Tool** | Format, validate, and work with YAML data | Stable |
29+
| **JSON-YAML-XML Converter** | Bidirectional format conversion | Stable |
30+
| **Text Diff Tool** | Compare text side-by-side with highlighting | Stable |
31+
| **Regex Tester** | Interactive regex testing with live highlighting | Stable |
32+
| **Cron Parser** | Parse cron expressions with human-readable output | Stable |
33+
| **Scientific Calculator** | Advanced calculator with graphing support | Stable |
34+
| **JWT Decoder** | Decode and analyze JWT tokens | Stable |
35+
| **Sources Manager** | Manage data sources (local, S3, SFTP, HTTP) | Stable |
36+
| **AWS Step Functions Viewer** | Visualize state machines | Beta |
3737

3838
## Screenshots
3939

@@ -55,6 +55,9 @@ A comprehensive web-based developer toolkit built with Flask. Simple, fast, and
5555
### Scientific Calculator
5656
![Scientific Calculator](screenshots/scientific-calculator.png)
5757

58+
### AWS SF Viewer (Beta)
59+
![AWS SF Viewer](screenshots/aws-sf-viewer.png)
60+
5861
## Quick Start
5962

6063
```bash

config/config.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,12 @@
6363
"description": "Data sources manager"
6464
},
6565
"aws-sf-viewer": {
66-
"enabled": false,
66+
"enabled": true,
6767
"description": "AWS Step Functions state machine viewer"
68+
},
69+
"workflow-processor": {
70+
"enabled": false,
71+
"description": "Workflow processor for large files"
6872
}
6973
},
7074
"history_limits": {
Lines changed: 288 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,288 @@
1+
{
2+
"Comment": "Ultra-complex orchestration with nested parallelism, map, saga, and callbacks",
3+
"StartAt": "ValidateRequest",
4+
"States": {
5+
6+
"ValidateRequest": {
7+
"Type": "Task",
8+
"Resource": "arn:aws:lambda:us-east-1:123:function:validate",
9+
"TimeoutSeconds": 10,
10+
"Retry": [{
11+
"ErrorEquals": ["States.ALL"],
12+
"IntervalSeconds": 2,
13+
"MaxAttempts": 3,
14+
"BackoffRate": 2
15+
}],
16+
"Catch": [{
17+
"ErrorEquals": ["States.ALL"],
18+
"Next": "FailWorkflow"
19+
}],
20+
"Next": "PreflightChecks"
21+
},
22+
23+
"PreflightChecks": {
24+
"Type": "Parallel",
25+
"Next": "MainProcessing",
26+
"Branches": [
27+
28+
{
29+
"StartAt": "CheckQuota",
30+
"States": {
31+
"CheckQuota": {
32+
"Type": "Task",
33+
"Resource": "arn:aws:lambda:us-east-1:123:function:check-quota",
34+
"End": true
35+
}
36+
}
37+
},
38+
39+
{
40+
"StartAt": "CheckDependencies",
41+
"States": {
42+
"CheckDependencies": {
43+
"Type": "Task",
44+
"Resource": "arn:aws:lambda:us-east-1:123:function:check-deps",
45+
"End": true
46+
}
47+
}
48+
},
49+
50+
{
51+
"StartAt": "CheckFeatureFlags",
52+
"States": {
53+
"CheckFeatureFlags": {
54+
"Type": "Task",
55+
"Resource": "arn:aws:lambda:us-east-1:123:function:feature-flags",
56+
"End": true
57+
}
58+
}
59+
}
60+
]
61+
},
62+
63+
"MainProcessing": {
64+
"Type": "Parallel",
65+
"Next": "EvaluateGlobalRisk",
66+
"Branches": [
67+
68+
{
69+
"StartAt": "IngestPipeline",
70+
"States": {
71+
"IngestPipeline": {
72+
"Type": "Parallel",
73+
"Next": "PersistRawData",
74+
"Branches": [
75+
76+
{
77+
"StartAt": "PullFromS3",
78+
"States": {
79+
"PullFromS3": {
80+
"Type": "Task",
81+
"Resource": "arn:aws:lambda:us-east-1:123:function:pull-s3",
82+
"End": true
83+
}
84+
}
85+
},
86+
87+
{
88+
"StartAt": "PullFromAPI",
89+
"States": {
90+
"PullFromAPI": {
91+
"Type": "Task",
92+
"Resource": "arn:aws:lambda:us-east-1:123:function:pull-api",
93+
"Retry": [{
94+
"ErrorEquals": ["States.Timeout"],
95+
"IntervalSeconds": 5,
96+
"MaxAttempts": 3
97+
}],
98+
"End": true
99+
}
100+
}
101+
}
102+
103+
]
104+
},
105+
106+
"PersistRawData": {
107+
"Type": "Task",
108+
"Resource": "arn:aws:lambda:us-east-1:123:function:persist-raw",
109+
"End": true
110+
}
111+
}
112+
},
113+
114+
{
115+
"StartAt": "RiskAssessment",
116+
"States": {
117+
"RiskAssessment": {
118+
"Type": "Parallel",
119+
"Next": "ComputeRiskScore",
120+
"Branches": [
121+
122+
{
123+
"StartAt": "FraudScan",
124+
"States": {
125+
"FraudScan": {
126+
"Type": "Task",
127+
"Resource": "arn:aws:lambda:us-east-1:123:function:fraud-scan",
128+
"End": true
129+
}
130+
}
131+
},
132+
133+
{
134+
"StartAt": "ComplianceScan",
135+
"States": {
136+
"ComplianceScan": {
137+
"Type": "Task",
138+
"Resource": "arn:aws:lambda:us-east-1:123:function:compliance",
139+
"End": true
140+
}
141+
}
142+
},
143+
144+
{
145+
"StartAt": "AnomalyDetection",
146+
"States": {
147+
"AnomalyDetection": {
148+
"Type": "Task",
149+
"Resource": "arn:aws:lambda:us-east-1:123:function:anomaly",
150+
"End": true
151+
}
152+
}
153+
}
154+
155+
]
156+
},
157+
158+
"ComputeRiskScore": {
159+
"Type": "Task",
160+
"Resource": "arn:aws:lambda:us-east-1:123:function:risk-score",
161+
"End": true
162+
}
163+
}
164+
},
165+
166+
{
167+
"StartAt": "MetadataPipeline",
168+
"States": {
169+
"MetadataPipeline": {
170+
"Type": "Task",
171+
"Resource": "arn:aws:lambda:us-east-1:123:function:metadata",
172+
"End": true
173+
}
174+
}
175+
}
176+
]
177+
},
178+
179+
"EvaluateGlobalRisk": {
180+
"Type": "Choice",
181+
"Choices": [
182+
{
183+
"Variable": "$.risk.score",
184+
"NumericGreaterThan": 80,
185+
"Next": "ManualApproval"
186+
}
187+
],
188+
"Default": "ProcessItems"
189+
},
190+
191+
"ProcessItems": {
192+
"Type": "Map",
193+
"ItemsPath": "$.items",
194+
"MaxConcurrency": 10,
195+
"Iterator": {
196+
"StartAt": "ItemRouting",
197+
"States": {
198+
199+
"ItemRouting": {
200+
"Type": "Choice",
201+
"Choices": [
202+
{
203+
"Variable": "$.type",
204+
"StringEquals": "FAST",
205+
"Next": "FastItemFlow"
206+
}
207+
],
208+
"Default": "SlowItemFlow"
209+
},
210+
211+
"FastItemFlow": {
212+
"Type": "Task",
213+
"Resource": "arn:aws:lambda:us-east-1:123:function:fast-item",
214+
"End": true
215+
},
216+
217+
"SlowItemFlow": {
218+
"Type": "Parallel",
219+
"Next": "FinalizeItem",
220+
"Branches": [
221+
222+
{
223+
"StartAt": "TransformItem",
224+
"States": {
225+
"TransformItem": {
226+
"Type": "Task",
227+
"Resource": "arn:aws:lambda:us-east-1:123:function:transform",
228+
"End": true
229+
}
230+
}
231+
},
232+
233+
{
234+
"StartAt": "EnrichItem",
235+
"States": {
236+
"EnrichItem": {
237+
"Type": "Task",
238+
"Resource": "arn:aws:lambda:us-east-1:123:function:enrich",
239+
"End": true
240+
}
241+
}
242+
}
243+
244+
]
245+
},
246+
247+
"FinalizeItem": {
248+
"Type": "Task",
249+
"Resource": "arn:aws:lambda:us-east-1:123:function:finalize-item",
250+
"End": true
251+
}
252+
}
253+
},
254+
"Next": "FinalizeWorkflow"
255+
},
256+
257+
"ManualApproval": {
258+
"Type": "Task",
259+
"Resource": "arn:aws:states:::sns:publish.waitForTaskToken",
260+
"TimeoutSeconds": 86400,
261+
"HeartbeatSeconds": 3600,
262+
"Parameters": {
263+
"Message": {
264+
"TaskToken.$": "$.Task.Token",
265+
"Input.$": "$"
266+
},
267+
"TopicArn": "arn:aws:sns:us-east-1:123:manual-approval"
268+
},
269+
"Next": "ProcessItems"
270+
},
271+
272+
"FinalizeWorkflow": {
273+
"Type": "Task",
274+
"Resource": "arn:aws:lambda:us-east-1:123:function:finalize",
275+
"Next": "SucceedWorkflow"
276+
},
277+
278+
"SucceedWorkflow": {
279+
"Type": "Succeed"
280+
},
281+
282+
"FailWorkflow": {
283+
"Type": "Fail",
284+
"Error": "WorkflowFailed",
285+
"Cause": "Unhandled failure"
286+
}
287+
}
288+
}

0 commit comments

Comments
 (0)