incorporate arcjet

Signed-off-by: Xe Iaso <me@xeiaso.net>
This commit is contained in:
Xe Iaso 2024-09-09 23:02:59 -04:00
parent 69d650606f
commit ffd029cdbb
10 changed files with 541 additions and 103 deletions

View File

@ -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" ]

44
Earthfile Normal file
View File

@ -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

17
app/middleware.ts Normal file
View File

@ -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);

45
manifest/deployment.yaml Normal file
View File

@ -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

23
manifest/ingress.yaml Normal file
View File

@ -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

View File

@ -0,0 +1,8 @@
resources:
- deployment.yaml
- ingress.yaml
- secret.yaml
- service.yaml
commonLabels:
app.kubernetes.io/name: techaro

6
manifest/secret.yaml Normal file
View File

@ -0,0 +1,6 @@
apiVersion: onepassword.com/v1
kind: OnePasswordItem
metadata:
name: techaro-lol
spec:
itemPath: "vaults/Kubernetes/items/Techaro WWW Arcjet"

11
manifest/service.yaml Normal file
View File

@ -0,0 +1,11 @@
apiVersion: v1
kind: Service
metadata:
name: techaro-lol
spec:
ports:
- protocol: TCP
port: 80
targetPort: 3000
name: http
type: ClusterIP

436
package-lock.json generated
View File

@ -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",

View File

@ -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"