diff --git a/arcjet-next/index.ts b/arcjet-next/index.ts index 83db0df89..c6c19aaf9 100644 --- a/arcjet-next/index.ts +++ b/arcjet-next/index.ts @@ -84,7 +84,7 @@ export interface ArcjetNextRequest { ip?: string; - nextUrl?: NextRequest["nextUrl"]; + nextUrl?: Partial<{ pathname: string, search: string }>; } export interface ArcjetNext { diff --git a/examples/nextjs-13-pages-wrap/.eslintrc.json b/examples/nextjs-13-pages-wrap/.eslintrc.json new file mode 100644 index 000000000..bffb357a7 --- /dev/null +++ b/examples/nextjs-13-pages-wrap/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "next/core-web-vitals" +} diff --git a/examples/nextjs-13-pages-wrap/.gitignore b/examples/nextjs-13-pages-wrap/.gitignore new file mode 100644 index 000000000..fd3dbb571 --- /dev/null +++ b/examples/nextjs-13-pages-wrap/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/examples/nextjs-13-pages-wrap/README.md b/examples/nextjs-13-pages-wrap/README.md new file mode 100644 index 000000000..6e0cdb10d --- /dev/null +++ b/examples/nextjs-13-pages-wrap/README.md @@ -0,0 +1,29 @@ + + + + Arcjet Logo + + + +# Using `withArcjet` with Next.js 13 and the Pages Router + +This example shows how to use `withArcjet` in a Next.js [API +Route](https://nextjs.org/docs/pages/building-your-application/routing/api-routes). + +## How to use + +1. From the root of the project, install the dependencies. + + ```bash + npm ci + ``` + +2. Enter this directory and start the dev server. + + ```bash + cd examples/nextjs-13-pages-wrap + npm run dev + ``` + +3. Visit `http://localhost:3000/api/arcjet`. +4. Refresh the page to trigger the rate limit. diff --git a/examples/nextjs-13-pages-wrap/next.config.js b/examples/nextjs-13-pages-wrap/next.config.js new file mode 100644 index 000000000..a843cbee0 --- /dev/null +++ b/examples/nextjs-13-pages-wrap/next.config.js @@ -0,0 +1,6 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true, +} + +module.exports = nextConfig diff --git a/examples/nextjs-13-pages-wrap/package.json b/examples/nextjs-13-pages-wrap/package.json new file mode 100644 index 000000000..0e51e3220 --- /dev/null +++ b/examples/nextjs-13-pages-wrap/package.json @@ -0,0 +1,28 @@ +{ + "name": "nextjs-13-pages-wrap", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "@arcjet/next": "*", + "react": "^18", + "react-dom": "^18", + "next": "13.5.6" + }, + "devDependencies": { + "typescript": "^5", + "@types/node": "^20", + "@types/react": "^18", + "@types/react-dom": "^18", + "autoprefixer": "^10.0.1", + "postcss": "^8", + "tailwindcss": "^3.3.0", + "eslint": "^8", + "eslint-config-next": "14.0.4" + } +} diff --git a/examples/nextjs-13-pages-wrap/pages/_app.tsx b/examples/nextjs-13-pages-wrap/pages/_app.tsx new file mode 100644 index 000000000..021681f4d --- /dev/null +++ b/examples/nextjs-13-pages-wrap/pages/_app.tsx @@ -0,0 +1,6 @@ +import '@/styles/globals.css' +import type { AppProps } from 'next/app' + +export default function App({ Component, pageProps }: AppProps) { + return +} diff --git a/examples/nextjs-13-pages-wrap/pages/_document.tsx b/examples/nextjs-13-pages-wrap/pages/_document.tsx new file mode 100644 index 000000000..54e8bf3e2 --- /dev/null +++ b/examples/nextjs-13-pages-wrap/pages/_document.tsx @@ -0,0 +1,13 @@ +import { Html, Head, Main, NextScript } from 'next/document' + +export default function Document() { + return ( + + + +
+ + + + ) +} diff --git a/examples/nextjs-13-pages-wrap/pages/api/arcjet-edge.ts b/examples/nextjs-13-pages-wrap/pages/api/arcjet-edge.ts new file mode 100644 index 000000000..99ff17a5b --- /dev/null +++ b/examples/nextjs-13-pages-wrap/pages/api/arcjet-edge.ts @@ -0,0 +1,28 @@ +// Next.js API route support: https://nextjs.org/docs/api-routes/introduction +import arcjet, { rateLimit, withArcjet } from "@arcjet/next"; +import { NextRequest, NextResponse } from "next/server"; + +export const config = { + runtime: "edge", +}; + +const aj = arcjet({ + // mark + key: "ajkey_yourkey", + rules: [ + rateLimit({ + mode: "LIVE", + // Limiting by ip.src is the default if not specified + //characteristics: ["ip.src"], + window: "1m", + max: 1, + timeout: "10m", + }), + ], +}); + +export default withArcjet(aj, async function handler(req: NextRequest) { + return NextResponse.json({ + message: "Hello world", + }); +}); diff --git a/examples/nextjs-13-pages-wrap/pages/api/arcjet.ts b/examples/nextjs-13-pages-wrap/pages/api/arcjet.ts new file mode 100644 index 000000000..1fa947026 --- /dev/null +++ b/examples/nextjs-13-pages-wrap/pages/api/arcjet.ts @@ -0,0 +1,25 @@ +// Next.js API route support: https://nextjs.org/docs/api-routes/introduction +import arcjet, { rateLimit, withArcjet } from "@arcjet/next"; +import type { NextApiRequest, NextApiResponse } from "next"; + +const aj = arcjet({ + // mark + key: "ajkey_yourkey", + rules: [ + rateLimit({ + mode: "LIVE", + // Limiting by ip.src is the default if not specified + //characteristics: ["ip.src"], + window: "1m", + max: 1, + timeout: "10m", + }), + ], +}); + +export default withArcjet( + aj, + async function handler(req: NextApiRequest, res: NextApiResponse) { + res.status(200).json({ name: "Hello world" }); + }, +); diff --git a/examples/nextjs-13-pages-wrap/pages/index.tsx b/examples/nextjs-13-pages-wrap/pages/index.tsx new file mode 100644 index 000000000..000a75138 --- /dev/null +++ b/examples/nextjs-13-pages-wrap/pages/index.tsx @@ -0,0 +1,118 @@ +import Image from 'next/image' +import { Inter } from 'next/font/google' + +const inter = Inter({ subsets: ['latin'] }) + +export default function Home() { + return ( +
+
+

+ Get started by editing  + pages/index.tsx +

+ +
+ +
+ Next.js Logo +
+ + +
+ ) +} diff --git a/examples/nextjs-13-pages-wrap/postcss.config.js b/examples/nextjs-13-pages-wrap/postcss.config.js new file mode 100644 index 000000000..33ad091d2 --- /dev/null +++ b/examples/nextjs-13-pages-wrap/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/examples/nextjs-13-pages-wrap/public/favicon.ico b/examples/nextjs-13-pages-wrap/public/favicon.ico new file mode 100644 index 000000000..718d6fea4 Binary files /dev/null and b/examples/nextjs-13-pages-wrap/public/favicon.ico differ diff --git a/examples/nextjs-13-pages-wrap/public/next.svg b/examples/nextjs-13-pages-wrap/public/next.svg new file mode 100644 index 000000000..5174b28c5 --- /dev/null +++ b/examples/nextjs-13-pages-wrap/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/examples/nextjs-13-pages-wrap/public/vercel.svg b/examples/nextjs-13-pages-wrap/public/vercel.svg new file mode 100644 index 000000000..d2f842227 --- /dev/null +++ b/examples/nextjs-13-pages-wrap/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/examples/nextjs-13-pages-wrap/styles/globals.css b/examples/nextjs-13-pages-wrap/styles/globals.css new file mode 100644 index 000000000..fd81e8858 --- /dev/null +++ b/examples/nextjs-13-pages-wrap/styles/globals.css @@ -0,0 +1,27 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +:root { + --foreground-rgb: 0, 0, 0; + --background-start-rgb: 214, 219, 220; + --background-end-rgb: 255, 255, 255; +} + +@media (prefers-color-scheme: dark) { + :root { + --foreground-rgb: 255, 255, 255; + --background-start-rgb: 0, 0, 0; + --background-end-rgb: 0, 0, 0; + } +} + +body { + color: rgb(var(--foreground-rgb)); + background: linear-gradient( + to bottom, + transparent, + rgb(var(--background-end-rgb)) + ) + rgb(var(--background-start-rgb)); +} diff --git a/examples/nextjs-13-pages-wrap/tailwind.config.ts b/examples/nextjs-13-pages-wrap/tailwind.config.ts new file mode 100644 index 000000000..c7ead8046 --- /dev/null +++ b/examples/nextjs-13-pages-wrap/tailwind.config.ts @@ -0,0 +1,20 @@ +import type { Config } from 'tailwindcss' + +const config: Config = { + content: [ + './pages/**/*.{js,ts,jsx,tsx,mdx}', + './components/**/*.{js,ts,jsx,tsx,mdx}', + './app/**/*.{js,ts,jsx,tsx,mdx}', + ], + theme: { + extend: { + backgroundImage: { + 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))', + 'gradient-conic': + 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))', + }, + }, + }, + plugins: [], +} +export default config diff --git a/examples/nextjs-13-pages-wrap/tsconfig.json b/examples/nextjs-13-pages-wrap/tsconfig.json new file mode 100644 index 000000000..670224f3e --- /dev/null +++ b/examples/nextjs-13-pages-wrap/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "paths": { + "@/*": ["./*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] +} diff --git a/examples/nextjs-14-app-dir-rl/middleware.ts b/examples/nextjs-14-app-dir-rl/middleware.ts deleted file mode 100644 index 08dc018f0..000000000 --- a/examples/nextjs-14-app-dir-rl/middleware.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { createMiddleware, rateLimit } from "@arcjet/next"; -export const config = { - // matcher tells Next.js which routes to run the middleware on - matcher: ["/"], -}; -const middleware = createMiddleware({ - key: "ajkey_yourkey", - rules: [], -}); -export default middleware; diff --git a/package-lock.json b/package-lock.json index a74b9de0d..8afc3d82d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -81,6 +81,24 @@ "node": ">=18" } }, + "arcjet-next/node_modules/@connectrpc/connect": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@connectrpc/connect/-/connect-1.2.0.tgz", + "integrity": "sha512-kHF30xAlXF2Y7S1I7XN/D3psKLfjxitgNRmF093KNP+cE9yAnqDAGop6aby3Z5k4XQw2ebjeX4E41db7R3FzaQ==", + "peer": true, + "peerDependencies": { + "@bufbuild/protobuf": "^1.4.2" + } + }, + "arcjet-next/node_modules/@connectrpc/connect-web": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@connectrpc/connect-web/-/connect-web-1.2.0.tgz", + "integrity": "sha512-vjFKTP/AzSnC8JvkGKRgpggZIB0v+Lv7U+/Tb/pRNGZI0WSElhGDXWgIn3xfcSNQWi079m45c5MlikszzIRsYg==", + "peerDependencies": { + "@bufbuild/protobuf": "^1.4.2", + "@connectrpc/connect": "1.2.0" + } + }, "eslint-config": { "name": "@arcjet/eslint-config", "version": "1.0.0-alpha.5", @@ -102,6 +120,220 @@ "eslint": "^8" } }, + "examples/nextjs-13-pages-wrap": { + "version": "0.1.0", + "dependencies": { + "@arcjet/next": "*", + "next": "13.5.6", + "react": "^18", + "react-dom": "^18" + }, + "devDependencies": { + "@types/node": "^20", + "@types/react": "^18", + "@types/react-dom": "^18", + "autoprefixer": "^10.0.1", + "eslint": "^8", + "eslint-config-next": "14.0.4", + "postcss": "^8", + "tailwindcss": "^3.3.0", + "typescript": "^5" + } + }, + "examples/nextjs-13-pages-wrap/node_modules/@next/env": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.6.tgz", + "integrity": "sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==" + }, + "examples/nextjs-13-pages-wrap/node_modules/@next/swc-darwin-arm64": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.6.tgz", + "integrity": "sha512-5nvXMzKtZfvcu4BhtV0KH1oGv4XEW+B+jOfmBdpFI3C7FrB/MfujRpWYSBBO64+qbW8pkZiSyQv9eiwnn5VIQA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "examples/nextjs-13-pages-wrap/node_modules/@next/swc-darwin-x64": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.6.tgz", + "integrity": "sha512-6cgBfxg98oOCSr4BckWjLLgiVwlL3vlLj8hXg2b+nDgm4bC/qVXXLfpLB9FHdoDu4057hzywbxKvmYGmi7yUzA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "examples/nextjs-13-pages-wrap/node_modules/@next/swc-linux-arm64-gnu": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.6.tgz", + "integrity": "sha512-txagBbj1e1w47YQjcKgSU4rRVQ7uF29YpnlHV5xuVUsgCUf2FmyfJ3CPjZUvpIeXCJAoMCFAoGnbtX86BK7+sg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "examples/nextjs-13-pages-wrap/node_modules/@next/swc-linux-arm64-musl": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.6.tgz", + "integrity": "sha512-cGd+H8amifT86ZldVJtAKDxUqeFyLWW+v2NlBULnLAdWsiuuN8TuhVBt8ZNpCqcAuoruoSWynvMWixTFcroq+Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "examples/nextjs-13-pages-wrap/node_modules/@next/swc-linux-x64-gnu": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.6.tgz", + "integrity": "sha512-Mc2b4xiIWKXIhBy2NBTwOxGD3nHLmq4keFk+d4/WL5fMsB8XdJRdtUlL87SqVCTSaf1BRuQQf1HvXZcy+rq3Nw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "examples/nextjs-13-pages-wrap/node_modules/@next/swc-linux-x64-musl": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.6.tgz", + "integrity": "sha512-CFHvP9Qz98NruJiUnCe61O6GveKKHpJLloXbDSWRhqhkJdZD2zU5hG+gtVJR//tyW897izuHpM6Gtf6+sNgJPQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "examples/nextjs-13-pages-wrap/node_modules/@next/swc-win32-arm64-msvc": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.6.tgz", + "integrity": "sha512-aFv1ejfkbS7PUa1qVPwzDHjQWQtknzAZWGTKYIAaS4NMtBlk3VyA6AYn593pqNanlicewqyl2jUhQAaFV/qXsg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "examples/nextjs-13-pages-wrap/node_modules/@next/swc-win32-ia32-msvc": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.6.tgz", + "integrity": "sha512-XqqpHgEIlBHvzwG8sp/JXMFkLAfGLqkbVsyN+/Ih1mR8INb6YCc2x/Mbwi6hsAgUnqQztz8cvEbHJUbSl7RHDg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "examples/nextjs-13-pages-wrap/node_modules/@next/swc-win32-x64-msvc": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.6.tgz", + "integrity": "sha512-Cqfe1YmOS7k+5mGu92nl5ULkzpKuxJrP3+4AEuPmrpFZ3BHxTY3TnHmU1On3bFmFFs6FbTcdF58CCUProGpIGQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "examples/nextjs-13-pages-wrap/node_modules/@types/node": { + "version": "20.10.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.4.tgz", + "integrity": "sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "examples/nextjs-13-pages-wrap/node_modules/next": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/next/-/next-13.5.6.tgz", + "integrity": "sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw==", + "dependencies": { + "@next/env": "13.5.6", + "@swc/helpers": "0.5.2", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001406", + "postcss": "8.4.31", + "styled-jsx": "5.1.1", + "watchpack": "2.4.0" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=16.14.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "13.5.6", + "@next/swc-darwin-x64": "13.5.6", + "@next/swc-linux-arm64-gnu": "13.5.6", + "@next/swc-linux-arm64-musl": "13.5.6", + "@next/swc-linux-x64-gnu": "13.5.6", + "@next/swc-linux-x64-musl": "13.5.6", + "@next/swc-win32-arm64-msvc": "13.5.6", + "@next/swc-win32-ia32-msvc": "13.5.6", + "@next/swc-win32-x64-msvc": "13.5.6" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, "examples/nextjs-14-app-dir-rl": { "version": "0.1.0", "dependencies": { @@ -352,33 +584,6 @@ } } }, - "examples/nextjs-14-app-dir-rl/node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, "examples/nextjs-14-app-dir-validate-email": { "version": "0.1.0", "dependencies": { @@ -1203,23 +1408,6 @@ "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.6.0.tgz", "integrity": "sha512-hp19vSFgNw3wBBcVBx5qo5pufCqjaJ0Cfk5H/pfjNOfNWU+4/w0QVOmfAOZNRrNWRrVuaJWxcN8P2vhOkkzbBQ==" }, - "node_modules/@connectrpc/connect": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@connectrpc/connect/-/connect-1.2.0.tgz", - "integrity": "sha512-kHF30xAlXF2Y7S1I7XN/D3psKLfjxitgNRmF093KNP+cE9yAnqDAGop6aby3Z5k4XQw2ebjeX4E41db7R3FzaQ==", - "peerDependencies": { - "@bufbuild/protobuf": "^1.4.2" - } - }, - "node_modules/@connectrpc/connect-web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@connectrpc/connect-web/-/connect-web-1.2.0.tgz", - "integrity": "sha512-vjFKTP/AzSnC8JvkGKRgpggZIB0v+Lv7U+/Tb/pRNGZI0WSElhGDXWgIn3xfcSNQWi079m45c5MlikszzIRsYg==", - "peerDependencies": { - "@bufbuild/protobuf": "^1.4.2", - "@connectrpc/connect": "1.2.0" - } - }, "node_modules/@edge-runtime/jest-environment": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/@edge-runtime/jest-environment/-/jest-environment-2.3.7.tgz", @@ -6367,32 +6555,9 @@ } } }, - "node_modules/next/node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } + "node_modules/nextjs-13-pages-wrap": { + "resolved": "examples/nextjs-13-pages-wrap", + "link": true }, "node_modules/nextjs-14-app-dir-rl": { "resolved": "examples/nextjs-14-app-dir-rl", @@ -6807,10 +6972,9 @@ } }, "node_modules/postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", - "dev": true, + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "funding": [ { "type": "opencollective", @@ -6826,7 +6990,7 @@ } ], "dependencies": { - "nanoid": "^3.3.7", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -8281,6 +8445,14 @@ "node": ">=18" } }, + "protocol/node_modules/@connectrpc/connect": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@connectrpc/connect/-/connect-1.2.0.tgz", + "integrity": "sha512-kHF30xAlXF2Y7S1I7XN/D3psKLfjxitgNRmF093KNP+cE9yAnqDAGop6aby3Z5k4XQw2ebjeX4E41db7R3FzaQ==", + "peerDependencies": { + "@bufbuild/protobuf": "^1.4.2" + } + }, "rollup-config": { "name": "@arcjet/rollup-config", "version": "1.0.0-alpha.5",