🪐 The IPFS gateway for NFT.Storage is not "another gateway", but a caching layer for NFTs that sits on top of existing IPFS public gateways.

Overview

nftstorage.link

The IPFS gateway for nft.storage is not "another gateway", but a caching layer for NFT’s that sits on top of existing IPFS public gateways.

Table of Contents

Edge gateway

Check out the Edge Gateway documentation.

Contributing

Feel free to join in. All welcome. Open an issue!

If you're opening a pull request, please see the guidelines in DEVELOPMENT.md on structuring your commit messages so that your PR will be compatible with our release process.

License

Dual-licensed under MIT + Apache 2.0

Comments
  • New CSP headers caused breaking damages to existing NFTs

    New CSP headers caused breaking damages to existing NFTs

    Reference to #172 that was recently merged. @vasco-santos

    This update caused a significant amount of NFTs to become useless on major marketplace platforms.

    NFTs can be rendered as an iframe with HTML/CSS/JS:

    Animation_url also supports HTML pages, allowing you to build rich experiences and interactive NFTs using JavaScript canvas, WebGL, and more. Scripts and relative paths within the HTML page are now supported. However, access to browser extensions is not supported. https://docs.opensea.io/docs/metadata-standards#metadata-structure

    This change forced content-security-policy headers to be overwritten; now, all of those NFTs relying on iframe rendering cannot load content.

    While I agree with the sentiment mentioned in #172 (wrt @Gozala), IPFS (nftstorage.link) as a protocol should not be responsible for setting security standards that could be damaging to legitimate use cases.

    kind/bug need/triage 
    opened by tpae 17
  • Range request for large file returns a 200.

    Range request for large file returns a 200.

    I've noticed a behavior where the range request for a large file instead returns a 200, and starts serving the entire file. This is less than ideal, as it may cause a very large download to start.

    Ideally, the request can wait until the range request can be satisfied, or alternatively, some sort of error should be returned. Ex:

    curl -v -r 29788705059-29788770616 https://bafybeic3w7mp6pteuvzjxnmdt65r6pttth6mzgcjfzna6fugb66xs2z3tq.ipfs.nftstorage.link/ > /dev/null
    

    Observe that the response is a 200 response and curl attempts to download the entire file:

    < HTTP/2 200 
    
    kind/bug need/triage cic 
    opened by ikreymer 9
  • feat: add gateway forbidden content types

    feat: add gateway forbidden content types

    This PR adds forbidden content types to avoid abuse as we were seeing ~28% of traffic with bin files from last 12 hours https://dash.cloudflare.com/fffa4b4363a7e5250af8357087263b3a/nftstorage.link/analytics/traffic?content-type=bin

    This can also be problematic for gateway being blocked by other parties and we should investigate other types to block.

    CF may still just put bin on other kind of types if does not know about. Anyway, we should just block octet-stream to start. This should likely evolve into a wrangler secret / Admin feature.

    opened by vasco-santos 8
  • feat: add goodbits

    feat: add goodbits

    Integrate goodbits into nftstorage.link.

    Motivation

    We introduced CSP https://github.com/nftstorage/nftstorage.link/pull/172 aiming to block phishing websites from operating. More than phishing websites, this measure brings to the table additional long term benefits:

    • prevent NFTs in the wild to have centralized dependencies instead of same origin content addressable content
    • ipfs:// browser handling will require all external sources to also rely on IPFS protocol (we can overcome these pains earlier on)

    There are already occurrences on the wild of NFTs relying on primitives that are now blocked by default via CSP. We are shipping https://github.com/nftstorage/goodbits as a place where we can manually add these NFTs, in order to bypass CSP for them after manual validation.

    Implementation details

    Similarly to what we do in reads pipeline for denylist, a new KV is created for optimal access from CF Workers on the gateway operation.

    This PR includes:

    • GOODBITS KV
    • Cron job that recurrently downloads goodbits list and updates KV with the new occurrences
    • gateway to bypass goodbits with appropriate tag to bypass CSP

    Needs:

    • [x] https://github.com/nftstorage/goodbits/pull/1
    opened by vasco-santos 3
  • Sanitize ipfs links?

    Sanitize ipfs links?

    Hi,

    Issue

    When generative tokens (html CAR packages) are viewed from the gateway. Direct links to ipfs (i.e ipfs://<CID>) are not sanitized:

    DOES NOT WORK -> https://bafybeifsiea24k46cgebr6pcleqmqe6kyqzh4pw4rexep4xdr337625oyi.ipfs.nftstorage.link/ WORKS -> https://ipfs.io/ipfs/bafybeifsiea24k46cgebr6pcleqmqe6kyqzh4pw4rexep4xdr337625oyi/

    Though looking at the source code I'm not such of the artist's logic there.

    kind/bug need/triage 
    opened by melMass 3
  • fix: wasm module loading

    fix: wasm module loading

    Addresses wasm module loading reported in #175 For details see https://github.com/WebAssembly/content-security-policy/blob/main/proposals/CSP.md#the-wasm-unsafe-eval-source-directive

    opened by Gozala 3
  • feat: client perma cache

    feat: client perma cache

    This PR adds perma-cache client to client package. There are potential improvements on the pipeline (like converting given URLs to nftstorage.link if they are IPFS urls), but keeping scope smaller for initial implementation.

    It includes:

    • all 4 initial methods (put, delete, list, status)
      • Support for batching, retries, and rate limit control as needed
    • smoke tests with mock API (we can move on later to spin up the actual API + DB + Gateway)
    • workflow tests updated to run bundlesize and pre mocking
    • client docs separated between scopes, one (unchanged) Markdown file for gateway utils and other for perma cache docs.

    Closes #92

    BREAKING CHANGE: GET /perma-cache/status renamed to /perma-cache/account

    opened by vasco-santos 3
  • fix: sentry source maps for worker.mjs

    fix: sentry source maps for worker.mjs

    We currently don't have sourcemaps in sentry. These are the only differences I could find from the working source maps in web3storage project per changes in https://github.com/web3-storage/web3.storage/pull/1033

    opened by vasco-santos 3
  • fix: gateway use cf dns to prevent rate limit instead of durable object

    fix: gateway use cf dns to prevent rate limit instead of durable object

    Per Cloudflare durable limits that lead to temporary fix on https://github.com/nftstorage/nftstorage.link/pull/32 , this PR adds solution proposed in #17 by replacing Durable Object logic to prevent rate limits by a DNS based solution that enables us to rely on CF dashboard to stipulate rate limits.

    Added rate limit rule https://dash.cloudflare.com/fffa4b4363a7e5250af8357087263b3a/nftstorage.link/security/waf/rate-limiting-rules pinata.nftstorage.link by X-Forwarded-For. Internally within the worker, we track 429 errors already and wey will be counted in metrics.

    TODO:

    • [x] Add domain to CF nftstorage.link zone
    • [x] Setup rate limits to pinata.nftstorage.link

    Closes #17

    opened by vasco-santos 3
  • chore(main): release edge-gateway 1.15.0

    chore(main): release edge-gateway 1.15.0

    opened by github-actions[bot] 2
  • chore(main): release edge-gateway 1.14.6

    chore(main): release edge-gateway 1.14.6

    opened by github-actions[bot] 2
  • chore(main): release api 2.3.3

    chore(main): release api 2.3.3

    opened by github-actions[bot] 1
  • chore(main): release website 2.0.1

    chore(main): release website 2.0.1

    opened by github-actions[bot] 1
  • CAR format support 🌐✨🚘

    CAR format support 🌐✨🚘

    Being able to fetch content as a CAR from nftstorage.link would be rad. It'd allow folks to fetch and verify content themselves, with the nftstorage.link speed boost.

    We need it for the web3.storage client.get method. We could hit the nftstorage.link endpoint directly from that rather than via the api worker. We're getting reports of larger files failing to fetch via GET /cid/:cid which is currently just a proxy for ipfs.io. e.g https://github.com/web3-storage/web3.storage/issues/840

    The implementation should just use the new /ipfs/:cid?format=car search param that landed in go-ipfs v0.13. If other gateways take a while to adopt this we should implement gets as hitting ipfs.io only, so at least we start to benefit from the cdn / caching behavioiur for them in the meantime.

    P2 kind/enhancement stack/read-services blocked 
    opened by olizilla 2
  • Gateway does not resolve all CID encodings

    Gateway does not resolve all CID encodings

    Expected

    When I visit https://nftstorage.link/ipfs/f0170122041cd1126759340060ea717da677ccf97619097af67a60e25fa526452d47e2e34, that is, an "f" base CID, the resource should resolve correctly

    Actual

    Server responds with 400 invalid CID: f0170122041cd1126759340060ea717da677ccf97619097af67a60e25fa526452d47e2e34: To parse non base32 or base58btc encoded CID multibase decoder must be provided in body

    Notes

    Taking the equivalent base32 encoding from https://cid.ipfs.io/#f0170122041cd1126759340060ea717da677ccf97619097af67a60e25fa526452d47e2e34, I can resolve the resource on the same gateway (bafybeicbzuism5mtiada5jyx3jtxzt4xmgijpl3huyhcl6ssmrjni7rogq)

    kind/bug need/triage cic 
    opened by sfrdmn 4
Releases(edge-gateway-v1.15.0)
Owner
NFT.Storage
Decentralized storage of NFT data on IPFS and Filecoin.
NFT.Storage
Yet another library for generating NFT artwork, uploading NFT assets and metadata to IPFS, deploying NFT smart contracts, and minting NFT collections

eznft Yet another library for generating NFT artwork, uploading NFT assets and metadata to IPFS, deploying NFT smart contracts, and minting NFT collec

null 3 Sep 21, 2022
✨ An IRL tokenization platform to turn your hopes, dreams, and desires into fundable NFTs on the Polygon blockchain using Chainlink, IPFS, Moralis, and NFT.Storage.

GoFundYourself Getting funding for your passion project, needs or dream doesn't have to be a nightmare! check out our live demo on Netlify Let's Fundi

Brian H. Hough | brianhuff.eth 7 Dec 6, 2022
🐲 Epic NFTs [UI] - Proyecto que te permitirá conectar tu billetera y acuñar un NFT, podrás revender el NFT en OpenSea. El NFT en sí se puede personalizar

?? Epic NFTs [UI] El proyecto se encuentra deployado en Vercel para que puedan verlo e interactuar con él, toda crítica o comentario se agradece, pued

Braian D. Vaylet 17 Oct 22, 2022
Dead simple program to upload NFT data to IPFS via nft.storage

NFTP The simplest way to publish files and folders to IPFS, with one command. 100% FREE to upload as much files as you want, powered by nft.storage. N

factoria 35 Dec 11, 2022
Next-level mongoose caching layer with event based cache clearing

SpeedGoose ## About The Project This project is a next-level mongoose caching library which is fully written in typescript. It's caching on two levels

Arkadiusz Gil 17 Dec 15, 2022
ZxCDDoS for education with LAYER 7, LAYER 4, AMP METHODS

?? ZxCDDoS: Release v1.0 - Free DDoS Panel ?? Terminal only accepts ANSI color. Username: admin Password: admin Language Logs Fixed L7 methods (crash,

zxcr9999 151 Jan 3, 2023
Heliaia - a proxy that sits between your wallet and a node🧑‍⚖️

Heliaia Heliaia is a proxy that sits between your wallet and a node, with the sole purpose to intercept transactions before they are broadcasted. Tran

Gregory Markou 45 Oct 26, 2022
the music metadata you love, with IPFS hosting on nft.storage :rainbow:

Music NFT IPFS Metadata Standard for musicians pioneered by Catalog & Mint Songs. Compatible with contracts created by: Catalog Sound.xyz Manifold - W

sweetman.eth 12 Oct 17, 2022
The repos includes script for uploading bulk files in a directory to ipfs using nft.storage

Uploading Foloder to IPFS using nft.storage This repository includes script for uploading bulk files in a directory to ipfs using nft.storage Acknowle

Dapp Composer 22 Dec 17, 2022
A "Basic-to-Lisp" compiler. But Basic is not real Basic, and Lisp is not real Lisp.

Basic2Lisp A "Basic-to-Lisp" compiler. But Basic is not real Basic, and Lisp is not real Lisp. Syntax Print-Sth Put some-value to standard output. PRI

Hana Yabuki 5 Jul 10, 2022
🔑 Keagate is an open-source, high-performance alternative to popular cryptocurrency payment gateways such as Coinbase Commerce, CoinGate, BitPay, NOWPayments, CoinRemitter, CoinsPaid and more.

⛩️ Keagate – A High-Performance Cryptocurrency Payment Gateway ?? This project is actively in development ?? Table of Contents About the Project Purpo

null 76 Jan 3, 2023
Fullstack Dynamic NFT Mini Game built using 💎 Diamond Standard [EIP 2535] 🏃‍♀️Players can use Hero NFT to battle against Thanos ⚔ Heroes can be Healed by staking their NFT 🛡

?? Fullstack Dynamic NFT Mini Game ?? ?? Using Diamond Standard Play On ?? ?? ⏩ http://diamond-dapp.vercel.app/ Project Description ?? Fullstack Dynam

Shiva Shanmuganathan 21 Dec 23, 2022
NFT Marketplace framework to build standalone NFT marketplace or inApp/inGame NFT marketplace

NFT Marketplace This project is a decentalized NFT Marketplace framework which is to be the baseline for you to build standalone NFT marketplace or in

Reddio, inc. 14 Dec 19, 2022
The Web 3.0 social layer built on top of Twitter

Niftycase – The Web 3.0 Chrome extension for Twitter Niftycase is a open-source Chrome extension that allows you to view anybody's NFTs directly on Tw

Matt Welter 16 Jul 14, 2022
A platform designed specifically as an additional layer on top of Google Classroom for students to gain the best out of online evaluations

Peer-Learning-Platform A platform designed specifically as an additional layer on top of Google Classroom for students to gain the best out of online

Rahul Dhakar 3 Jun 12, 2022
An abstraction layer on top of @replit/crosis that makes Repl connection management and operations so easy, a Furret could do it! 🎉

Crosis4Furrets An abstraction layer on top of @replit/crosis that makes Repl connection management and operations so easy, a Furret could do it! ?? In

Ray 18 Dec 29, 2022
The ICPverse service to extract the metadata from an existing NFT project on the Internet Computer.

Infinity_Rank The ICPverse service to extract the metadata from an existing NFT project on the Internet Computer. Requirements for Use: npm installed

ICPverse 10 Nov 5, 2022