-
Notifications
You must be signed in to change notification settings - Fork 6
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
1.3.0 #166
1.3.0 #166
Changes from 15 commits
b063d21
2e4b9e3
1086a27
8605532
a1c9d71
5250988
dd9b0d1
227e26d
500ce97
c2433ec
7578ccb
553bdd9
1fe8969
b057323
17ece8d
8d9c43a
7f932d5
c6adccc
0ce9452
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# Baselinks | ||
|
||
See [Baselinks](https://message-kit.org/plugins/baselinks) in MessageKit. |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,115 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||
"use client"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
import { GeistMono as geistMono } from "geist/font/mono"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
import { GeistSans as geistSans } from "geist/font/sans"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
import Head from "next/head"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
import UrlGenerator from "../components/UrlGenerator"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
import { useState } from "react"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
export default function Home() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
const url = `${process.env.NEXT_PUBLIC_URL || "http://localhost:3000"}`; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
let image = `${url}/hero.jpg`; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
const [formData, setFormData] = useState({ | ||||||||||||||||||||||||||||||||||||||||||||||||||||
txLink: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
"https://sepolia.basescan.org/tx/0x2ec524f740c5831b16ca84053f9b6ae3e3923d3399d527113982e884a75e6bfa", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
networkLogo: "https://avatars.githubusercontent.com/u/108554348?s=280&v=4", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
amount: "1", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
networkName: "Base", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
tokenName: "usdc", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+11
to
+18
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Remove hardcoded transaction link Hardcoding a specific transaction link in the initial state is not recommended. const [formData, setFormData] = useState({
- txLink:
- "https://sepolia.basescan.org/tx/0x2ec524f740c5831b16ca84053f9b6ae3e3923d3399d527113982e884a75e6bfa",
- networkLogo: "https://avatars.githubusercontent.com/u/108554348?s=280&v=4",
+ txLink: '',
+ networkLogo: '',
amount: "1",
networkName: "Base",
tokenName: "usdc",
}); 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
const [generatedUrl, setGeneratedUrl] = useState(""); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
const handleSubmit = (e: React.FormEvent) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
e.preventDefault(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
const baseUrl = window.location.origin; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
// Create URLSearchParams object to properly encode parameters | ||||||||||||||||||||||||||||||||||||||||||||||||||||
const params = new URLSearchParams({ | ||||||||||||||||||||||||||||||||||||||||||||||||||||
txLink: formData.txLink, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
setGeneratedUrl(`${baseUrl}/receipt?txLink=${formData.txLink}`); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+22
to
+32
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Improve URL generation security The URL generation needs additional security measures. const handleSubmit = (e: React.FormEvent) => {
e.preventDefault();
- const baseUrl = window.location.origin;
+ // Validate and sanitize the base URL
+ const baseUrl = new URL(window.location.origin).origin;
- // Create URLSearchParams object to properly encode parameters
- const params = new URLSearchParams({
- txLink: formData.txLink,
- });
+ try {
+ // Validate txLink is a valid URL
+ new URL(formData.txLink);
+ setGeneratedUrl(`${baseUrl}/receipt?txLink=${encodeURIComponent(formData.txLink)}`);
+ } catch (error) {
+ console.error('Invalid transaction link:', error);
+ // Optional: Show user-friendly error message
+ }
- setGeneratedUrl(`${baseUrl}/receipt?txLink=${formData.txLink}`);
}; 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
return ( | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<Head> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<meta charSet="utf-8" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<meta name="viewport" content="width=device-width" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<meta property="og:title" content="MessageKit" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<meta property="og:image" content={image} /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<meta property="fc:frame" content="vNext" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<meta property="of:version" content="vNext" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<meta property="of:accepts:xmtp" content="vNext" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<meta property="of:image" content={image} /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<meta property="fc:frame:image" content={image} /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<meta property="fc:frame:button:1" content="Docs" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<meta property="fc:frame:button:1:action" content="link" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<meta | ||||||||||||||||||||||||||||||||||||||||||||||||||||
property="fc:frame:button:1:target" | ||||||||||||||||||||||||||||||||||||||||||||||||||||
content="https://message-kit.org/" | ||||||||||||||||||||||||||||||||||||||||||||||||||||
/> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
<meta property="fc:frame:button:2" content="Drop a ⭐️" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<meta property="fc:frame:button:2:action" content="link" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<meta | ||||||||||||||||||||||||||||||||||||||||||||||||||||
property="fc:frame:button:2:target" | ||||||||||||||||||||||||||||||||||||||||||||||||||||
content="https://github.com/ephemeraHQ/message-kit" | ||||||||||||||||||||||||||||||||||||||||||||||||||||
/> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
</Head> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<body> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<div | ||||||||||||||||||||||||||||||||||||||||||||||||||||
className={`container ${geistSans.variable} ${geistMono.variable}`} | ||||||||||||||||||||||||||||||||||||||||||||||||||||
style={{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||
display: "flex", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
flexDirection: "column", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
justifyContent: "center", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
alignItems: "center", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
height: "100vh", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
padding: "20px", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
boxSizing: "border-box", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}}> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<div | ||||||||||||||||||||||||||||||||||||||||||||||||||||
className="wrapper" | ||||||||||||||||||||||||||||||||||||||||||||||||||||
style={{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||
display: "flex", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
alignItems: "center", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
flexDirection: "column", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
gap: "20px", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
textAlign: "center", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
maxWidth: "800px", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
width: "100%", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}}> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<div style={{}}> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<h1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
className={`title ${geistSans.className}`} | ||||||||||||||||||||||||||||||||||||||||||||||||||||
style={{ marginBottom: "20px" }}> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
BaseLinks | ||||||||||||||||||||||||||||||||||||||||||||||||||||
</h1> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<p | ||||||||||||||||||||||||||||||||||||||||||||||||||||
className={`description ${geistSans.className}`} | ||||||||||||||||||||||||||||||||||||||||||||||||||||
style={{ marginBottom: "40px" }}> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Generate payment links with QR code for coinbase wallet | ||||||||||||||||||||||||||||||||||||||||||||||||||||
</p> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<div | ||||||||||||||||||||||||||||||||||||||||||||||||||||
style={{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||
display: "flex", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
justifyContent: "flex-start", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
flexDirection: "column", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}}> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<UrlGenerator | ||||||||||||||||||||||||||||||||||||||||||||||||||||
params={{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||
recipientAddress: "", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
amount: 0, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
chainId: "1", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
tokenAddress: "", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}} | ||||||||||||||||||||||||||||||||||||||||||||||||||||
/> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
</body> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
</> | ||||||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Maintain consistency in URL fallback handling
For consistency with other files in the codebase, consider using the nullish coalescing operator (??) instead of logical OR (||).
📝 Committable suggestion