Skip to content

Commit 1bca419

Browse files
Merge pull request #9 from depatchedmode/v0.3.1
#6
2 parents 801f056 + aadd647 commit 1bca419

File tree

7 files changed

+71
-9
lines changed

7 files changed

+71
-9
lines changed

api/index.js

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ import buildButtons from '../modules/buildButtons';
55
import getTargetFrame from '../modules/getTargetFrame';
66

77
export default async (req, context) => {
8-
const debug = process.env.DEBUG_MODE;
9-
const host = process.env.URL;
108
const payload = await parseRequest(req);
119
let from = 'poster';
1210
let buttonId = null;
@@ -17,7 +15,33 @@ export default async (req, context) => {
1715
buttonId = payload.untrustedData?.buttonIndex;
1816
}
1917

20-
const { frameSrc, frameName } = getTargetFrame(from,buttonId,frames);
18+
const { frameSrc, frameName, redirectUrl } = getTargetFrame(from,buttonId,frames);
19+
if (redirectUrl) {
20+
return await respondWithRedirect(redirectUrl);
21+
} else if (frameSrc) {
22+
return await respondWithFrame(frameName, frameSrc, payload);
23+
} else {
24+
console.error(`🤷🏻`)
25+
}
26+
}
27+
28+
const respondWithRedirect = (redirectUrl) => {
29+
const internalRedirectUrl = new URL(`${process.env.URL}/redirect`)
30+
internalRedirectUrl.searchParams.set('redirectUrl',redirectUrl);
31+
return new Response('<div>redirect</div>',
32+
{
33+
status: 302,
34+
headers: {
35+
'Location': internalRedirectUrl,
36+
},
37+
}
38+
);
39+
}
40+
41+
const respondWithFrame = async (frameName, frameSrc, payload) => {
42+
const debug = process.env.DEBUG_MODE;
43+
const host = process.env.URL;
44+
2145
const frameContent = {
2246
image: ``,
2347
buttons: buildButtons(frameSrc.buttons),

api/redirect.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// GET /redirect
2+
// Redirects to an external URL based on buttonIndex parameter. Used to work
3+
// around the same origin policy on frames, which is being removed soon.
4+
export default async (req, context) => {
5+
const requestUrl = new URL(req.url);
6+
const redirectUrl = requestUrl.searchParams.get('redirectUrl');
7+
8+
return new Response('<div>redirect</div>',
9+
{
10+
status: 302,
11+
headers: {
12+
'Location': redirectUrl,
13+
},
14+
}
15+
);
16+
}
17+
18+
export const config = {
19+
path: "/redirect"
20+
};

modules/buildButtons.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
export default (buttons) => {
22
return buttons
3-
.map((button, index) => `<meta property="fc:frame:button:${index + 1}" content="${button.label}" />`)
3+
.map((button, index) => {
4+
let buttonMarkup = `<meta property="fc:frame:button:${index + 1}" content="${button.label}" />`;
5+
if (button.url) {
6+
buttonMarkup += `\n<meta property="fc:frame:button:${index + 1}:action" content="post_redirect" />`
7+
}
8+
return buttonMarkup;
9+
})
410
.join('\n');
511
}

modules/getTargetFrame.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,17 @@ const DEFAULT_FRAME = 'poster';
22

33
export default (name, buttonId, frames) => {
44
let frameName = DEFAULT_FRAME;
5+
let redirectUrl = null;
56
if (name && buttonId) {
67
const originFrame = frames[name];
7-
frameName = originFrame.buttons[buttonId-1].goTo;
8+
const button = originFrame.buttons[buttonId-1];
9+
frameName = button.goTo;
10+
redirectUrl = button.url;
811
}
912
const frameSrc = frames[frameName];
1013
return {
1114
frameSrc,
12-
frameName
15+
frameName,
16+
redirectUrl
1317
};
1418
}

src/frames/count.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ const build = async (frameData) => {
2929

3030
export const buttons = [
3131
{
32-
label: 'Frame me!',
32+
label: '🫵 Frame me!',
3333
goTo: 'count',
3434
},
3535
{
36-
label: 'View credits',
36+
label: '🎬 View credits',
3737
goTo: 'credits',
3838
}
3939
]

src/frames/credits.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ export default {
44
{
55
label: '⬅️ Back',
66
goTo: 'count',
7+
},
8+
{
9+
label: '{😺} View on Github',
10+
url: 'https://github.com/depatchedmode/simplest-frame'
711
}
812
]
913
};

src/frames/poster.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@ export default {
33
image: `/images/poster.png`,
44
buttons: [
55
{
6-
label: 'Begin',
6+
label: '🔳 Try Demo',
77
goTo: 'count',
8+
},
9+
{
10+
label: '{😺} View on Github',
11+
url: 'https://github.com/depatchedmode/simplest-frame'
812
}
913
]
1014
};

0 commit comments

Comments
 (0)