Skip to Content

Using Next.js

Please use at least version 1.6.0 of @spindl-xyz/attribution or @spindl-xyz/attribution-lite for this feature.

1. Add Next.js Code

Option 1) Using Rewrites as proxy

Add ingest route that using rewrites() method forwards the data to https://spindl.link/ in your next.config file

// next.config.js OR next.config.ts const nextConfig = { async rewrites() { return [ { source: "/ingest/:path*", destination: "https://spindl.link/:path*", }, ]; }, // ... } module.exports = nextConfig

This should work! If you’re experiencing any issues, Option 2 is an alternative!

Option 2) Use Custom Middleware using App Router

If option 1 doesn’t work, you can write a custom middleware middleware.js/ts in your base directory (your app folder) to point /ingest url to our spindl.link hostname

import { NextResponse } from "next/server"; export function middleware(request: any) { const hostname = "spindl.link"; const requestHeaders = new Headers(request.headers); requestHeaders.set("host", hostname); let url = request.nextUrl.clone(); url.protocol = "https"; url.hostname = hostname; url.port = 443; url.pathname = url.pathname.replace(/^\/ingest/, ""); return NextResponse.rewrite(url, { headers: requestHeaders, }); } export const config = { matcher: "/ingest/:path*", };

2. Configure Spindl SDK host with the proxy

Add host url to spindl configure object with the proxy host url

spindl.configure({ sdkKey: "<your SDK API key here>", host: "https://your-host-url.com/ingest" });

You can use the window.location.origin as part of host url but in SSR contexts like Next.js you may need to check if window is defined first

if (typeof window !== "undefined") { spindl.configure({ sdkKey: process.env.NEXT_PUBLIC_SPINDL_SDK_KEY as string, host: `${window.location.origin}/ingest`, }); }