|
| 1 | +import { getFrameMessage } from "frames.js" |
1 | 2 | import landingPage from '../src/landing-page'; |
2 | | -import frames from '../src/frames'; |
3 | 3 | import { parseRequest, objectToURLSearchParams } from '../modules/utils'; |
4 | 4 | import buildButtons from '../modules/buildButtons'; |
5 | 5 | import buildInputs from '../modules/buildInputs'; |
6 | 6 | import getTargetFrame from '../modules/getTargetFrame'; |
7 | | -import { validateMessage } from '../src/data/message'; |
8 | | -import { isFrameStolen } from '../src/data/antitheft'; |
9 | 7 |
|
10 | 8 | export default async (req, context) => { |
11 | 9 | try { |
12 | 10 | const requestURL = new URL(req.url); |
13 | 11 | const payload = await parseRequest(req); |
14 | | - let from = requestURL.searchParams.get('frame'); |
15 | | - let buttonId = null; |
16 | | - let frameIsStolen = false; |
| 12 | + const frameMessage = payload ? await getFrameMessage(payload, { |
| 13 | + hubHttpUrl: process.env.FARCASTER_HUB |
| 14 | + }) : {}; |
17 | 15 |
|
18 | | - if (payload) { |
19 | | - payload.referringFrame = from; |
20 | | - payload.validData = await validateMessage(payload.trustedData.messageBytes); |
21 | | - } |
22 | | - |
23 | | - if (payload?.validData) { |
24 | | - buttonId = payload.validData.data.frameActionBody.buttonIndex; |
25 | | - frameIsStolen = await isFrameStolen(payload); |
26 | | - } |
| 16 | + // extending the frames.js frameMessage object with a few things |
| 17 | + // we require |
| 18 | + // TODO: see about refactoring this more towards the frames.js style |
| 19 | + frameMessage.from = requestURL.searchParams.get('frame'); |
| 20 | + frameMessage.requestURL = payload?.untrustedData.url; |
27 | 21 |
|
28 | | - const { targetFrameSrc, targetFrameName, redirectUrl } = getTargetFrame(from, buttonId, frames); |
| 22 | + const { targetFrame, redirectURL } = await getTargetFrame(frameMessage); |
29 | 23 |
|
30 | | - if (redirectUrl) { |
31 | | - return await respondWithRedirect(redirectUrl); |
32 | | - } else if (frameIsStolen) { |
33 | | - return await respondWithFrame('stolen', frames['stolen'], payload); |
34 | | - } else if (targetFrameSrc) { |
35 | | - return await respondWithFrame(targetFrameName, targetFrameSrc, payload); |
| 24 | + if (redirectURL) { |
| 25 | + return await respondWithRedirect(redirectURL); |
| 26 | + } else if (targetFrame) { |
| 27 | + return await respondWithFrame(targetFrame, frameMessage); |
36 | 28 | } else { |
37 | | - console.error(`Unknown frame requested: ${targetFrameName}`); |
| 29 | + console.error(`Unknown frame requested: ${targetFrame.name}`); |
38 | 30 | } |
39 | 31 | } catch (error) { |
40 | 32 | console.error(`Error processing request: ${error}`); |
41 | 33 | } |
42 | 34 | }; |
43 | 35 |
|
44 | | -const respondWithRedirect = (redirectUrl) => { |
45 | | - const internalRedirectUrl = new URL(`${process.env.URL}/redirect`) |
46 | | - internalRedirectUrl.searchParams.set('redirectUrl',redirectUrl); |
| 36 | +const respondWithRedirect = (redirectURL) => { |
| 37 | + const internalRedirectURL = new URL(`${process.env.URL}/redirect`) |
| 38 | + internalRedirectURL.searchParams.set('redirectURL',redirectURL); |
47 | 39 | return new Response('<div>redirect</div>', |
48 | 40 | { |
49 | 41 | status: 302, |
50 | 42 | headers: { |
51 | | - 'Location': internalRedirectUrl, |
| 43 | + 'Location': internalRedirectURL, |
52 | 44 | }, |
53 | 45 | } |
54 | 46 | ); |
55 | 47 | } |
56 | 48 |
|
57 | | -const respondWithFrame = async (targetFrameName, targetFrameSrc, payload) => { |
| 49 | +const respondWithFrame = async (targetFrame, frameMessage) => { |
58 | 50 | const searchParams = { |
59 | | - targetFrameName, |
60 | | - payload |
| 51 | + targetFrameName: targetFrame.name, |
| 52 | + frameMessage |
61 | 53 | } |
| 54 | + |
62 | 55 | const host = process.env.URL; |
63 | 56 | const frameContent = { |
64 | | - image: targetFrameSrc.image ? |
65 | | - `${host}/${targetFrameSrc.image}` : |
| 57 | + image: targetFrame.image ? |
| 58 | + `${host}/${targetFrame.image}` : |
66 | 59 | `${host}/og-image?${objectToURLSearchParams(searchParams)}` || '', |
67 | | - buttons: targetFrameSrc.buttons ? buildButtons(targetFrameSrc.buttons) : '', |
68 | | - inputs: targetFrameSrc.inputs ? buildInputs(targetFrameSrc.inputs) : '', |
69 | | - postURL: `${host}/?frame=${targetFrameName}` |
| 60 | + buttons: targetFrame.buttons ? buildButtons(targetFrame.buttons) : '', |
| 61 | + inputs: targetFrame.inputs ? buildInputs(targetFrame.inputs) : '', |
| 62 | + postURL: `${host}/?frame=${targetFrame.name}` |
70 | 63 | }; |
71 | 64 |
|
72 | 65 | return new Response(await landingPage(frameContent), |
|
0 commit comments