diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000..fe3de70
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,11 @@
+# To get started with Dependabot version updates, you'll need to specify which
+# package ecosystems to update and where the package manifests are located.
+# Please see the documentation for all configuration options:
+# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
+
+version: 2
+updates:
+ - package-ecosystem: "yarn" # See documentation for possible values
+ directory: "/" # Location of package manifests
+ schedule:
+ interval: "weekly"
diff --git a/app/api/deploy/route.ts b/app/api/deploy/route.ts
index 645e70c..805ef94 100644
--- a/app/api/deploy/route.ts
+++ b/app/api/deploy/route.ts
@@ -1,29 +1,71 @@
-import {NextResponse} from 'next/server'
-import {gql, GraphQLClient} from 'graphql-request'
+import { NextResponse } from 'next/server'
+import { gql, GraphQLClient } from 'graphql-request'
export async function POST(req: Request) {
+ const { beeperToken, flyToken, bridge, region, appName, redeploy } = await req.json()
+
+ // If redeploy flag is passed, update existing machine to latest image
+ if (redeploy) {
+ const res_list = await fetch(`https://api.machines.dev/v1/apps/${appName}/machines`, {
+ method: 'GET',
+ headers: {
+ 'Authorization': `Bearer ${flyToken}`,
+ 'Content-Type': 'application/json',
+ }
+ })
+
+ if (res_list.status !== 200) {
+ const list_data = await res_list.json()
+ return NextResponse.json({ error: JSON.stringify(list_data) }, { status: 500 })
+ }
+
+ const machines = await res_list.json()
+ if (!machines || machines.length === 0) {
+ return NextResponse.json({ error: `No machines found for app ${appName}` }, { status: 404 })
+ }
+
+ const machine = machines[0]
+
+ const update_res = await fetch(`https://api.machines.dev/v1/apps/${appName}/machines/${machine.id}`, {
+ method: 'POST',
+ headers: {
+ 'Authorization': `Bearer ${flyToken}`,
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({
+ config: {
+ ...machine.config,
+ image: "ghcr.io/beeper/bridge-manager"
+ }
+ })
+ })
+
+ if (update_res.status !== 200) {
+ const update_data = await update_res.json()
+ return NextResponse.json({ error: JSON.stringify(update_data) }, { status: 500 })
+ }
+
+ return NextResponse.json({ success: true })
+ }
- const {beeperToken, flyToken, bridge, region} = await req.json()
const app_name = `sh-${bridge}-${Date.now()}`
// Create the app
-
const res_create_app = await fetch('https://api.machines.dev/v1/apps', {
method: 'POST',
headers: {
'Authorization': `Bearer ${flyToken}`,
'Content-Type': 'application/json',
},
- body: JSON.stringify({app_name: app_name, org_slug: 'personal'})
+ body: JSON.stringify({ app_name: app_name, org_slug: 'personal' })
})
if (res_create_app.status != 201) {
- const create_app_data = await res_create_app.json();
+ const create_app_data = await res_create_app.json()
return NextResponse.json({ error: JSON.stringify(create_app_data) }, { status: 500 })
}
// Allocate shared IPv4
-
const graphQLClient = new GraphQLClient('https://api.fly.io/graphql', {
headers: {
authorization: `Bearer ${flyToken}`,
@@ -47,6 +89,7 @@ export async function POST(req: Request) {
"region": region
}
}
+
const ip_request_data: any = await graphQLClient.request(ip_query, ip_variables)
if (!ip_request_data.allocateIpAddress?.app?.sharedIpAddress) {
@@ -54,33 +97,33 @@ export async function POST(req: Request) {
}
// Set secrets
-
const secrets_query = gql`
mutation($input: SetSecretsInput!) {
- setSecrets(input: $input) {
- release {
- id
- version
- reason
- description
- user {
+ setSecrets(input: $input) {
+ release {
id
- email
- name
+ version
+ reason
+ description
+ user {
+ id
+ email
+ name
+ }
+ evaluationId
+ createdAt
}
- evaluationId
- createdAt
}
}
- }`
+ `
const secrets_variables = {
"input": {
"appId": app_name,
"secrets": [
- {"key": "MATRIX_ACCESS_TOKEN", "value": beeperToken},
- {"key": "BRIDGE_NAME", "value": app_name},
- {"key": "DB_DIR", "value": "/data"}
+ { "key": "MATRIX_ACCESS_TOKEN", "value": beeperToken },
+ { "key": "BRIDGE_NAME", "value": app_name },
+ { "key": "DB_DIR", "value": "/data" }
]
}
}
@@ -92,7 +135,6 @@ export async function POST(req: Request) {
}
// Create machine
-
const res_create_machine = await fetch(`https://api.machines.dev/v1/apps/${app_name}/machines`, {
method: 'POST',
headers: {
@@ -108,23 +150,23 @@ export async function POST(req: Request) {
},
"services": [
{
- "ports": [
- {
- "port": 443,
- "handlers": [
- "tls",
- "http"
- ]
- },
- {
- "port": 80,
- "handlers": [
- "http"
- ]
- }
- ],
- "protocol": "tcp",
- "internal_port": 8080
+ "ports": [
+ {
+ "port": 443,
+ "handlers": [
+ "tls",
+ "http"
+ ]
+ },
+ {
+ "port": 80,
+ "handlers": [
+ "http"
+ ]
+ }
+ ],
+ "protocol": "tcp",
+ "internal_port": 8080
}
]
}
@@ -147,15 +189,15 @@ export async function POST(req: Request) {
})
if (beeper_whoami.status != 200) {
- const beeper_bridge_data = await beeper_whoami.json();
+ const beeper_bridge_data = await beeper_whoami.json()
return NextResponse.json({ error: JSON.stringify(beeper_bridge_data) }, { status: 500 })
}
- const beeper_bridge_response = await beeper_whoami.json();
- beeper_bridges = Object.keys(beeper_bridge_response.user.bridges);
+ const beeper_bridge_response = await beeper_whoami.json()
+ beeper_bridges = Object.keys(beeper_bridge_response.user.bridges)
- await new Promise(r => setTimeout(r, 1000));
+ await new Promise(r => setTimeout(r, 1000))
}
- return NextResponse.json({"appName": app_name})
-}
\ No newline at end of file
+ return NextResponse.json({ "appName": app_name })
+}
diff --git a/app/components/BeeperLogin.tsx b/app/components/BeeperLogin.tsx
index f8e4cf6..e8150fd 100644
--- a/app/components/BeeperLogin.tsx
+++ b/app/components/BeeperLogin.tsx
@@ -1,9 +1,8 @@
-import {useState} from "react";
+import { useState } from "react";
export default function BeeperLogin({ setBeeperToken }: any) {
-
- const [sentCode, setSentCode] = useState(false)
- const [loginIdentifier, setLoginIdentifier] = useState("")
+ const [sentCode, setSentCode] = useState(false);
+ const [loginIdentifier, setLoginIdentifier] = useState("");
async function sendLoginEmail(event: any) {
event.preventDefault();
@@ -16,7 +15,7 @@ export default function BeeperLogin({ setBeeperToken }: any) {
Authorization: "Bearer BEEPER-PRIVATE-API-PLEASE-DONT-USE",
},
});
- const {request} = await loginResponse.json();
+ const { request } = await loginResponse.json();
await fetch("https://api.beeper.com/user/login/email", {
method: "POST",
@@ -24,7 +23,7 @@ export default function BeeperLogin({ setBeeperToken }: any) {
Authorization: "Bearer BEEPER-PRIVATE-API-PLEASE-DONT-USE",
"Content-Type": "application/json",
},
- body: JSON.stringify({request, email}),
+ body: JSON.stringify({ request, email }),
});
setSentCode(true);
@@ -32,9 +31,10 @@ export default function BeeperLogin({ setBeeperToken }: any) {
}
async function getToken(event: any) {
- event.preventDefault()
+ event.preventDefault();
- const code = event.target[0].value;
+ let code = event.target[0].value;
+ code = code.replace(/\s+/g, ""); // strip all whitespace
const loginChallengeResponse = await fetch(
"https://api.beeper.com/user/login/response",
@@ -62,34 +62,47 @@ export default function BeeperLogin({ setBeeperToken }: any) {
token: token
})
}
- )
+ );
const { access_token } = await accessTokenResponse.json();
setBeeperToken(access_token);
- window.localStorage.setItem("beeperToken", access_token)
+ window.localStorage.setItem("beeperToken", access_token);
}
return (
Sign in to Beeper
-
This will be used to connect your self-hosted bridge to your Beeper account. Your credentials will be passed directly to Fly.
- { sentCode ? (
+
+ This will be used to connect your self-hosted bridge to your Beeper account. Your credentials will be passed directly to Fly.
+
+
+ {sentCode ? (
{"We've emailed you a login code."}
- ) : (
+ ) : (
)}
- )
-}
\ No newline at end of file
+ );
+}
diff --git a/app/components/BridgeDeploy.tsx b/app/components/BridgeDeploy.tsx
index 00343bf..606d5c2 100644
--- a/app/components/BridgeDeploy.tsx
+++ b/app/components/BridgeDeploy.tsx
@@ -44,11 +44,12 @@ export default function BridgeDeploy({beeperToken, flyToken, onCreate}: any) {
const bridges: Record = {
whatsapp: "WhatsApp",
gmessages: "Google Messages",
- instagram: "Instagram",
+ instagramgo: "Instagram",
+ facebookgo: "Facebook",
+ signal: "Signal",
discord: "Discord",
slack: "Slack",
telegram: "Telegram",
- twitter: "Twitter"
}
@@ -100,4 +101,4 @@ export default function BridgeDeploy({beeperToken, flyToken, onCreate}: any) {
)
-}
\ No newline at end of file
+}
diff --git a/app/components/BridgeInstance.tsx b/app/components/BridgeInstance.tsx
index 546b68c..b50edf1 100644
--- a/app/components/BridgeInstance.tsx
+++ b/app/components/BridgeInstance.tsx
@@ -1,16 +1,17 @@
-import {useState} from "react";
+import { useState } from "react";
-export default function BridgeInstance({name, onFly, beeperToken, flyToken, onDelete}: any) {
+export default function BridgeInstance({ name, onFly, beeperToken, flyToken, onDelete }: any) {
const [deleteInProgress, setDeleteInProgress] = useState(false)
const [errorMessage, setErrorMessage] = useState("")
+ const [redeploying, setRedeploying] = useState(false)
async function deleteBridge() {
setDeleteInProgress(true);
const res = await fetch("/api/delete", {
method: 'DELETE',
- body: JSON.stringify({beeperToken: beeperToken, flyToken: flyToken, name: name, onFly: onFly})
+ body: JSON.stringify({ beeperToken: beeperToken, flyToken: flyToken, name: name, onFly: onFly })
})
if (res.status === 500) {
@@ -23,6 +24,29 @@ export default function BridgeInstance({name, onFly, beeperToken, flyToken, onDe
onDelete();
}
+ async function redeployBridge() {
+ setRedeploying(true)
+
+ const res = await fetch("/api/deploy", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json"
+ },
+ body: JSON.stringify({
+ redeploy: true,
+ appName: name,
+ flyToken: flyToken
+ })
+ })
+
+ if (res.status !== 200) {
+ const error_data = await res.json()
+ setErrorMessage(error_data.error)
+ }
+
+ setRedeploying(false)
+ }
+
return (
@@ -30,18 +54,29 @@ export default function BridgeInstance({name, onFly, beeperToken, flyToken, onDe
- { onFly && { navigator.clipboard.writeText(`@${name}bot:beeper.local`)}}>Copy }
+ {onFly && { navigator.clipboard.writeText(`@${name}bot:beeper.local`) }}>Copy }
+
+
+
+ {onFly && View on Fly }
- { onFly && View on Fly }
+ {!deleteInProgress ? (
+ Delete
+ ) : (
+ Deleting...
+ )}
+ {errorMessage}
- {!deleteInProgress ? Delete :
- Deleting... }
- { errorMessage }
+ {!redeploying ? (
+ Redeploy
+ ) : (
+ Redeploying...
+ )}
)
-}
\ No newline at end of file
+}
diff --git a/app/components/FlyLogin.tsx b/app/components/FlyLogin.tsx
index 4e97ffa..3391d54 100644
--- a/app/components/FlyLogin.tsx
+++ b/app/components/FlyLogin.tsx
@@ -12,15 +12,15 @@ export default function FlyLogin({setFlyToken}: any) {
Sign in to Fly
{"We'll"} use Fly, a cloud hosting provider, to deploy your bridges. You can run up to 3 bridges for free, then {"they'll"} charge you $2/month for each additional bridge.
Create a Fly account at https://fly.io/app/sign-up .
- Next, generate an access token: https://fly.io/user/personal_access_tokens . This allows the self-host utility to deploy bridges on your Fly account. Your token is passed directly from this web app to Fly, and all of the code involving your Fly token is open-source on GitHub.
+ Next, generate an org deploy token: https://fly.io/tokens . This allows the self-host utility to deploy bridges on your Fly account. Your token is passed directly from this web app to Fly, and all of the code involving your Fly token is open-source on GitHub.
-
Your fly.io token:
+
Your fly.io org deploy token:
)
-}
\ No newline at end of file
+}
diff --git a/app/components/Welcome.tsx b/app/components/Welcome.tsx
index 6d99ce4..10d65b8 100644
--- a/app/components/Welcome.tsx
+++ b/app/components/Welcome.tsx
@@ -19,7 +19,7 @@ export default function Welcome({ setSeenWelcome }: any) {
Use this web app to self-host bridges on your fly.io account. Simply sign into Beeper and Fly, and this web app will run the bridge on your Fly account and install it in Beeper.
-
This site is open-source at https://github.com/beeper/self-host-web . This webpage is being auto-deployed, however, you can run it from the GitHub if you prefer. Just follow the instructions in the README.
+
This site is open-source at https://github.com/kubo6472/beeper-selfhost . This webpage is being auto-deployed, however, you can run it from the GitHub if you prefer. Just follow the instructions in the README.
diff --git a/package.json b/package.json
index c8828e1..5f49a7a 100644
--- a/package.json
+++ b/package.json
@@ -2,6 +2,7 @@
"name": "self-host-web",
"version": "0.1.0",
"private": true,
+ "packageManager": "yarn@1.22.19",
"scripts": {
"dev": "next dev",
"build": "next build",
@@ -15,10 +16,10 @@
"autoprefixer": "10.4.14",
"eslint": "8.46.0",
"eslint-config-next": "13.4.13",
- "graphql": "^16.7.1",
+ "graphql": "^16.8.1",
"graphql-request": "^6.1.0",
- "next": "^14.2.4",
- "postcss": "8.4.27",
+ "next": "^14.2.32",
+ "postcss": "8.4.31",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"tailwindcss": "3.3.3",
diff --git a/yarn.lock b/yarn.lock
index dde90cc..eeac44c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -107,10 +107,10 @@
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
-"@next/env@14.2.4":
- version "14.2.4"
- resolved "https://registry.yarnpkg.com/@next/env/-/env-14.2.4.tgz#5546813dc4f809884a37d257b254a5ce1b0248d7"
- integrity sha512-3EtkY5VDkuV2+lNmKlbkibIJxcO4oIHEhBWne6PaAp+76J9KoSsGvNikp6ivzAT8dhhBMYrm6op2pS1ApG0Hzg==
+"@next/env@14.2.32":
+ version "14.2.32"
+ resolved "https://registry.yarnpkg.com/@next/env/-/env-14.2.32.tgz#6d1107e2b7cc8649ff3730b8b46deb4e8a6d38fa"
+ integrity sha512-n9mQdigI6iZ/DF6pCTwMKeWgF2e8lg7qgt5M7HXMLtyhZYMnf/u905M18sSpPmHL9MKp9JHo56C6jrD2EvWxng==
"@next/eslint-plugin-next@13.4.13":
version "13.4.13"
@@ -119,50 +119,50 @@
dependencies:
glob "7.1.7"
-"@next/swc-darwin-arm64@14.2.4":
- version "14.2.4"
- resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.4.tgz#da9f04c34a3d5f0b8401ed745768420e4a604036"
- integrity sha512-AH3mO4JlFUqsYcwFUHb1wAKlebHU/Hv2u2kb1pAuRanDZ7pD/A/KPD98RHZmwsJpdHQwfEc/06mgpSzwrJYnNg==
-
-"@next/swc-darwin-x64@14.2.4":
- version "14.2.4"
- resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.4.tgz#46dedb29ec5503bf171a72a3ecb8aac6e738e9d6"
- integrity sha512-QVadW73sWIO6E2VroyUjuAxhWLZWEpiFqHdZdoQ/AMpN9YWGuHV8t2rChr0ahy+irKX5mlDU7OY68k3n4tAZTg==
-
-"@next/swc-linux-arm64-gnu@14.2.4":
- version "14.2.4"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.4.tgz#c9697ab9eb422bd1d7ffd0eb0779cc2aefa9d4a1"
- integrity sha512-KT6GUrb3oyCfcfJ+WliXuJnD6pCpZiosx2X3k66HLR+DMoilRb76LpWPGb4tZprawTtcnyrv75ElD6VncVamUQ==
-
-"@next/swc-linux-arm64-musl@14.2.4":
- version "14.2.4"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.4.tgz#cbbceb2008571c743b5a310a488d2e166d200a75"
- integrity sha512-Alv8/XGSs/ytwQcbCHwze1HmiIkIVhDHYLjczSVrf0Wi2MvKn/blt7+S6FJitj3yTlMwMxII1gIJ9WepI4aZ/A==
-
-"@next/swc-linux-x64-gnu@14.2.4":
- version "14.2.4"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.4.tgz#d79184223f857bacffb92f643cb2943a43632568"
- integrity sha512-ze0ShQDBPCqxLImzw4sCdfnB3lRmN3qGMB2GWDRlq5Wqy4G36pxtNOo2usu/Nm9+V2Rh/QQnrRc2l94kYFXO6Q==
-
-"@next/swc-linux-x64-musl@14.2.4":
- version "14.2.4"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.4.tgz#6b6c3e5ac02ca5e63394d280ec8ee607491902df"
- integrity sha512-8dwC0UJoc6fC7PX70csdaznVMNr16hQrTDAMPvLPloazlcaWfdPogq+UpZX6Drqb1OBlwowz8iG7WR0Tzk/diQ==
-
-"@next/swc-win32-arm64-msvc@14.2.4":
- version "14.2.4"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.4.tgz#dbad3906e870dba84c5883d9d4c4838472e0697f"
- integrity sha512-jxyg67NbEWkDyvM+O8UDbPAyYRZqGLQDTPwvrBBeOSyVWW/jFQkQKQ70JDqDSYg1ZDdl+E3nkbFbq8xM8E9x8A==
-
-"@next/swc-win32-ia32-msvc@14.2.4":
- version "14.2.4"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.4.tgz#6074529b91ba49132922ce89a2e16d25d2ec235d"
- integrity sha512-twrmN753hjXRdcrZmZttb/m5xaCBFa48Dt3FbeEItpJArxriYDunWxJn+QFXdJ3hPkm4u7CKxncVvnmgQMY1ag==
-
-"@next/swc-win32-x64-msvc@14.2.4":
- version "14.2.4"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.4.tgz#e65a1c6539a671f97bb86d5183d6e3a1733c29c7"
- integrity sha512-tkLrjBzqFTP8DVrAAQmZelEahfR9OxWpFR++vAI9FBhCiIxtwHwBHC23SBHCTURBtwB4kc/x44imVOnkKGNVGg==
+"@next/swc-darwin-arm64@14.2.32":
+ version "14.2.32"
+ resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.32.tgz#83482a7282df899b73d916e02b02a189771e706c"
+ integrity sha512-osHXveM70zC+ilfuFa/2W6a1XQxJTvEhzEycnjUaVE8kpUS09lDpiDDX2YLdyFCzoUbvbo5r0X1Kp4MllIOShw==
+
+"@next/swc-darwin-x64@14.2.32":
+ version "14.2.32"
+ resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.32.tgz#1a9eb676a014e1fc999251f10288c25a0f81d6d1"
+ integrity sha512-P9NpCAJuOiaHHpqtrCNncjqtSBi1f6QUdHK/+dNabBIXB2RUFWL19TY1Hkhu74OvyNQEYEzzMJCMQk5agjw1Qg==
+
+"@next/swc-linux-arm64-gnu@14.2.32":
+ version "14.2.32"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.32.tgz#7713a49abd555d6f698e766b1631b67d881b4ee4"
+ integrity sha512-v7JaO0oXXt6d+cFjrrKqYnR2ubrD+JYP7nQVRZgeo5uNE5hkCpWnHmXm9vy3g6foMO8SPwL0P3MPw1c+BjbAzA==
+
+"@next/swc-linux-arm64-musl@14.2.32":
+ version "14.2.32"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.32.tgz#327efdffe97e56f5389a7889cdedbd676fdbb519"
+ integrity sha512-tA6sIKShXtSJBTH88i0DRd6I9n3ZTirmwpwAqH5zdJoQF7/wlJXR8DkPmKwYl5mFWhEKr5IIa3LfpMW9RRwKmQ==
+
+"@next/swc-linux-x64-gnu@14.2.32":
+ version "14.2.32"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.32.tgz#a3e7444613d0fe5c8ea4ead08d6a9c818246758c"
+ integrity sha512-7S1GY4TdnlGVIdeXXKQdDkfDysoIVFMD0lJuVVMeb3eoVjrknQ0JNN7wFlhCvea0hEk0Sd4D1hedVChDKfV2jw==
+
+"@next/swc-linux-x64-musl@14.2.32":
+ version "14.2.32"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.32.tgz#a2ec5b0a06c740d6740c938b1d4a614f1a13f018"
+ integrity sha512-OHHC81P4tirVa6Awk6eCQ6RBfWl8HpFsZtfEkMpJ5GjPsJ3nhPe6wKAJUZ/piC8sszUkAgv3fLflgzPStIwfWg==
+
+"@next/swc-win32-arm64-msvc@14.2.32":
+ version "14.2.32"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.32.tgz#b4d3e47c6b276fc4711deb978d04015d029d198d"
+ integrity sha512-rORQjXsAFeX6TLYJrCG5yoIDj+NKq31Rqwn8Wpn/bkPNy5rTHvOXkW8mLFonItS7QC6M+1JIIcLe+vOCTOYpvg==
+
+"@next/swc-win32-ia32-msvc@14.2.32":
+ version "14.2.32"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.32.tgz#d1f1f854a1fbbaeefa8f81271437448653f33494"
+ integrity sha512-jHUeDPVHrgFltqoAqDB6g6OStNnFxnc7Aks3p0KE0FbwAvRg6qWKYF5mSTdCTxA3axoSAUwxYdILzXJfUwlHhA==
+
+"@next/swc-win32-x64-msvc@14.2.32":
+ version "14.2.32"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.32.tgz#8212d681cf6858a9e3204728f8f2b161000683ed"
+ integrity sha512-2N0lSoU4GjfLSO50wvKpMQgKd4HdI2UHEhQPPPnlgfBJlOgJxkjpkYBqzk08f1gItBB6xF/n+ykso2hgxuydsA==
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
@@ -508,12 +508,12 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0"
concat-map "0.0.1"
-braces@^3.0.2, braces@~3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
- integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+braces@^3.0.3, braces@~3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
+ integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
dependencies:
- fill-range "^7.0.1"
+ fill-range "^7.1.1"
browserslist@^4.21.5:
version "4.21.10"
@@ -557,12 +557,7 @@ camelcase-css@^2.0.1:
resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
-caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001517:
- version "1.0.30001519"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz#3e7b8b8a7077e78b0eb054d69e6edf5c7df35601"
- integrity sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==
-
-caniuse-lite@^1.0.30001579:
+caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001517, caniuse-lite@^1.0.30001579:
version "1.0.30001632"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001632.tgz#964207b7cba5851701afb4c8afaf1448db3884b6"
integrity sha512-udx3o7yHJfUxMLkGohMlVHCvFvWmirKh9JAH/d7WOLPetlH+LTL5cocMZ0t7oZx/mdlOWXti97xLZWc8uURRHg==
@@ -625,9 +620,9 @@ cross-fetch@^3.1.5:
node-fetch "^2.6.12"
cross-spawn@^7.0.2, cross-spawn@^7.0.3:
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
- integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ version "7.0.6"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
+ integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
dependencies:
path-key "^3.1.0"
shebang-command "^2.0.0"
@@ -1115,10 +1110,10 @@ file-entry-cache@^6.0.1:
dependencies:
flat-cache "^3.0.4"
-fill-range@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
- integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+fill-range@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
+ integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
dependencies:
to-regex-range "^5.0.1"
@@ -1327,10 +1322,10 @@ graphql-request@^6.1.0:
"@graphql-typed-document-node/core" "^3.2.0"
cross-fetch "^3.1.5"
-graphql@^16.7.1:
- version "16.7.1"
- resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.7.1.tgz#11475b74a7bff2aefd4691df52a0eca0abd9b642"
- integrity sha512-DRYR9tf+UGU0KOsMcKAlXeFfX89UiiIZ0dRU3mR0yJfu6OjZqUcp68NnFLnqQU5RexygFoDy1EW+ccOYcPfmHg==
+graphql@^16.8.1:
+ version "16.8.1"
+ resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07"
+ integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==
has-bigints@^1.0.1, has-bigints@^1.0.2:
version "1.0.2"
@@ -1712,11 +1707,11 @@ merge2@^1.3.0, merge2@^1.4.1:
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
micromatch@^4.0.4, micromatch@^4.0.5:
- version "4.0.5"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
- integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
+ integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
dependencies:
- braces "^3.0.2"
+ braces "^3.0.3"
picomatch "^2.3.1"
mimic-fn@^2.1.0:
@@ -1761,21 +1756,21 @@ mz@^2.7.0:
thenify-all "^1.0.0"
nanoid@^3.3.6:
- version "3.3.6"
- resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
- integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
+ version "3.3.8"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf"
+ integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==
natural-compare@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
-next@^14.2.4:
- version "14.2.4"
- resolved "https://registry.yarnpkg.com/next/-/next-14.2.4.tgz#ef66c39c71e2d8ad0a3caa0383c8933f4663e4d1"
- integrity sha512-R8/V7vugY+822rsQGQCjoLhMuC9oFj9SOi4Cl4b2wjDrseD0LRZ10W7R6Czo4w9ZznVSshKjuIomsRjvm9EKJQ==
+next@^14.2.32:
+ version "14.2.32"
+ resolved "https://registry.yarnpkg.com/next/-/next-14.2.32.tgz#279b544f0c8ed023c33454ce4d563d3e05c2f3fb"
+ integrity sha512-fg5g0GZ7/nFc09X8wLe6pNSU8cLWbLRG3TZzPJ1BJvi2s9m7eF991se67wliM9kR5yLHRkyGKU49MMx58s3LJg==
dependencies:
- "@next/env" "14.2.4"
+ "@next/env" "14.2.32"
"@swc/helpers" "0.5.5"
busboy "1.6.0"
caniuse-lite "^1.0.30001579"
@@ -1783,15 +1778,15 @@ next@^14.2.4:
postcss "8.4.31"
styled-jsx "5.1.1"
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.32"
+ "@next/swc-darwin-x64" "14.2.32"
+ "@next/swc-linux-arm64-gnu" "14.2.32"
+ "@next/swc-linux-arm64-musl" "14.2.32"
+ "@next/swc-linux-x64-gnu" "14.2.32"
+ "@next/swc-linux-x64-musl" "14.2.32"
+ "@next/swc-win32-arm64-msvc" "14.2.32"
+ "@next/swc-win32-ia32-msvc" "14.2.32"
+ "@next/swc-win32-x64-msvc" "14.2.32"
node-fetch@^2.6.12:
version "2.6.12"
@@ -2062,16 +2057,7 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0:
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
-postcss@8.4.27, postcss@^8.4.23:
- version "8.4.27"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.27.tgz#234d7e4b72e34ba5a92c29636734349e0d9c3057"
- integrity sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==
- dependencies:
- nanoid "^3.3.6"
- picocolors "^1.0.0"
- source-map-js "^1.0.2"
-
-postcss@8.4.31:
+postcss@8.4.31, postcss@^8.4.23:
version "8.4.31"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d"
integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==