@fangorn-network/fetch
v2026.4.0-9.dev
Published
The package allows callers to pay for data secured with Fangorn using x402f's trust-minimized payment rails. Using x402f fetch allows callers to achieve **private purchases** and **private retrieval** of data, with **no linkage** between buyer identity an
Readme
x402f fetch
The package allows callers to pay for data secured with Fangorn using x402f's trust-minimized payment rails. Using x402f fetch allows callers to achieve private purchases and private retrieval of data, with no linkage between buyer identity and resource stored onchain.
A wrapper around x402/fetch that:
- calls the x402f access control server
- decrypts results using fangorn
Installation
Install the package from npm (using pnpm):
pnpm i @fangorn-network/fetchBuild
To build the package locally:
- install deps from the root by running
pnpm i - Build with
pnpm build
Usage
For a full example, see the node example.
Quickstart
Ensure an x402f facilitator is running and fetch it's public key (e.g.
0x147c24c5Ea2f1EE1ac42AD16820De23bBba45Ef6).Setup the middleware
const privateKey = getEnv("EVM_PRIVATE_KEY") as Hex;
const resourceServerUrl = getEnv("RESOURCE_SERVER_URL");
const domain = "localhost";
const middleware = await FangornX402Middleware.create({
privateKey,
config,
usdcContractAddress: "0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d",
usdcDomainName: "USD Coin",
facilitatorAddress: "0x147c24c5Ea2f1EE1ac42AD16820De23bBba45Ef6",
domain,
});- Fetch resources
// a resource is identified by (owner, schemaName, tag)
const owner = "0x147c24c5Ea2f1EE1ac42AD16820De23bBba45Ef6" as Address;
const schemaName = "noagent-fangorn.test.music.v0";
const tag = "test";
// the caller must have sufficient balance in order to unlock access to the resource
const result = await middleware.fetchResource({
privateKey,
owner,
schemaName,
tag,
baseUrl: resourceServerUrl,
});
// decrypt on success
if (result.success) {
console.log("Decrypted result:", JSON.stringify(result));
process.exit(0)
} else {
console.error("Failed:", result.error);
}