tantk commited on
Commit
a4ad7d1
·
1 Parent(s): c862a09

fix: SSRF IPv6 bypass, SIGINT handler, README accuracy fixes

Browse files
README.md CHANGED
@@ -85,8 +85,6 @@ All tested against the live deployed service at `tantk-rendergate.hf.space` with
85
  | coinmarketcap.com | 6.0s | Full token page, rankings, data |
86
  | defillama.com | 3.6s | TVL, fees, revenue, protocol rankings |
87
  | dexscreener.com | 5.7s | Live pair data — price, volume, liquidity, buy/sell ratio |
88
- | stellar.expert | 4.5s | Block explorer, network stats |
89
- | stellarchain.io | 4.7s | Explorer, price, assets |
90
  | solscan.io | 4.4s | Solana explorer, analytics |
91
  | etherscan.io | — | Blocked (Cloudflare challenge) |
92
  | nansen.ai | 3.7s | Landing page content |
@@ -189,12 +187,12 @@ Then the agent can simply call `render_page("https://x.com/stellarorg")` — pay
189
  ```javascript
190
  import { wrapFetchWithPayment } from "@x402/fetch";
191
 
192
- // One line the library handles 402 → pay → retry automatically
193
  const response = await paidFetch(
194
  "https://tantk-rendergate.hf.space/render?url=https://x.com/stellarorg"
195
  );
196
  const data = await response.json();
197
- // { title: "Stellar (@StellarOrg) / X", content: "9,913 posts...", ... }
198
  ```
199
 
200
  The agent just needs:
@@ -224,11 +222,14 @@ Returns service info and usage instructions.
224
  Health check.
225
 
226
  ### `GET /render?url=<encoded_url>` (paid — $0.001 USDC)
227
- Renders the URL with a headless browser and returns:
228
  ```json
229
  {
230
  "title": "Stellar (@StellarOrg) / X",
231
- "content": "9,913 posts... 840.1K Followers... Meridian is headed to Lisbon...",
 
 
 
232
  "url": "https://x.com/stellarorg",
233
  "renderedAt": "2026-04-13T06:59:12.395Z",
234
  "renderTimeMs": 8071,
@@ -236,6 +237,19 @@ Renders the URL with a headless browser and returns:
236
  }
237
  ```
238
 
 
 
 
 
 
 
 
 
 
 
 
 
 
239
  ## Architecture
240
 
241
  ```
 
85
  | coinmarketcap.com | 6.0s | Full token page, rankings, data |
86
  | defillama.com | 3.6s | TVL, fees, revenue, protocol rankings |
87
  | dexscreener.com | 5.7s | Live pair data — price, volume, liquidity, buy/sell ratio |
 
 
88
  | solscan.io | 4.4s | Solana explorer, analytics |
89
  | etherscan.io | — | Blocked (Cloudflare challenge) |
90
  | nansen.ai | 3.7s | Landing page content |
 
187
  ```javascript
188
  import { wrapFetchWithPayment } from "@x402/fetch";
189
 
190
+ const paidFetch = wrapFetchWithPayment(fetch, x402Client);
191
  const response = await paidFetch(
192
  "https://tantk-rendergate.hf.space/render?url=https://x.com/stellarorg"
193
  );
194
  const data = await response.json();
195
+ // { title, description, headings, links, content, renderTimeMs, payment }
196
  ```
197
 
198
  The agent just needs:
 
222
  Health check.
223
 
224
  ### `GET /render?url=<encoded_url>` (paid — $0.001 USDC)
225
+ Renders the URL with a headless browser and returns structured output:
226
  ```json
227
  {
228
  "title": "Stellar (@StellarOrg) / X",
229
+ "description": "Meta description from the page",
230
+ "headings": [{ "level": "H1", "text": "Stellar's posts" }],
231
+ "links": [{ "text": "stellar.org", "href": "https://stellar.org" }],
232
+ "content": "Full rendered text content...",
233
  "url": "https://x.com/stellarorg",
234
  "renderedAt": "2026-04-13T06:59:12.395Z",
235
  "renderTimeMs": 8071,
 
237
  }
238
  ```
239
 
240
+ If the page is blocked or empty, the payment is automatically refunded:
241
+ ```json
242
+ {
243
+ "title": "Just a moment...",
244
+ "content": "Cloudflare security verification...",
245
+ "refund": {
246
+ "transaction": "bf68b792...",
247
+ "amount": "0.001 USDC",
248
+ "reason": "blocked_page"
249
+ }
250
+ }
251
+ ```
252
+
253
  ## Architecture
254
 
255
  ```
demo-output/1-twitter-with.txt ADDED
@@ -0,0 +1,209 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === RenderGate: https://x.com/stellarorg ===
2
+ Payment: $0.001 USDC on stellar:testnet
3
+ Render time: 7550ms
4
+
5
+ Title: Stellar (@StellarOrg) / X
6
+
7
+ Headings (3):
8
+ H2: Stellar
9
+ H1: Stellar’s posts
10
+ H2: New to X?
11
+
12
+ Links (50):
13
+ Log in → https://x.com/login
14
+ Sign up → https://x.com/i/flow/signup
15
+ stellar.org → https://t.co/M9vXjqAEiU
16
+ Joined April 2014 → https://x.com/StellarOrg/about
17
+ 710 Following → https://x.com/StellarOrg/following
18
+ 840.1K Followers → https://x.com/StellarOrg/verified_followers
19
+ Posts → https://x.com/StellarOrg
20
+ Affiliates → https://x.com/StellarOrg/affiliates
21
+ Replies → https://x.com/StellarOrg/with_replies
22
+ Highlights → https://x.com/StellarOrg/highlights
23
+ Media → https://x.com/StellarOrg/media
24
+ Stellar → https://x.com/StellarOrg
25
+ @StellarOrg → https://x.com/StellarOrg
26
+ Apr 11 → https://x.com/StellarOrg/status/2043019271542820961
27
+ 11K → https://x.com/StellarOrg/status/2043019271542820961/analytics
28
+
29
+ Content (3765 chars):
30
+ Don’t miss what’s happening
31
+ People on X are the first to know.
32
+ Log in
33
+ Sign up
34
+ Stellar
35
+ 9,913 posts
36
+ Follow
37
+ See new posts
38
+ Follow
39
+ Stellar
40
+ @StellarOrg
41
+ Stellar is a network for innovators building real-world blockchain solutions that create financial access for everyone.
42
+ Financial ServicesSan Francisco, Castellar.org
43
+ Joined April 2014
44
+ 710 Following
45
+ 840.1K Followers
46
+ Posts
47
+ Affiliates
48
+ Replies
49
+ Highlights
50
+ Media
51
+ Stellar’s posts
52
+ Stellar
53
+ @StellarOrg
54
+ ·
55
+ Apr 11
56
+ 10 days until Stellar House. Who's joining us in CDMX?
57
+ 9
58
+ 43
59
+ 282
60
+ 11K
61
+ Stellar reposted
62
+ Tomer Weller
63
+ @tomerweller
64
+ ·
65
+ Apr 10
66
+ Epic roundup of defi on Stellar by
67
+ @AdaVaughan
68
+ Stellar | DeFi is happening on Stellar
69
+ From stellar.org
70
+ 4
71
+ 10
72
+ 52
73
+ 6.7K
74
+ Stellar
75
+ @StellarOrg
76
+ ·
77
+ Apr 10
78
+ We made it to Friday Ecosystem spotlights in the thread.
79
+ 12
80
+ 29
81
+ 336
82
+ 14K
83
+ Show more replies
84
+ Stellar
85
+ @StellarOrg
86
+ ·
87
+ Apr 10
88
+ Quote
89
+ Bastian Koh
90
+ @bastiankoh
91
+ ·
92
+ Apr 7
93
+ wallet adoption skyrocketing in @BuildOnStellar with stellar passport, a workshop can get their attendees on-chain in seconds today, we brought students to the ecosystem and they kickstarted their builder path x.com/bastiankoh/sta…
94
+ 2
95
+ 4
96
+ 25
97
+ 6.3K
98
+ Stellar
99
+ @StellarOrg
100
+ ·
101
+ Apr 10
102
+ Quote
103
+ Raj Karia
104
+ @rajkaria_
105
+ ·
106
+ Apr 7
107
+ Aegis now supports @StellarOrg Big thanks to @0ceans404 for pushing to go live on Stellar. Here's what Stellar builders can do with Aegis today: → Query XLM + token balances via Horizon (no API key) → Verify Stellar transactions on-chain before granting API access → Fund
108
+ 1
109
+ 2
110
+ 12
111
+ 5.8K
112
+ Stellar
113
+ @StellarOrg
114
+ ·
115
+ Apr 10
116
+ Privacy is the glass ceiling and we're on a mission to shatter it.
117
+ @tomerweller
118
+ talked about privacy all around Cannes. The highlights
119
+ 0:56
120
+ 4
121
+ 50
122
+ 259
123
+ 10K
124
+ Stellar reposted
125
+ Denelle Dixon
126
+ @DenelleDixon
127
+ ·
128
+ Apr 10
129
+ .
130
+ @KjOwusu
131
+ gets it exactly right: "the creator economy feels global until it's time to get paid." This is why we built
132
+ @akunawallet
133
+ , to create a bridge between immense talent and opportunity in Ghana and beyond.
134
+ Quote
135
+ Akuna Wallet
136
+ @akunawallet
137
+ ·
138
+ Apr 10
139
+ Some Ghanaian creators have been waiting two months for X payouts. This is the structural problem we built Akuna Wallet to solve. A US bank account. Payments in USD, GBP & EUR. Earn globally, spend locally — no delays. Read more from our CEO, @KjOwusu: https://blog.akunawallet.com/ghanaian-creators-are-owed-better-than-this/…
140
+ 4
141
+ 13
142
+ 84
143
+ 10K
144
+ Stellar
145
+ @StellarOrg
146
+ ·
147
+ Apr 9
148
+ Back to the future: local stablecoins edition.
149
+ @tomerweller
150
+ on block by block with
151
+ @DenelleDixon
152
+ 7
153
+ 32
154
+ 158
155
+ 9.4K
156
+ Stellar
157
+ @StellarOrg
158
+ ·
159
+ Apr 9
160
+ Watch the episode below.
161
+ youtube.com
162
+ Is Blockchain Privacy a Trade-off? Scaling Confidential Payments on...
163
+ The biggest challenge for institutions moving to blockchain isn't efficiency - it's privacy. How do you leverage a public ledger without exposing client data...
164
+ 1
165
+ 21
166
+ 8.7K
167
+ Stellar reposted
168
+ WisdomTree Prime®
169
+ @WisdomTreePrime
170
+ ·
171
+ Apr 9
172
+ We didn’t build WisdomTree Prime to pull people offchain. We built it for the people already there. Across
173
+ @arbitrum
174
+ @avax
175
+ @base
176
+ @ethereum
177
+ @Optimism
178
+ @plumenetwork
179
+ @solana
180
+ @StellarOrg
181
+ One onchain hub.
182
+ 3
183
+ 11
184
+ 62
185
+ 6K
186
+ Stellar
187
+ @StellarOrg
188
+ ·
189
+ Apr 9
190
+ Building a closed, private network is less secure, less efficient, and more expensive than working with an open network. That's why institutions—
191
+ @FTDA_US
192
+ ,
193
+ @WisdomTreePrime
194
+ , and more—choose Stellar.
195
+ Quote
196
+ Denelle Dixon
197
+ @DenelleDixon
198
+ ·
199
+ Apr 9
200
+ The long-term winners won't be the chains that control everything from the top down. They'll be the open networks where issuers, regulators, and validators set the rules together. https://stellar.org/blog/ecosystem/why-most-blockchains-still-fail-institutions-and-what-to-do-about-it…
201
+ 5
202
+ 56
203
+ 330
204
+ 20K
205
+ New to X?
206
+ Sign up now to get your own personalized timeline!
207
+ Sign up with Apple
208
+ Create account
209
+ By signing up, you agree to the Terms of Service and Privacy Policy, including Cookie Use.
demo-output/1-twitter-without.txt ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ === Normal HTTP Fetch: x.com/stellarorg ===
2
+ Command: curl https://x.com/stellarorg
3
+
4
+ html,body{height: 100%;}::cue{white-space:normal} [stylesheet-group="0"]{} body{margin:0;} button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0;} html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);} input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-webkit-search-results-button,input::-webkit-search-results-decoration{display:none;} [stylesheet-group="1"]{} .css-146c3p1{background-color:rgba(0,0,0,0.00);
5
+
6
+ --- Total HTML size: 244567 bytes
7
+ --- Visible text content: 230936 chars
8
+ --- Tweets found: 0
9
+ --- Follower count: not available
10
+ --- Profile info: not available
demo-output/2-linkedin-with.txt ADDED
@@ -0,0 +1,364 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === RenderGate: https://www.linkedin.com/company/stellar-development-foundation ===
2
+ Payment: $0.001 USDC on stellar:testnet
3
+ Render time: 4855ms
4
+
5
+ Title: Stellar Development Foundation | LinkedIn
6
+ Description: Stellar Development Foundation | 59,282 followers on LinkedIn. Stellar is network for innovators building real world blockchain solutions that create financial access for everyone 🪐 | Our mission is open source financial access for all.
7
+
8
+ The Stellar Development Foundation is a nonprofit organization based in San Francisco. We’re building a common financial platform, designed to be open and accessible to everyone.
9
+
10
+ Headings (48):
11
+ H1: Stellar Development Foundation
12
+ H2: Software Development
13
+ H3: San Francisco, CA 59,282 followers
14
+ H2: About us
15
+ H2: Products
16
+ H3: Stellar
17
+ H2: Locations
18
+ H2: Employees at Stellar Development Foundation
19
+ H3: Jed McCaleb
20
+ H3: Tyler Gentry
21
+ H3: Aaron Levin
22
+ H3: Christal Calderon Gauthier
23
+ H2: Updates
24
+ H2: Join now to see what you are missing
25
+ H2: Similar pages
26
+
27
+ Links (50):
28
+ Skip to main content → https://www.linkedin.com/company/stellar-development-foundation#main-content
29
+ LinkedIn → https://www.linkedin.com/?trk=organization_guest_nav-header-logo
30
+ Top Content → https://www.linkedin.com/top-content?trk=organization_guest_guest_nav_menu_topContent
31
+ People → https://www.linkedin.com/pub/dir/+/+?trk=organization_guest_guest_nav_menu_people
32
+ Learning → https://www.linkedin.com/learning/search?trk=organization_guest_guest_nav_menu_learning
33
+ Jobs → https://www.linkedin.com/jobs/search?trk=organization_guest_guest_nav_menu_jobs
34
+ Games → https://www.linkedin.com/games?trk=organization_guest_guest_nav_menu_games
35
+ Sign in → https://www.linkedin.com/login?session_redirect=https%3A%2F%2Fwww%2Elinkedin%2Ecom%2Fcompany%2Fstellar-development-foundation&fromSignIn=true&trk=organization_guest_nav-header-signin
36
+ Join now → https://www.linkedin.com/signup/cold-join?session_redirect=https%3A%2F%2Fwww%2Elinkedin%2Ecom%2Fcompany%2Fstellar-development-foundation&trk=organization_guest_nav-header-join
37
+ See jobs → https://www.linkedin.com/jobs/stellar-development-foundation-jobs-worldwide?f_C=3877937&trk=top-card_top-card-primary-button-top-card-primary-cta
38
+ Follow → https://www.linkedin.com/login?session_redirect=https%3A%2F%2Fwww%2Elinkedin%2Ecom%2Fcompany%2Fstellar-development-foundation&fromSignIn=true&trk=top-card_top-card-secondary-button-top-card-secondary-cta
39
+ Discover all 267 employees → https://www.linkedin.com/signup/cold-join?session_redirect=https%3A%2F%2Fwww%2Elinkedin%2Ecom%2Fsearch%2Fresults%2Fpeople%2F%3FfacetCurrentCompany%3D%255B3877937%255D&trk=org-employees_cta_face-pile-cta
40
+ Report this company → https://www.linkedin.com/uas/login?fromSignIn=true&session_redirect=https%3A%2F%2Fwww.linkedin.com%2Fcompany%2Fstellar-development-foundation&trk=top-card_ellipsis-menu-semaphore-sign-in-redirect&guestReportContentType=COMPANY&_f=guest-reporting
41
+ https://www.stellar.org/ → https://www.linkedin.com/redir/redirect?url=https%3A%2F%2Fwww%2Estellar%2Eorg%2F&urlhash=ot4g&trk=about_website
42
+ Stellar → https://www.linkedin.com/products/stellar-development-foundation-stellar/
43
+
44
+ Content (6904 chars):
45
+ Skip to main content
46
+ LinkedIn
47
+ Top Content
48
+ People
49
+ Learning
50
+ Jobs
51
+ Games
52
+ Sign in
53
+ Join now
54
+ Stellar Development Foundation
55
+ Software Development
56
+ San Francisco, CA 59,282 followers
57
+ Stellar is network for innovators building real world blockchain solutions that create financial access for everyone 🪐
58
+ See jobs
59
+ Follow
60
+
61
+
62
+ Discover all 267 employees
63
+
64
+ About us
65
+
66
+ Our mission is open source financial access for all. The Stellar Development Foundation is a nonprofit organization based in San Francisco. We’re building a common financial platform, designed to be open and accessible to everyone. Just as the internet allowed anyone to send an email or create a blog, Stellar now allows people to easily send, save, and receive money, without large fees or hassle.
67
+
68
+ Website
69
+ https://www.stellar.org/
70
+ Industry
71
+ Software Development
72
+ Company size
73
+ 51-200 employees
74
+ Headquarters
75
+ San Francisco, CA
76
+ Type
77
+ Nonprofit
78
+ Founded
79
+ 2014
80
+ Products
81
+ Stellar
82
+ Stellar
83
+ Blockchain Platforms
84
+
85
+ The Stellar network is an open-source blockchain used for a variety of payment and remittance applications. Leverage a robust set of tools and products to harness the full potential of the Stellar blockchain. Check out all that's available to help you build on and explore the network.
86
+
87
+ Locations
88
+ Primary
89
+
90
+ San Francisco, CA 94102, US
91
+
92
+ Get directions
93
+ Employees at Stellar Development Foundation
94
+ Jed McCaleb
95
+ Tyler Gentry
96
+ Aaron Levin
97
+ Christal Calderon Gauthier
98
+ See all employees
99
+ Updates
100
+ Stellar Development Foundation
101
+
102
+ 59,282 followers
103
+
104
+ 2d
105
+
106
+ Privacy remains one of the biggest challenges in our industry, and we're committed to changing that.
107
+
108
+ Tomer Weller spent time at EthCC sharing his thoughts on why privacy matters and what we're doing about it.
109
+
110
+ …more
111
+ Play Video
112
+ 28
113
+ 1 Comment
114
+ Like
115
+ Comment
116
+ Share
117
+ Stellar Development Foundation
118
+
119
+ 59,282 followers
120
+
121
+ 3d Edited
122
+
123
+ The industry is going back to the future with local stablecoins, but this time with the infrastructure to support them.
124
+
125
+ Local stablecoins are becoming increasingly important, especially when it comes to off-ramping crypto to fiat.
126
+
127
+ Tomer Weller and Denelle Dixon discussed on block by block 👇
128
+ https://lnkd.in/d3Fhi2Uk
129
+
130
+ …more
131
+ Play Video
132
+ 50
133
+ 1 Comment
134
+ Like
135
+ Comment
136
+ Share
137
+
138
+ Stellar Development Foundation reposted this
139
+
140
+ Paul Wong
141
+ 2w
142
+
143
+ Vietnam is laying the foundation for its next phase of economic and financial development. Stellar stands ready to help build the infrastructure that will get it there.
144
+
145
+ https://lnkd.in/eTE2uzdW
146
+
147
+ Jose Fernandez da Ponte, Raja Chakravorti, Betty Sun-Lucas
148
+
149
+ Các quỹ đầu tư nào từ Mỹ sẵn sàng tìm cơ hội ở Việt Nam?
150
+ 1thegioi.vn
151
+ 61
152
+ 2 Comments
153
+ Like
154
+ Comment
155
+ Share
156
+ Stellar Development Foundation
157
+
158
+ 59,282 followers
159
+
160
+ 5d
161
+
162
+ What's holding onchain RWAs back isn't volume, it's velocity. And the key to unlocking it is privacy.
163
+
164
+ At WalletConnect in Cannes, Tomer Weller sat down with Sylvain Prigent and Dayana Aleksandrova to unpack how institutions like Societe Generale- FORGE are paving the path forward for adoption among traditional finance.
165
+
166
+ …more
167
+ Play Video
168
+ 40
169
+ Like
170
+ Comment
171
+ Share
172
+ Stellar Development Foundation
173
+
174
+ 59,282 followers
175
+
176
+ 1w
177
+
178
+ Stellar now supports the Machine Payments Protocol (MPP), the open standard by Stripe and Tempo that lets AI agents pay for services over HTTP.
179
+
180
+ The MPP SDK handles any stablecoin on Stellar with server-sponsored fees so agents never need gas tokens.
181
+
182
+ https://lnkd.in/essVRwG3
183
+
184
+ 176
185
+ 2 Comments
186
+ Like
187
+ Comment
188
+ Share
189
+ Stellar Development Foundation
190
+
191
+ 59,282 followers
192
+
193
+ 1w
194
+
195
+ New city. New dates. Same mission.
196
+ Meridian is headed to Lisbon.
197
+ October 28–29.
198
+ More details to come.
199
+
200
+ 95
201
+ 2 Comments
202
+ Like
203
+ Comment
204
+ Share
205
+ Stellar Development Foundation
206
+
207
+ 59,282 followers
208
+
209
+ 1w
210
+
211
+ The informal economy accounts for 55–65% of Nigeria's GDP, but paying international suppliers remains a major challenge since dollar access is limited.
212
+
213
+ Sellers in Nigeria import roughly $20 billion in goods from China each year. So how do they pay their suppliers? Enter stablecoins.
214
+
215
+ Our friends at The Flip visited Computer Village in Lagos to see firsthand how crypto is solving a real-world financial problem. Watch the full episde below.
216
+
217
+ https://lnkd.in/gH_rdq7B
218
+
219
+ …more
220
+ Play Video
221
+ 101
222
+ 3 Comments
223
+ Like
224
+ Comment
225
+ Share
226
+ Stellar Development Foundation
227
+
228
+ 59,282 followers
229
+
230
+ 1w
231
+
232
+ Yardstick (Protocol 26) is coming, introducing new protocol configuration settings. The dates you need to know:
233
+
234
+ April 8 — Stable releases
235
+ April 16 — Testnet upgrade
236
+ May 6 — Mainnet vote
237
+
238
+ If you build on Stellar, here’s how to prepare👇
239
+
240
+ https://lnkd.in/eAZpmWMz
241
+
242
+ Stellar | Stellar Yardstick, Protocol 26 Upgrade Guide
243
+ stellar.org
244
+ 28
245
+ Like
246
+ Comment
247
+ Share
248
+ Stellar Development Foundation
249
+
250
+ 59,282 followers
251
+
252
+ 1w Edited
253
+
254
+ In a conversation with Sylvain Prigent from Societe Generale-Forge and Dayana Aleksandrova at WalletConnect, Tomer Weller dropped the recipe for our secret sauce 👨🏻🍳
255
+
256
+ Together with MoneyGram, Stellar makes it possible to go from crypto to cash whenever you need to, globally.
257
+
258
+ …more
259
+ Play Video
260
+ 40
261
+ Like
262
+ Comment
263
+ Share
264
+ Stellar Development Foundation
265
+
266
+ 59,282 followers
267
+
268
+ 1w
269
+
270
+ What does it take to put tokenized assets to work?
271
+
272
+ Here’s what Tomer Weller had to say at RWA SUMMIT.
273
+
274
+ - As an industry, we need to prioritize distribution and composability when tokenizing assets to get the best possible products in the right hands.
275
+
276
+ - A multichain approach is great as a distribution strategy, but it’s not the whole story. It’s critical to also prioritize partnerships with wallets.
277
+
278
+ - Franklin Templeton is one example of an institution bringing RWAs onchain well, with the BENJI token on Stellar.
279
+
280
+ - Asset managers require both openness and privacy. And privacy isn’t one size fits all. We need to have the best privacy solutions for every use case.
281
+
282
+ 53
283
+ Like
284
+ Comment
285
+ Share
286
+ Similar pages
287
+ Ripple
288
+
289
+ Technology, Information and Internet
290
+
291
+ San Francisco, CA
292
+
293
+ PayKit
294
+
295
+ Financial Services
296
+
297
+ Hedera
298
+
299
+ Technology, Information and Internet
300
+
301
+ Las Vegas, Nevada
302
+
303
+ Circle
304
+
305
+ Financial Services
306
+
307
+ Show more similar pages
308
+ Browse jobs
309
+ Director jobs
310
+ 1,220,357 open jobs
311
+ Engineer jobs
312
+ 555,845 open jobs
313
+ Senior Software Engineer jobs
314
+ 78,145 open jobs
315
+ Associate jobs
316
+ 1,091,945 open jobs
317
+ Manager jobs
318
+ 1,880,925 open jobs
319
+ Analyst jobs
320
+ 694,057 open jobs
321
+ Human Resources Manager jobs
322
+ 31,339 open jobs
323
+ Software Engineer jobs
324
+ 300,699 open jobs
325
+ Head jobs
326
+ 1,018,536 open jobs
327
+ Head of Sales jobs
328
+ 12,761 open jobs
329
+ Show more jobs like this
330
+ Funding
331
+ Stellar Development Foundation 1 total round
332
+
333
+ Last Round
334
+
335
+ Seed Sep 1, 2014
336
+
337
+ US$ 3.0M
338
+
339
+ Investors
340
+
341
+ Stripe
342
+ See more info on crunchbase
343
+ More searches
344
+ LinkedIn
345
+ © 2026
346
+ About
347
+ Accessibility
348
+ User Agreement
349
+ Privacy Policy
350
+ Your California Privacy Choices
351
+ Cookie Policy
352
+ Copyright Policy
353
+ Brand Policy
354
+ Guest Controls
355
+ Community Guidelines
356
+ Language
357
+ Sign in to see who you already know at Stellar Development Foundation
358
+ Sign in with Email
359
+
360
+ or
361
+
362
+ New to LinkedIn? Join now
363
+
364
+ By clicking Continue to join or sign in, you agree to LinkedIn’s User Agreement, Privacy Policy, and Cookie Policy.
demo-output/2-linkedin-without.txt ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ === Normal HTTP Fetch: linkedin.com/company/stellar-development-foundation ===
2
+ Command: curl https://www.linkedin.com/company/stellar-development-foundation
3
+
4
+ window.onload = function() { // Parse the tracking code from cookies. var trk = "bf"; var trkInfo = "bf"; var cookies = document.cookie.split("; "); for (var i = 0; i 8)) { trk = cookies[i].substring(8); } else if ((cookies[i].indexOf("trkInfo=") == 0) && (cookies[i].length > 8)) { trkInfo = cookies[i].substring(8); } } if (window.location.protocol == "http:") { // If "sl" cookie is set, redirect to https. for (var i = 0; i 3)) { window.location.href = "https:" + window.location.href.substring(w
5
+
6
+ --- Total HTML size: 1530 bytes
7
+ --- Visible text: 1151 chars
8
+ --- Company description: not available
9
+ --- Employee count: not available
10
+ --- No public API exists for LinkedIn
demo-output/3-soroswap-with.txt ADDED
@@ -0,0 +1,274 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === RenderGate: https://soroswap.finance ===
2
+ Payment: $0.001 USDC on stellar:testnet
3
+ Render time: 3240ms
4
+
5
+ Title: Soroswap - The First DEX Aggregator on Stellar
6
+ Description: Soroswap is the first DEX aggregator on Stellar. Swap tokens at the best prices, provide liquidity, and access DeFi on Soroban with fast, low-cost transactions.
7
+
8
+ Headings (26):
9
+ H1: Your gateway to Stellar's financial ecosystem
10
+ H2: Powering the projects you already use
11
+ H2: Four DEXs. One call.
12
+ H3: Soroswap AMM
13
+ H3: Aquarius
14
+ H3: Phoenix
15
+ H3: Stellar Classic
16
+ H2: One API. Best quotes on Stellar.
17
+ H3: Plug-and-Play REST API
18
+ H3: Optimized Aggregated Routing
19
+ H3: Smooth Integration
20
+ H3: Gasless Trustlines
21
+ H2: Built by devs who've been in your shoes
22
+ H3: Documentation
23
+ H3: Open Source
24
+
25
+ Links (30):
26
+ Home → https://soroswap.finance/#home
27
+ API → https://soroswap.finance/#features
28
+ App → https://soroswap.finance/#app
29
+ Developers → https://soroswap.finance/#developers
30
+ FAQ → https://soroswap.finance/#faq
31
+ Explore → https://info.soroswap.finance/
32
+ Contact → https://soroswap.finance/#contact
33
+ Launch App → https://app.soroswap.finance/
34
+ Get API Access → https://docs.soroswap.finance/soroswap-api#api-access
35
+ Read the docs → https://docs.soroswap.finance/
36
+ Sell
37
+ 0
38
+ XLM → https://app.soroswap.finance/
39
+ Buy
40
+ 0
41
+ USDC → https://app.soroswap.finance/
42
+ Launch App → https://app.soroswap.finance/
43
+ Read the docs → https://docs.soroswap.finance/
44
+ View on GitHub → https://github.com/soroswap
45
+
46
+ Content (5861 chars):
47
+ Home
48
+ API
49
+ App
50
+ Developers
51
+ FAQ
52
+ Explore
53
+ Contact
54
+ Launch App
55
+ FIRST STELLAR AGGREGATOR
56
+ Your gateway to Stellar's financial ecosystem
57
+
58
+ One API. All DEXs and AMMs in one place. Gasless onboarding. The infrastructure that powers Stellar's top projects.
59
+
60
+ Get API Access
61
+ Read the docs
62
+ Swap
63
+ Sell
64
+ 0
65
+ XLM
66
+ Buy
67
+ 0
68
+ USDC
69
+ 1 XLM = 0.237367 USDC
70
+ Launch App
71
+ Powering the projects you already use
72
+
73
+ These teams chose Soroswap to deliver better prices and smoother UX to their users while monetizing user swaps.
74
+
75
+ AGGREGATED LIQUIDITY
76
+ Four DEXs. One call.
77
+
78
+ We aggregate liquidity from every major source on Stellar so your users always get competitive rates.
79
+
80
+ Soroswap AMM
81
+
82
+ Stellar AMM
83
+
84
+ Live
85
+ Aquarius
86
+
87
+ Stellar AMM
88
+
89
+ Live
90
+ Phoenix
91
+
92
+ Stellar AMM
93
+
94
+ Live
95
+ Stellar Classic
96
+
97
+ The original SDEX
98
+
99
+ Live
100
+
101
+ More liquidity sources = tighter spreads = happier users.
102
+
103
+ We're continuously adding new pools. Your integration benefits automatically.
104
+
105
+ THE SOROSWAP API
106
+ One API. Best quotes on Stellar.
107
+
108
+ The only integration you need to access aggregated liquidity across all Stellar DEXs.
109
+
110
+ Plug-and-Play REST API
111
+
112
+ REST endpoints for everything
113
+
114
+ Not using TypeScript? No problem. Our REST API works with any stack. Get quotes, execute swaps, check pool states—all with simple HTTP calls.
115
+
116
+ Comprehensive docs. Testnet sandbox. Production-ready.
117
+
118
+ Optimized Aggregated Routing
119
+
120
+ Best price. Every time.
121
+
122
+ Our routing engine queries Aqua, Phoenix, Soroswap AMM, and Stellar Classic DEX in real-time. It splits orders across pools when that gets your users a better rate.
123
+
124
+ You call one endpoint. We handle the optimization.
125
+
126
+ Smooth Integration
127
+
128
+ From zero to production, fast
129
+
130
+ No weeks of integration work. No blockchain expertise required on your team. Our API and TypeScript SDK handle transaction building, signing flows, and error states.
131
+
132
+ Your first swap can be live today.
133
+
134
+ Gasless Trustlines
135
+
136
+ Trustlines without the friction
137
+
138
+ Your users shouldn't need to understand Stellar's trustline system to start trading. Our gasless trustline feature handles the complexity behind the scenes.
139
+
140
+ New user? First swap? No problem. They trade immediately.
141
+
142
+ DEVELOPER EXPERIENCE
143
+ Built by devs who've been in your shoes
144
+
145
+ We know what good DX feels like. That's what we built.
146
+
147
+ Documentation
148
+
149
+ Comprehensive guides, API references, and tutorials. Copy-paste examples that actually work.
150
+
151
+ Read the docs
152
+ Open Source
153
+
154
+ Our SDK, smart contracts, and routing algorithms are open source. Audit the code, fork it, contribute.
155
+
156
+ View on GitHub
157
+ Support
158
+
159
+ Stuck on something? Our team responds in Discord. Real engineers, real answers, usually within hours.
160
+
161
+ Join Discord
162
+ ECOSYSTEM
163
+ Building Stellar's DeFi infrastructure together
164
+
165
+ Soroswap isn't a standalone product; it's infrastructure. We collaborate with the teams building Stellar's DeFi future because better coordination means better outcomes for everyone.
166
+
167
+ DeFindex
168
+
169
+ Yield vault infrastructure for Soroswap Earn
170
+
171
+ Aquarius
172
+
173
+ Liquidity aggregation partner
174
+
175
+ Phoenix
176
+
177
+ Liquidity aggregation partner
178
+
179
+ Stellar Development Foundation
180
+
181
+ Ecosystem support and grants
182
+
183
+ Stronger together
184
+ DISCOVER OUR APP
185
+ Everything you need for DeFi on Stellar
186
+ API
187
+ Swap
188
+ Earn
189
+ Bridge
190
+ Pools
191
+ Soroswap API
192
+
193
+ Access aggregated liquidity from all major Stellar DEXs through a single, developer-friendly API. Get the best quotes, execute swaps, and build powerful DeFi applications.
194
+
195
+ One endpoint for all your swap needs.
196
+
197
+ Get API Access
198
+ The numbers
199
+ $52.2M+
200
+ Total Volume Routed
201
+ $12K+
202
+ Volume 24h
203
+ 3K+
204
+ Total Accounts
205
+
206
+ Real-time metrics from mainnet
207
+
208
+ Ready to unlock swaps in your app?
209
+
210
+ Talk to our team. We'll walk you through the integration and answer your technical questions.
211
+
212
+ Work email
213
+ Project name
214
+ What are you building?
215
+ Select an option
216
+ Cross-chain Aggregator
217
+ Wallet
218
+ Exchange
219
+ dApp
220
+ Other
221
+ Book a call
222
+
223
+ Prefer to explore on your own?
224
+
225
+ Get API key
226
+ Join our Discord
227
+
228
+ No sales pitch. Just a technical conversation about your use case.
229
+
230
+ FAQ
231
+ Frequently asked questions
232
+ What is Soroswap?
233
+
234
+ Soroswap is DeFi infrastructure for Stellar. We provide a liquidity aggregation API that connects your application to multiple DEXs (Aquarius, Phoenix, Soroswap AMM, and Stellar Classic DEX), plus yield strategies through Soroswap Earn. You can also try our technology directly at app.soroswap.finance.
235
+
236
+ How does the API pricing work?
237
+
238
+ We offer a free tier with 1 request per second (RPS) to get started. For higher volume, we have Pro and Pro II plans. Additionally, if you enable swap commissions, a percentage goes to Soroswap as revenue share; this way, you can monetize swaps while supporting the protocol.
239
+
240
+ Which projects are already using Soroswap?
241
+
242
+ Hot Wallet, Sodax, Decaf, and Socket.fi use our infrastructure to power swaps for their users.
243
+
244
+ How long does integration take?
245
+
246
+ Most teams have basic swaps working within a few hours. A production-ready integration typically takes 1-2 days. We provide a TypeScript SDK, REST API, comprehensive docs, and direct support.
247
+
248
+ What's the difference between using Soroswap directly vs the API?
249
+
250
+ The Soroswap web app at app.soroswap.finance is for end users who want to swap tokens directly. The API is for developers building wallets, exchanges, or dApps who want to offer swap functionality to their own users.
251
+
252
+ Do you support cross-chain bridging?
253
+
254
+ Yes! We support bridging through our integration with Rozo Pay. This allows users to bridge assets from other chains into Stellar seamlessly, expanding the reach of your application.
255
+
256
+ How does Soroswap Earn work?
257
+
258
+ Soroswap Earn integrates with Defindex to provide automated yield strategies. Users deposit assets into vaults, and the strategies optimize returns automatically. As a developer, you can offer these yield products to your users through our API.
259
+
260
+ Still have questions? Ask us on Discord
261
+
262
+ Stellar's Liquidity Layer
263
+
264
+ Home
265
+ API
266
+ Liquidity
267
+ App
268
+ Developers
269
+ Partners
270
+ FAQ
271
+ Terms of Use
272
+ Privacy Policy
273
+
274
+ © 2026 PaltaLabs. All rights reserved.
demo-output/3-soroswap-without.txt ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ === Normal HTTP Fetch: soroswap.finance ===
2
+ Command: curl https://soroswap.finance
3
+
4
+ Soroswap - The First DEX Aggregator on Stellar { "@context": "https://schema.org", "@type": "Organization", "name": "Soroswap", "alternateName": ["Soroswap Finance", "Soroswap DEX"], "url": "https://soroswap.finance", "logo": "https://soroswap.finance/logo512.png", "description": "Soroswap is the first DEX aggregator on Stellar blockchain, enabling token swaps at the best prices across multiple DEXs including Soroswap AMM, Aquarius, Phoenix, and Stellar Classic DEX.", "foundingDate": "2023", "fo
5
+
6
+ --- Total HTML size: 6947 bytes
7
+ --- Visible text: 3933 chars
8
+ --- DEX data: not available
9
+ --- No API exists for Soroswap UI content
demo-output/4-producthunt-with.txt ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === RenderGate: https://www.producthunt.com ===
2
+ Payment: $0.001 USDC on stellar:testnet
3
+ Render time: 2896ms
4
+
5
+ Title: Just a moment...
6
+
7
+ Headings (3):
8
+ H1: www.producthunt.com
9
+ H2: Performing security verification
10
+ H2: Verification successful. Waiting for www.producthunt.com to respond
11
+
12
+ Links (2):
13
+ Cloudflare → https://www.cloudflare.com/?utm_source=challenge&utm_campaign=m
14
+ Privacy → https://www.cloudflare.com/privacypolicy/
15
+
16
+ *** AUTO-REFUND ***
17
+ Reason: blocked_page
18
+ Refund amount: 0.001 USDC
19
+ Refund transaction: 2d91f45b09e684c0096bf19eb5482858e7074b3bc143768626daaeb101a94557
20
+ Verify: https://stellar.expert/explorer/testnet/tx/2d91f45b09e684c0096bf19eb5482858e7074b3bc143768626daaeb101a94557
21
+
22
+ Content (266 chars):
23
+ www.producthunt.com
24
+ Performing security verification
25
+
26
+ This website uses a security service to protect against malicious bots. This page is displayed while the website verifies you are not a bot.
27
+
28
+ Ray ID: 9eba8a361b3fa13a
29
+ Performance and Security by CloudflarePrivacy
demo-output/4-producthunt-without.txt ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ === Normal HTTP Fetch: producthunt.com ===
2
+ Command: curl https://www.producthunt.com
3
+
4
+ Just a moment... *{box-sizing:border-box;margin:0;padding:0}html{line-height:1.15;-webkit-text-size-adjust:100%;color:#313131;font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}body{display:flex;flex-direction:column;height:100vh;min-height:100vh}.main-content{margin:8rem auto;padding-left:1.5rem;max-width:60rem}@media (width Enable JavaScript and cookies
5
+
6
+ --- Total HTML size: 4612 bytes
7
+ --- Visible text: 3323 chars
8
+ --- Cloudflare blocked: yes
save-demo.js ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import "dotenv/config";
2
+ import { writeFileSync } from "fs";
3
+ import { Transaction, TransactionBuilder } from "@stellar/stellar-sdk";
4
+ import { x402Client, x402HTTPClient } from "@x402/fetch";
5
+ import { createEd25519Signer, getNetworkPassphrase } from "@x402/stellar";
6
+ import { ExactStellarScheme } from "@x402/stellar/exact/client";
7
+
8
+ const SERVER_URL = process.env.SERVER_URL || "https://tantk-rendergate.hf.space";
9
+ const NETWORK = "stellar:testnet";
10
+
11
+ const signer = createEd25519Signer(process.env.STELLAR_PRIVATE_KEY, NETWORK);
12
+ const client = new x402Client().register(
13
+ "stellar:*",
14
+ new ExactStellarScheme(signer, { url: "https://soroban-testnet.stellar.org" }),
15
+ );
16
+ const httpClient = new x402HTTPClient(client);
17
+
18
+ async function paidRender(targetUrl) {
19
+ const endpoint = `${SERVER_URL}/render?url=${encodeURIComponent(targetUrl)}`;
20
+ const r1 = await fetch(endpoint);
21
+ if (r1.status !== 402) return await r1.json();
22
+
23
+ const pr = httpClient.getPaymentRequiredResponse((n) => r1.headers.get(n));
24
+ let pp = await client.createPaymentPayload(pr);
25
+ const np = getNetworkPassphrase(NETWORK);
26
+ const tx = new Transaction(pp.payload.transaction, np);
27
+ const sd = tx.toEnvelope().v1()?.tx()?.ext()?.sorobanData();
28
+ if (sd) {
29
+ pp = {
30
+ ...pp,
31
+ payload: {
32
+ ...pp.payload,
33
+ transaction: TransactionBuilder.cloneFrom(tx, {
34
+ fee: "1", sorobanData: sd, networkPassphrase: np,
35
+ }).build().toXDR(),
36
+ },
37
+ };
38
+ }
39
+ const headers = httpClient.encodePaymentSignatureHeader(pp);
40
+ const r2 = await fetch(endpoint, { headers });
41
+ return await r2.json();
42
+ }
43
+
44
+ function formatOutput(data, targetUrl) {
45
+ let out = `=== RenderGate: ${targetUrl} ===\n`;
46
+ out += `Payment: ${data.payment?.price} USDC on ${data.payment?.network}\n`;
47
+ out += `Render time: ${data.renderTimeMs}ms\n\n`;
48
+
49
+ out += `Title: ${data.title}\n`;
50
+ if (data.description) out += `Description: ${data.description}\n`;
51
+ out += `\n`;
52
+
53
+ if (data.headings?.length > 0) {
54
+ out += `Headings (${data.headings.length}):\n`;
55
+ data.headings.slice(0, 15).forEach((h) => {
56
+ out += ` ${h.level}: ${h.text}\n`;
57
+ });
58
+ out += `\n`;
59
+ }
60
+
61
+ if (data.links?.length > 0) {
62
+ out += `Links (${data.links.length}):\n`;
63
+ data.links.slice(0, 15).forEach((l) => {
64
+ out += ` ${l.text.substring(0, 50)} → ${l.href}\n`;
65
+ });
66
+ out += `\n`;
67
+ }
68
+
69
+ if (data.refund) {
70
+ out += `*** AUTO-REFUND ***\n`;
71
+ out += `Reason: ${data.refund.reason}\n`;
72
+ out += `Refund amount: ${data.refund.amount}\n`;
73
+ out += `Refund transaction: ${data.refund.transaction}\n`;
74
+ out += `Verify: https://stellar.expert/explorer/testnet/tx/${data.refund.transaction}\n\n`;
75
+ }
76
+
77
+ out += `Content (${data.content?.length} chars):\n`;
78
+ out += data.content || "(empty)";
79
+ return out;
80
+ }
81
+
82
+ const sites = [
83
+ { name: "1-twitter", url: "https://x.com/stellarorg" },
84
+ { name: "2-linkedin", url: "https://www.linkedin.com/company/stellar-development-foundation" },
85
+ { name: "3-soroswap", url: "https://soroswap.finance" },
86
+ { name: "4-producthunt", url: "https://www.producthunt.com" },
87
+ ];
88
+
89
+ for (const site of sites) {
90
+ console.log(`Rendering ${site.name}...`);
91
+ try {
92
+ const data = await paidRender(site.url);
93
+ const output = formatOutput(data, site.url);
94
+ const path = `demo-output/${site.name}-with.txt`;
95
+ writeFileSync(path, output);
96
+ console.log(` Saved: ${path} (${data.content?.length} chars, refund: ${!!data.refund})`);
97
+ } catch (err) {
98
+ console.error(` Failed: ${err.message}`);
99
+ }
100
+ }
101
+
102
+ console.log("Done!");
server.js CHANGED
@@ -25,6 +25,7 @@ function isAllowedUrl(urlStr) {
25
  if (!["http:", "https:"].includes(parsed.protocol)) return false;
26
  const blocked = ["localhost", "127.0.0.1", "0.0.0.0", "[::1]"];
27
  if (blocked.includes(parsed.hostname)) return false;
 
28
  const parts = parsed.hostname.split(".");
29
  if (parts[0] === "10") return false;
30
  if (parts[0] === "172" && +parts[1] >= 16 && +parts[1] <= 31) return false;
@@ -174,9 +175,11 @@ const server = app.listen(Number(PORT), () => {
174
  console.log(` Payments go to ${PAY_TO}`);
175
  });
176
 
177
- process.on("SIGTERM", async () => {
178
- console.log("Shutting down...");
179
- server.close();
180
- await closeBrowser();
181
- process.exit(0);
182
- });
 
 
 
25
  if (!["http:", "https:"].includes(parsed.protocol)) return false;
26
  const blocked = ["localhost", "127.0.0.1", "0.0.0.0", "[::1]"];
27
  if (blocked.includes(parsed.hostname)) return false;
28
+ if (parsed.hostname.startsWith("[")) return false; // block all IPv6 literals
29
  const parts = parsed.hostname.split(".");
30
  if (parts[0] === "10") return false;
31
  if (parts[0] === "172" && +parts[1] >= 16 && +parts[1] <= 31) return false;
 
175
  console.log(` Payments go to ${PAY_TO}`);
176
  });
177
 
178
+ for (const sig of ["SIGTERM", "SIGINT"]) {
179
+ process.on(sig, async () => {
180
+ console.log(`${sig} received, shutting down...`);
181
+ server.close();
182
+ await closeBrowser();
183
+ process.exit(0);
184
+ });
185
+ }