From ffd029cdbbd9d0452f8c457780a2d0ba7f80bd65 Mon Sep 17 00:00:00 2001 From: Xe Iaso Date: Mon, 9 Sep 2024 23:02:59 -0400 Subject: [PATCH] incorporate arcjet Signed-off-by: Xe Iaso --- Dockerfile | 45 ---- Earthfile | 44 ++++ app/middleware.ts | 17 ++ manifest/deployment.yaml | 45 ++++ manifest/ingress.yaml | 23 ++ manifest/kustomization.yaml | 8 + manifest/secret.yaml | 6 + manifest/service.yaml | 11 + package-lock.json | 436 +++++++++++++++++++++++++++++++----- package.json | 9 +- 10 files changed, 541 insertions(+), 103 deletions(-) delete mode 100644 Dockerfile create mode 100644 Earthfile create mode 100644 app/middleware.ts create mode 100644 manifest/deployment.yaml create mode 100644 manifest/ingress.yaml create mode 100644 manifest/kustomization.yaml create mode 100644 manifest/secret.yaml create mode 100644 manifest/service.yaml diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 739aba3..0000000 --- a/Dockerfile +++ /dev/null @@ -1,45 +0,0 @@ -# syntax = docker/dockerfile:1 - -# Adjust NODE_VERSION as desired -ARG NODE_VERSION=22.3.0 -FROM node:${NODE_VERSION}-slim as base - -LABEL fly_launch_runtime="Next.js" - -# Next.js app lives here -WORKDIR /app - -# Set production environment -ENV NODE_ENV="production" - - -# Throw-away build stage to reduce size of final image -FROM base as build - -# Install packages needed to build node modules -RUN apt-get update -qq && \ - apt-get install --no-install-recommends -y build-essential node-gyp pkg-config python-is-python3 - -# Install node modules -COPY --link package-lock.json package.json ./ -RUN npm ci --include=dev - -# Copy application code -COPY --link . . - -# Build application -RUN npm run build - -# Remove development dependencies -RUN npm prune --omit=dev - - -# Final stage for app image -FROM base - -# Copy built application -COPY --from=build /app /app - -# Start the server by default, this can be overwritten at runtime -EXPOSE 3000 -CMD [ "npm", "run", "start" ] diff --git a/Earthfile b/Earthfile new file mode 100644 index 0000000..4e54228 --- /dev/null +++ b/Earthfile @@ -0,0 +1,44 @@ +VERSION 0.8 + +# Adjust NODE_VERSION as desired +ARG NODE_VERSION=22.3.0 +FROM node:${NODE_VERSION}-slim + +LABEL fly_launch_runtime="Next.js" + +# Next.js app lives here +WORKDIR /app + +# Set production environment +ENV NODE_ENV="production" + + +build: + # Install packages needed to build node modules + RUN apt-get update -qq && \ + apt-get install --no-install-recommends -y build-essential node-gyp pkg-config python-is-python3 + + # Install node modules + COPY package-lock.json package.json ./ + RUN npm ci --include=dev + + # Copy application code + COPY . . + + # Build application + RUN npm run build + + # Remove development dependencies + RUN npm prune --omit=dev + + SAVE ARTIFACT /app + +run: + # Copy built application + COPY +build/app /app + + # Start the server by default, this can be overwritten at runtime + EXPOSE 3000 + CMD [ "npm", "run", "start" ] + + SAVE IMAGE --push ghcr.io/xe/techaro-lol \ No newline at end of file diff --git a/app/middleware.ts b/app/middleware.ts new file mode 100644 index 0000000..f9ef21f --- /dev/null +++ b/app/middleware.ts @@ -0,0 +1,17 @@ +import arcjet, { createMiddleware, shield } from "@arcjet/next"; +export const config = { + // matcher tells Next.js which routes to run the middleware on. + // This runs the middleware on all routes except for static assets. + matcher: ["/((?!_next/static|_next/image|favicon.ico).*)"], +}; +const aj = arcjet({ + key: process.env.ARCJET_KEY!, // Get your site key from https://app.arcjet.com + rules: [ + // Protect against common attacks with Arcjet Shield + shield({ + mode: "LIVE", // will block requests. Use "DRY_RUN" to log only + }), + ], +}); +// Pass any existing middleware with the optional existingMiddleware prop +export default createMiddleware(aj); \ No newline at end of file diff --git a/manifest/deployment.yaml b/manifest/deployment.yaml new file mode 100644 index 0000000..2098e9c --- /dev/null +++ b/manifest/deployment.yaml @@ -0,0 +1,45 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: techaro-lol + annotations: + operator.1password.io/auto-restart: "true" +spec: + replicas: 1 + template: + spec: + securityContext: + fsGroup: 1000 + containers: + - name: main + image: ghcr.io/xe/techaro-lol:latest + imagePullPolicy: "Always" + resources: + limits: + cpu: "2" + memory: "1Gi" + requests: + cpu: "500m" + memory: "512Mi" + envFrom: + - secretRef: + name: techaro-lol + securityContext: + runAsUser: 1000 + runAsGroup: 1000 + runAsNonRoot: true + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault + livenessProbe: + httpGet: + path: / + port: 3000 + httpHeaders: + - name: X-Kubernetes + value: "is kinda okay" + initialDelaySeconds: 3 + periodSeconds: 3 \ No newline at end of file diff --git a/manifest/ingress.yaml b/manifest/ingress.yaml new file mode 100644 index 0000000..3dafd42 --- /dev/null +++ b/manifest/ingress.yaml @@ -0,0 +1,23 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: techaro-lol + annotations: + cert-manager.io/cluster-issuer: "letsencrypt-prod" +spec: + ingressClassName: nginx + tls: + - hosts: + - techaro.lol + secretName: techaro-lol-public-tls + rules: + - host: techaro.lol + http: + paths: + - pathType: Prefix + path: "/" + backend: + service: + name: techaro-lol + port: + name: http \ No newline at end of file diff --git a/manifest/kustomization.yaml b/manifest/kustomization.yaml new file mode 100644 index 0000000..698831c --- /dev/null +++ b/manifest/kustomization.yaml @@ -0,0 +1,8 @@ +resources: + - deployment.yaml + - ingress.yaml + - secret.yaml + - service.yaml + +commonLabels: + app.kubernetes.io/name: techaro \ No newline at end of file diff --git a/manifest/secret.yaml b/manifest/secret.yaml new file mode 100644 index 0000000..62357d5 --- /dev/null +++ b/manifest/secret.yaml @@ -0,0 +1,6 @@ +apiVersion: onepassword.com/v1 +kind: OnePasswordItem +metadata: + name: techaro-lol +spec: + itemPath: "vaults/Kubernetes/items/Techaro WWW Arcjet" \ No newline at end of file diff --git a/manifest/service.yaml b/manifest/service.yaml new file mode 100644 index 0000000..63ff1e0 --- /dev/null +++ b/manifest/service.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Service +metadata: + name: techaro-lol +spec: + ports: + - protocol: TCP + port: 80 + targetPort: 3000 + name: http + type: ClusterIP \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 2a9de54..731552e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,10 +8,11 @@ "name": "www", "version": "0.1.0", "dependencies": { + "@arcjet/next": "^1.0.0-alpha.24", "lucide-react": "^0.399.0", - "next": "14.2.4", - "react": "^18", - "react-dom": "^18" + "next": "^14.2.9", + "react": "^18.3.1", + "react-dom": "^18.3.1" }, "devDependencies": { "@flydotio/dockerfile": "^0.5.7", @@ -19,7 +20,7 @@ "@types/react": "^18", "@types/react-dom": "^18", "eslint": "^8", - "eslint-config-next": "14.2.4", + "eslint-config-next": "^14.2.9", "postcss": "^8", "tailwindcss": "^3.4.1", "typescript": "^5" @@ -38,6 +39,173 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@arcjet/analyze": { + "version": "1.0.0-alpha.24", + "resolved": "https://registry.npmjs.org/@arcjet/analyze/-/analyze-1.0.0-alpha.24.tgz", + "integrity": "sha512-u2/Sn1oHj8l6rappqn/dNe3ZkO2F5Z1O8IpM7XBGBpj2LUBegiSwMAhhNr+ueP1e5mp406aC5DS2VrVikRbSHA==", + "license": "Apache-2.0", + "dependencies": { + "@arcjet/protocol": "1.0.0-alpha.24" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@arcjet/duration": { + "version": "1.0.0-alpha.24", + "resolved": "https://registry.npmjs.org/@arcjet/duration/-/duration-1.0.0-alpha.24.tgz", + "integrity": "sha512-MwGDPasjralD5RhfWbjyoQ0/C/YVVJysQcm3VPaiLqc5vHfOfKXbnwQxxNdJ9byoKeMMvfj2K7RQIYGxMrM4ww==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@arcjet/env": { + "version": "1.0.0-alpha.24", + "resolved": "https://registry.npmjs.org/@arcjet/env/-/env-1.0.0-alpha.24.tgz", + "integrity": "sha512-++b9mfIFJLIzHNzUdfQZ/6/oWVuw8v6SG/SwUsiqV71SktpnFCZIReMK9QjczliMr8WYoL0U1TNol5iupiD/7w==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@arcjet/headers": { + "version": "1.0.0-alpha.24", + "resolved": "https://registry.npmjs.org/@arcjet/headers/-/headers-1.0.0-alpha.24.tgz", + "integrity": "sha512-El1gH+xYYKVo7+khb+ALy+6alyZMDm+fNw/u/j7MLATyix7v8OvoMW0Ls4VeAtTFa0jgyIsM8Avqzs9kBV9aBQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@arcjet/ip": { + "version": "1.0.0-alpha.24", + "resolved": "https://registry.npmjs.org/@arcjet/ip/-/ip-1.0.0-alpha.24.tgz", + "integrity": "sha512-OlhMdUj1cwnYFeTGgFoPNKo/9diqfLnlJIbOqRheDMuIVsyYvMQUzo5TeT/VNFQZ80FEZru65v02wMR+i81Tjg==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@arcjet/logger": { + "version": "1.0.0-alpha.24", + "resolved": "https://registry.npmjs.org/@arcjet/logger/-/logger-1.0.0-alpha.24.tgz", + "integrity": "sha512-l5K9bQitzEs7reBTY5+KWwXQYxD5+WgUQkOm/judYlCTc9aX7soUr+QCt3voHmTz4Elr8UIsFJood05jFxxo/g==", + "license": "Apache-2.0", + "dependencies": { + "@arcjet/sprintf": "1.0.0-alpha.24" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@arcjet/next": { + "version": "1.0.0-alpha.24", + "resolved": "https://registry.npmjs.org/@arcjet/next/-/next-1.0.0-alpha.24.tgz", + "integrity": "sha512-R4kctUeKm3n0ZTFmvOX7L60z2tVcz5kyE50ApjuMAeEMRqRJ702AnsEx74ZtKhQumA9o29Aczc+KtcD8+IZy1g==", + "license": "Apache-2.0", + "dependencies": { + "@arcjet/env": "1.0.0-alpha.24", + "@arcjet/headers": "1.0.0-alpha.24", + "@arcjet/ip": "1.0.0-alpha.24", + "@arcjet/logger": "1.0.0-alpha.24", + "@arcjet/protocol": "1.0.0-alpha.24", + "@arcjet/transport": "1.0.0-alpha.24", + "arcjet": "1.0.0-alpha.24" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "next": ">=13" + } + }, + "node_modules/@arcjet/protocol": { + "version": "1.0.0-alpha.24", + "resolved": "https://registry.npmjs.org/@arcjet/protocol/-/protocol-1.0.0-alpha.24.tgz", + "integrity": "sha512-dOuOBmm0uOuI1LgUA1oiduJuc4HmIgz3hNUMCSG0cLvED7LIJcpkpzKsknvJnGl/Xfey4oauPVXTx7lLr9muvw==", + "license": "Apache-2.0", + "dependencies": { + "@bufbuild/protobuf": "1.10.0", + "@connectrpc/connect": "1.4.0", + "typeid-js": "1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@arcjet/runtime": { + "version": "1.0.0-alpha.24", + "resolved": "https://registry.npmjs.org/@arcjet/runtime/-/runtime-1.0.0-alpha.24.tgz", + "integrity": "sha512-nu9EQZdKlGRh3t27uH7FOT4G7t/xGpnz4eTaYaO19TeRYk5t9Q+Tm0TKzqIslj00ETq1aWqIj19CdZ5/QR65Cg==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@arcjet/sprintf": { + "version": "1.0.0-alpha.24", + "resolved": "https://registry.npmjs.org/@arcjet/sprintf/-/sprintf-1.0.0-alpha.24.tgz", + "integrity": "sha512-AktX4q2R+lbA22ZQSCngj0C+glVwcvWfvZi6bcCSu8ljKsjfaA19BlP9gzdos11TYkxKP3AHPYpBZiKHchJDAA==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@arcjet/transport": { + "version": "1.0.0-alpha.24", + "resolved": "https://registry.npmjs.org/@arcjet/transport/-/transport-1.0.0-alpha.24.tgz", + "integrity": "sha512-roS+Y1SyhiJsVKNEVmQoqNgz6fup17jb7ggenTQXbym7GsOS0UnWjc2DWX+HpEOXwg2Sv6wE/czRGr9rHdGmxQ==", + "license": "Apache-2.0", + "dependencies": { + "@connectrpc/connect-node": "1.4.0", + "@connectrpc/connect-web": "1.4.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@bufbuild/protobuf": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.10.0.tgz", + "integrity": "sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag==", + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, + "node_modules/@connectrpc/connect": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@connectrpc/connect/-/connect-1.4.0.tgz", + "integrity": "sha512-vZeOkKaAjyV4+RH3+rJZIfDFJAfr+7fyYr6sLDKbYX3uuTVszhFe9/YKf5DNqrDb5cKdKVlYkGn6DTDqMitAnA==", + "license": "Apache-2.0", + "peerDependencies": { + "@bufbuild/protobuf": "^1.4.2" + } + }, + "node_modules/@connectrpc/connect-node": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@connectrpc/connect-node/-/connect-node-1.4.0.tgz", + "integrity": "sha512-0ANnrr6SvsjevsWEgdzHy7BaHkluZyS6s4xNoVt7RBHFR5V/kT9lPokoIbYUOU9JHzdRgTaS3x5595mwUsu15g==", + "license": "Apache-2.0", + "dependencies": { + "undici": "^5.28.3" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@bufbuild/protobuf": "^1.4.2", + "@connectrpc/connect": "1.4.0" + } + }, + "node_modules/@connectrpc/connect-web": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@connectrpc/connect-web/-/connect-web-1.4.0.tgz", + "integrity": "sha512-13aO4psFbbm7rdOFGV0De2Za64DY/acMspgloDlcOKzLPPs0yZkhp1OOzAQeiAIr7BM/VOHIA3p8mF0inxCYTA==", + "license": "Apache-2.0", + "peerDependencies": { + "@bufbuild/protobuf": "^1.4.2", + "@connectrpc/connect": "1.4.0" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -98,6 +266,15 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/@flydotio/dockerfile": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@flydotio/dockerfile/-/dockerfile-0.5.7.tgz", @@ -270,15 +447,15 @@ } }, "node_modules/@next/env": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.4.tgz", - "integrity": "sha512-3EtkY5VDkuV2+lNmKlbkibIJxcO4oIHEhBWne6PaAp+76J9KoSsGvNikp6ivzAT8dhhBMYrm6op2pS1ApG0Hzg==", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.9.tgz", + "integrity": "sha512-hnDAoDPMii31V0ivibI8p6b023jOF1XblWTVjsDUoZKwnZlaBtJFZKDwFqi22R8r9i6W08dThUWU7Bsh2Rg8Ww==", "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.4.tgz", - "integrity": "sha512-svSFxW9f3xDaZA3idQmlFw7SusOuWTpDTAeBlO3AEPDltrraV+lqs7mAc6A27YdnpQVVIA3sODqUAAHdWhVWsA==", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.9.tgz", + "integrity": "sha512-tmLXuDNfPTqoFuSfsd9Q4R96SS/UCKTPtBnnR+cKDcbh8xZU+126vZnRWH1WEpOmS4Vl2Hy/X6SPmgOGZzn+hA==", "dev": true, "license": "MIT", "dependencies": { @@ -286,9 +463,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.4.tgz", - "integrity": "sha512-AH3mO4JlFUqsYcwFUHb1wAKlebHU/Hv2u2kb1pAuRanDZ7pD/A/KPD98RHZmwsJpdHQwfEc/06mgpSzwrJYnNg==", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.9.tgz", + "integrity": "sha512-/kfQifl3uLYi3DlwFlzCkgxe6fprJNLzzTUFknq3M5wGYicDIbdGlxUl6oHpVLJpBB/CBY3Y//gO6alz/K4NWA==", "cpu": [ "arm64" ], @@ -302,9 +479,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.4.tgz", - "integrity": "sha512-QVadW73sWIO6E2VroyUjuAxhWLZWEpiFqHdZdoQ/AMpN9YWGuHV8t2rChr0ahy+irKX5mlDU7OY68k3n4tAZTg==", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.9.tgz", + "integrity": "sha512-tK/RyhCmOCiXQ9IVdFrBbZOf4/1+0RSuJkebXU2uMEsusS51TjIJO4l8ZmEijH9gZa0pJClvmApRHi7JuBqsRw==", "cpu": [ "x64" ], @@ -318,9 +495,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.4.tgz", - "integrity": "sha512-KT6GUrb3oyCfcfJ+WliXuJnD6pCpZiosx2X3k66HLR+DMoilRb76LpWPGb4tZprawTtcnyrv75ElD6VncVamUQ==", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.9.tgz", + "integrity": "sha512-tS5eqwsp2nO7mzywRUuFYmefNZsUKM/mTG3exK2jIHv9TEVklE1SByB1KMhFkqlit1PxS9YK1tV8BOV90Wpbrw==", "cpu": [ "arm64" ], @@ -334,9 +511,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.4.tgz", - "integrity": "sha512-Alv8/XGSs/ytwQcbCHwze1HmiIkIVhDHYLjczSVrf0Wi2MvKn/blt7+S6FJitj3yTlMwMxII1gIJ9WepI4aZ/A==", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.9.tgz", + "integrity": "sha512-8svpeTFNAMTUMKQbEzE8qRAwl9o7mNBv7LR1bmSkQvo1oy4WrNyZbhWsldOiKrc4mZ5dfQkGYsI9T75mIFMfeA==", "cpu": [ "arm64" ], @@ -350,9 +527,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.4.tgz", - "integrity": "sha512-ze0ShQDBPCqxLImzw4sCdfnB3lRmN3qGMB2GWDRlq5Wqy4G36pxtNOo2usu/Nm9+V2Rh/QQnrRc2l94kYFXO6Q==", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.9.tgz", + "integrity": "sha512-0HNulLWpKTB7H5BhHCkEhcRAnWUHeAYCftrrGw3QC18+ZywTdAoPv/zEqKy/0adqt+ks4JDdlgSQ1lNKOKjo0A==", "cpu": [ "x64" ], @@ -366,9 +543,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.4.tgz", - "integrity": "sha512-8dwC0UJoc6fC7PX70csdaznVMNr16hQrTDAMPvLPloazlcaWfdPogq+UpZX6Drqb1OBlwowz8iG7WR0Tzk/diQ==", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.9.tgz", + "integrity": "sha512-hhVFViPHLAVUJRNtwwm609p9ozWajOmRvzOZzzKXgiVGwx/CALxlMUeh+M+e0Zj6orENhWLZeilOPHpptuENsA==", "cpu": [ "x64" ], @@ -382,9 +559,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.4.tgz", - "integrity": "sha512-jxyg67NbEWkDyvM+O8UDbPAyYRZqGLQDTPwvrBBeOSyVWW/jFQkQKQ70JDqDSYg1ZDdl+E3nkbFbq8xM8E9x8A==", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.9.tgz", + "integrity": "sha512-p/v6XlOdrk06xfN9z4evLNBqftVQUWiyduQczCwSj7hNh8fWTbzdVxsEiNOcajMXJbQiaX/ZzZdFgKVmmJnnGQ==", "cpu": [ "arm64" ], @@ -398,9 +575,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.4.tgz", - "integrity": "sha512-twrmN753hjXRdcrZmZttb/m5xaCBFa48Dt3FbeEItpJArxriYDunWxJn+QFXdJ3hPkm4u7CKxncVvnmgQMY1ag==", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.9.tgz", + "integrity": "sha512-IcW9dynWDjMK/0M05E3zopbRen7v0/yEaMZbHFOSS1J/w+8YG3jKywOGZWNp/eCUVtUUXs0PW+7Lpz8uLu+KQA==", "cpu": [ "ia32" ], @@ -414,9 +591,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.4.tgz", - "integrity": "sha512-tkLrjBzqFTP8DVrAAQmZelEahfR9OxWpFR++vAI9FBhCiIxtwHwBHC23SBHCTURBtwB4kc/x44imVOnkKGNVGg==", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.9.tgz", + "integrity": "sha512-gcbpoXyWZdVOBgNa5BRzynrL5UR1nb2ZT38yKgnphYU9UHjeecnylMHntrQiMg/QtONDcJPFC/PmsS47xIRYoA==", "cpu": [ "x64" ], @@ -501,6 +678,13 @@ "tslib": "^2.4.0" } }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -546,6 +730,49 @@ "@types/react": "*" } }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz", + "integrity": "sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/type-utils": "7.2.0", + "@typescript-eslint/utils": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/@typescript-eslint/parser": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", @@ -593,6 +820,34 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz", + "integrity": "sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/utils": "7.2.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/@typescript-eslint/types": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", @@ -662,6 +917,32 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@typescript-eslint/utils": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.2.0.tgz", + "integrity": "sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, "node_modules/@typescript-eslint/visitor-keys": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", @@ -774,6 +1055,22 @@ "node": ">= 8" } }, + "node_modules/arcjet": { + "version": "1.0.0-alpha.24", + "resolved": "https://registry.npmjs.org/arcjet/-/arcjet-1.0.0-alpha.24.tgz", + "integrity": "sha512-+r0R+YnFNnCER/M3wiQVdNX37xr20+wiR1yaG781AAWFcSn7aR1yZRcwxo9lCOuO+PUMgaIoYCMFgo+jv3U5qg==", + "license": "Apache-2.0", + "dependencies": { + "@arcjet/analyze": "1.0.0-alpha.24", + "@arcjet/duration": "1.0.0-alpha.24", + "@arcjet/headers": "1.0.0-alpha.24", + "@arcjet/protocol": "1.0.0-alpha.24", + "@arcjet/runtime": "1.0.0-alpha.24" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", @@ -1848,14 +2145,15 @@ } }, "node_modules/eslint-config-next": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.4.tgz", - "integrity": "sha512-Qr0wMgG9m6m4uYy2jrYJmyuNlYZzPRQq5Kvb9IDlYwn+7yq6W6sfMNFgb+9guM1KYwuIo6TIaiFhZJ6SnQ/Efw==", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.9.tgz", + "integrity": "sha512-aNgGqWBp2KFcuEf9zNqmv+8dBkOrdyOlCIbdtyw7fiCQioLqXNcXmalAyeNtVyE95Kwgg11bgXvuVqdxpbR79g==", "dev": true, "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "14.2.4", + "@next/eslint-plugin-next": "14.2.9", "@rushstack/eslint-patch": "^1.3.3", + "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", @@ -3613,12 +3911,12 @@ "license": "MIT" }, "node_modules/next": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/next/-/next-14.2.4.tgz", - "integrity": "sha512-R8/V7vugY+822rsQGQCjoLhMuC9oFj9SOi4Cl4b2wjDrseD0LRZ10W7R6Czo4w9ZznVSshKjuIomsRjvm9EKJQ==", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/next/-/next-14.2.9.tgz", + "integrity": "sha512-3CzBNo6BuJnRjcQvRw+irnU1WiuJNZEp+dkzkt91y4jeIDN/Emg95F+takSYiLpJ/HkxClVQRyqiTwYce5IVqw==", "license": "MIT", "dependencies": { - "@next/env": "14.2.4", + "@next/env": "14.2.9", "@swc/helpers": "0.5.5", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", @@ -3633,15 +3931,15 @@ "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.2.4", - "@next/swc-darwin-x64": "14.2.4", - "@next/swc-linux-arm64-gnu": "14.2.4", - "@next/swc-linux-arm64-musl": "14.2.4", - "@next/swc-linux-x64-gnu": "14.2.4", - "@next/swc-linux-x64-musl": "14.2.4", - "@next/swc-win32-arm64-msvc": "14.2.4", - "@next/swc-win32-ia32-msvc": "14.2.4", - "@next/swc-win32-x64-msvc": "14.2.4" + "@next/swc-darwin-arm64": "14.2.9", + "@next/swc-darwin-x64": "14.2.9", + "@next/swc-linux-arm64-gnu": "14.2.9", + "@next/swc-linux-arm64-musl": "14.2.9", + "@next/swc-linux-x64-gnu": "14.2.9", + "@next/swc-linux-x64-musl": "14.2.9", + "@next/swc-win32-arm64-msvc": "14.2.9", + "@next/swc-win32-ia32-msvc": "14.2.9", + "@next/swc-win32-x64-msvc": "14.2.9" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", @@ -5191,6 +5489,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typeid-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typeid-js/-/typeid-js-1.0.0.tgz", + "integrity": "sha512-E2RIw0FDKCNnUKrm5KSgtOtBXC8lvv98EHGL+XZfFPFvHnOnQyljxPs9ZxcIMhrxIyywxZqIDD/DGEZMEuGJ5w==", + "license": "Apache-2.0", + "dependencies": { + "uuidv7": "^0.6.2" + } + }, "node_modules/typescript": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", @@ -5221,6 +5528,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici": { + "version": "5.28.4", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", + "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", @@ -5245,6 +5564,15 @@ "dev": true, "license": "MIT" }, + "node_modules/uuidv7": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/uuidv7/-/uuidv7-0.6.3.tgz", + "integrity": "sha512-zV3eW2NlXTsun/aJ7AixxZjH/byQcH/r3J99MI0dDEkU2cJIBJxhEWUHDTpOaLPRNhebPZoeHuykYREkI9HafA==", + "license": "Apache-2.0", + "bin": { + "uuidv7": "cli.js" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index 418fc8b..8039587 100644 --- a/package.json +++ b/package.json @@ -9,10 +9,11 @@ "lint": "next lint" }, "dependencies": { + "@arcjet/next": "^1.0.0-alpha.24", "lucide-react": "^0.399.0", - "next": "14.2.4", - "react": "^18", - "react-dom": "^18" + "next": "^14.2.9", + "react": "^18.3.1", + "react-dom": "^18.3.1" }, "devDependencies": { "@flydotio/dockerfile": "^0.5.7", @@ -20,7 +21,7 @@ "@types/react": "^18", "@types/react-dom": "^18", "eslint": "^8", - "eslint-config-next": "14.2.4", + "eslint-config-next": "^14.2.9", "postcss": "^8", "tailwindcss": "^3.4.1", "typescript": "^5"