feat: Release v1.2.0 with Transform Steps and Randomization Variables#34
Conversation
rdwr-taly
commented
Jan 14, 2026
- Integrated Transform Steps for ordered operations including base64/JWT, JSON set, and math operations.
- Added support for special variables: RANDOM_INT and RANDOM_STRING, cached per flow iteration.
- Updated RELEASE_NOTES.md and roadmap to reflect new features.
- Enhanced FlowRunner with new TransformStep class and associated methods.
- Improved unit tests for random variable substitution and transform step execution.
- Introduced container control stub for E2E tests.
- Integrated Transform Steps for ordered operations including base64/JWT, JSON set, and math operations. - Added support for special variables: RANDOM_INT and RANDOM_STRING, cached per flow iteration. - Updated RELEASE_NOTES.md and roadmap to reflect new features. - Enhanced FlowRunner with new TransformStep class and associated methods. - Improved unit tests for random variable substitution and transform step execution. - Introduced container control stub for E2E tests.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 295ca7e7da
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| _TRANSFORM_OP_DEFS: Dict[str, Dict[str, Any]] = { | ||
| "base64_decode": {"args": 1, "options": {"base64": "url", "as": "text"}}, | ||
| "base64_encode": {"args": 1, "options": {"base64": "url", "padding": "strip"}}, | ||
| "jwt_decode": {"args": 1, "options": {"base64": "url", "stripBearer": "true"}}, | ||
| "jwt_encode": {"args": 3, "options": {"base64": "url", "signatureMode": "reuse", "algorithm": "HS256"}}, | ||
| "json_set": {"args": 3, "options": {}}, |
There was a problem hiding this comment.
Allow jwt_encode to accept signing secret
jwt_encode supports signatureMode=sign, but _normalize_transform_op only passes through option keys listed in _TRANSFORM_OP_DEFS. Because the jwt_encode entry omits secret, any provided secret is dropped and _execute_transform_op later raises “JWT signing requires a secret.” This makes signed JWT generation impossible even when users supply a secret, so flows that rely on signed tokens will always fail.
Useful? React with 👍 / 👎.
| op_name = safe_op.get("op") | ||
| if op_name not in _TRANSFORM_OP_DEFS: | ||
| op_name = "base64_decode" | ||
|
|
There was a problem hiding this comment.
Reject unknown transform op names
When a transform op name is misspelled or unsupported, _normalize_transform_op silently coerces it to base64_decode. That prevents validation errors and produces unrelated outputs (often an empty string), which can corrupt downstream context values without any obvious failure. A flow with a typo will appear to “succeed” while operating on the wrong data.
Useful? React with 👍 / 👎.