Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat: Better Handling of FrameButton post actions #1053

Merged
merged 8 commits into from
Aug 15, 2024
1 change: 1 addition & 0 deletions src/frame/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ export type FrameButtonMetadata =
| {
action?: 'post' | 'post_redirect';
label: string;
postUrl?: string;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this part of the Frame Spec? And where is this writtend?

Copy link
Contributor Author

@brendan-defi brendan-defi Aug 15, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image

Per Button Actions, we are told that a post should send an HTTP request to the button's post_url.

But as currently configured, getFrameMetadata does not set a fc:frame:button:[id]:post_url property for post actions, only tx actions:

  if (buttons) {
    buttons.forEach((button, index) => {
      metadata[`fc:frame:button:${index + 1}`] = button.label;
      if (button.action) {
        metadata[`fc:frame:button:${index + 1}:action`] = button.action;
      }
      if (button.target) {
        metadata[`fc:frame:button:${index + 1}:target`] = button.target;
      }
      if (button.action && button.action === 'tx' && button.postUrl) {
        metadata[`fc:frame:button:${index + 1}:post_url`] = button.postUrl;
      }
    });
  }

The above change to FrameButtonMetadata is required for strict type-checking of the getFrameMetadata logic.

target?: string;
}
| {
Expand Down
2 changes: 1 addition & 1 deletion src/frame/utils/getFrameMetadata.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ export const getFrameMetadata = ({
if (button.target) {
metadata[`fc:frame:button:${index + 1}:target`] = button.target;
}
if (button.action && button.action === 'tx' && button.postUrl) {
if (button.action && (button.action === 'tx' || button.action === 'post') && button.postUrl) {
metadata[`fc:frame:button:${index + 1}:post_url`] = button.postUrl;
}
});
Expand Down
Loading