diff --git a/netbox_proxbox/backend/routes/proxbox/clusters/__init__.py b/netbox_proxbox/backend/routes/proxbox/clusters/__init__.py
index 079a414..c93cf61 100755
--- a/netbox_proxbox/backend/routes/proxbox/clusters/__init__.py
+++ b/netbox_proxbox/backend/routes/proxbox/clusters/__init__.py
@@ -65,7 +65,7 @@ async def proxbox_get_clusters(
# Create Cluster Type object before the Cluster itself
try:
- logger.info("Creating the Cluster Type before Cluster...")
+ await log(websocket, "Creating the Cluster Type before Cluster...")
cluster_type_obj = await ClusterType(nb = nb).post(
data = {
"name": cluster_type_name,
@@ -77,7 +77,7 @@ async def proxbox_get_clusters(
# Create the Cluster
try:
- logger.info("Creating the Cluster...")
+ await log(websocket, "Creating the Cluster...")
cluster_obj = await Cluster(nb = nb).post(
data = {
"name": px.name,
@@ -117,11 +117,19 @@ def find_interface_type(
print(f'interface_type: {interface_type} / {type(interface_type)}')
return str(interface_type)
+from fastapi import WebSocket
+
+async def log(websocket, msg, level = None):
+ if level == "debug": logger.debug(msg)
+ else: logger.info(msg)
+
+ await websocket.send_text(msg)
@router.get("/nodes")
async def get_nodes(
nb: NetboxSessionDep,
pxs: ProxmoxSessionsDep,
+ websocket: WebSocket
):
"""Get Proxmox Nodes from a Cluster"""
@@ -129,6 +137,9 @@ async def get_nodes(
result = []
+
+ await websocket.send_text(data = "Test message")
+
for px in pxs:
# Get Cluster from Netbox based on Proxmox Cluster Name
@@ -144,7 +155,9 @@ async def get_nodes(
for node in proxmox_nodes:
try:
- logger.info("Creating Device related with the Virtual Machine(s)")
+ msg = f"Creating Device '{node.get("node")}' related with the Virtual Machine(s)"
+ await log(websocket, msg)
+
current_node = await Device(nb=nb).post(
data = {
"name": node.get("node"),
@@ -152,6 +165,10 @@ async def get_nodes(
"status": "active",
}
)
+
+ msg = f"Device '{current_node}' created successfully."
+ await log(websocket, msg)
+
except Exception as error:
raise ProxboxException(
message="Error trying to create Netbox Device object.",
@@ -183,7 +200,7 @@ async def get_nodes(
else: enabled = False
try:
- logger.info("Creating Netbox interface...")
+ await log(websocket, f"Creating Netbox '{interface_name}' Interface on '{current_node.name}' Device...")
create_interface = await Interface(nb=nb).post(data={
"device": current_node.id,
"name": interface_name,
@@ -207,7 +224,7 @@ async def get_nodes(
if cidr:
try:
- logger.info("Interface with CIDR/Network. Creating the IP Address object on Netbox...")
+ await log(websocket, "Interface with CIDR/Network. Creating the IP Address object on Netbox...")
# If interface with network configured, create IP Address and attach interface to it.
create_ipaddress = await IPAddress(nb=nb, primary_field_value=cidr).post(data={
"address": cidr,
@@ -235,7 +252,7 @@ async def get_nodes(
print(f'current_node: {current_node}')
try:
- logger.info("Searching children interface of a bridge.")
+ await log(websocket, "Searching children interface of a bridge.")
netbox_port = await Interface(nb=nb).get(
device=current_node.name,
name=port
@@ -257,9 +274,11 @@ async def get_nodes(
# Interface and Bridge Interface must belong to the same Device
- logger.info("Creating child interface of a bridge. Bridge interface and child must belong to the same device.")
+ await log(websocket, "Creating child interface of a bridge. Bridge interface and child must belong to the same device.")
if create_interface.device == current_node.id:
- print("Creating interface...")
+
+ await log(websocket, f"Creating interface '{port}'...")
+
try:
new_netbox_port = await Interface(nb=nb).post(data={
"device": current_node.id,
@@ -270,6 +289,9 @@ async def get_nodes(
"description": proxmox_port.get("comments", ""),
"bridge": create_interface.id
})
+
+ await log(websocket, f"Interface '{port}' created successfully.")
+
except Exception as error:
raise ProxboxException(
message="Error trying to create child interface of bridge interface.",
@@ -280,7 +302,7 @@ async def get_nodes(
print(f"[2] cidr: {cidr}")
if cidr:
- logger.info("If interface with network configured, create IP Address and attach interface to it.")
+ await log(websocket, "If interface with network configured, create IP Address and attach interface to it.")
try:
create_ipaddress = await IPAddress(nb=nb, primary_field_value=cidr).post(data={
"address": cidr,
@@ -292,7 +314,7 @@ async def get_nodes(
else:
- logger.info("Interface already exists. Attaching Bridge to Interface")
+ await log(websocket, "Interface already exists. Attaching Bridge to Interface")
print(f'create_interface: {create_interface}')
# Interface and Bridge Interface must belong to the same Device
if create_interface.device == current_node.id:
@@ -305,7 +327,7 @@ async def get_nodes(
print("\n")
- logger.debug(f"Nodes: {nodes}")
+ await log(websocket, f"Nodes: {nodes}", "debug")
result.append({
@@ -315,6 +337,7 @@ async def get_nodes(
}
})
+
return result
@router.get("/nodes/interfaces")
@@ -325,6 +348,7 @@ async def get_nodes_interfaces():
async def get_virtual_machines(
nb: NetboxSessionDep,
pxs: ProxmoxSessionsDep,
+ websocket: WebSocket
):
from enum import Enum
class VirtualMachineStatus(Enum):
@@ -599,7 +623,7 @@ class VirtualMachineStatus(Enum):
"status": VirtualMachineStatus(vm.get("status")).name,
"vcpus": int(vm.get("maxcpu", 0)),
"memory": int(vm_config.get("memory")),
- "disk": int(int(vm.get("maxdisk", 0)) / 1000000000),
+ "disk": int(int(vm.get("maxdisk", 0)) / 1000000),
"role": role.id,
"custom_fields": {
"proxmox_vm_id": vm.get("vmid"),
@@ -612,7 +636,7 @@ class VirtualMachineStatus(Enum):
}
try:
- logger.info("Creating Virtual Machine on Netbox...")
+ await log(websocket, "Creating Virtual Machine on Netbox...")
new_virtual_machine = await VirtualMachine(nb = nb).post(data = virtual_machine_data)
@@ -644,7 +668,7 @@ class VirtualMachineStatus(Enum):
vm_networks = []
network_id = 0
- logger.info("Getting network info and parsing data into JSON (dict)")
+ await log(websocket, "Getting network info and parsing data into JSON (dict)")
while True:
network_name = f"net{network_id}"
@@ -672,44 +696,50 @@ class VirtualMachineStatus(Enum):
if vm_networks:
for network in vm_networks:
- print(f"network: {network}")
- print(f"network (items): {network.items()}")
- for k, v in network.items():
- print(f'k: {k} / v: {v}')
-
-
- mac_address = None
-
- virtio = v.get("virtio", None)
- if virtio: mac_address=virtio
-
- hwaddr = v.get("hwaddr", None)
- if hwaddr: mac_address=hwaddr
-
- try:
- logger.info("Try creating VirtualMachine Interface on Netbox...")
+ try:
+ print(f"network: {network}")
+ print(f"network (items): {network.items()}")
+ for k, v in network.items():
+ print(f'k: {k} / v: {v}')
- #vm_already_exists = await VMInterface(nb=nb).get({
- # "virtual_machine": new_virtual_machine.id,
- # "name": str(k)
- #})
- #if not vm_already_exists:
-
- netbox_interface = await VMInterface(nb=nb).post(data={
- "virtual_machine": new_virtual_machine.id,
- "name": str(k),
- "enabled": True,
- "mac_address": mac_address,
- })
+ mac_address = None
- if netbox_interface:
- logger.info(f"Virtual Machine Interface created successfully. {netbox_interface.id} - {netbox_interface.name}")
-
- except Exception as error:
- raise ProxboxException(
- message="Error trying to create VM interface on Netbox",
- )
+ virtio = v.get("virtio", None)
+ if virtio: mac_address=virtio
+
+ hwaddr = v.get("hwaddr", None)
+ if hwaddr: mac_address=hwaddr
+
+ await log(websocket, "Try creating VirtualMachine Interface on Netbox...")
+ try:
+
+
+ #vm_already_exists = await VMInterface(nb=nb).get({
+ # "virtual_machine": new_virtual_machine.id,
+ # "name": str(k)
+ #})
+
+ #if not vm_already_exists:
+
+ netbox_interface = await VMInterface(nb=nb).post(data={
+ "virtual_machine": new_virtual_machine.id,
+ "name": str(k),
+ "enabled": True,
+ "mac_address": mac_address,
+ })
+
+ if netbox_interface:
+ await log(websocket, f"Virtual Machine Interface created successfully. {netbox_interface.id} - {netbox_interface.name}")
+
+ except Exception as error:
+ raise ProxboxException(
+ message="Error trying to create VM interface on Netbox",
+ )
+ except Exception as error:
+ raise ProxboxException(
+ message=f"Error trying to create {new_virtual_machine.name} VM Network Interfaces",
+ )
result.append({
"name": px.name,
diff --git a/netbox_proxbox/main.py b/netbox_proxbox/main.py
index 445d84e..af45d8c 100755
--- a/netbox_proxbox/main.py
+++ b/netbox_proxbox/main.py
@@ -1,7 +1,7 @@
from typing import Annotated
-from fastapi import FastAPI, Request
-from fastapi.responses import JSONResponse
+from fastapi import FastAPI, Request, WebSocket
+from fastapi.responses import JSONResponse, HTMLResponse
from netbox_proxbox.backend.exception import ProxboxException
@@ -42,10 +42,73 @@ async def proxmoxer_exception_handler(request: Request, exc: ProxboxException):
}
)
+from netbox_proxbox.backend.session.proxmox import ProxmoxSessionsDep
+from netbox_proxbox.backend.session.netbox import NetboxSessionDep
+
+@app.websocket("/ws")
+async def websocket_endpoint(
+ nb: NetboxSessionDep,
+ pxs: ProxmoxSessionsDep,
+ websocket: WebSocket
+):
+ await websocket.accept()
+
+ from netbox_proxbox.backend.routes.proxbox.clusters import get_nodes, get_virtual_machines
+
+ await get_nodes(nb=nb, pxs=pxs, websocket=websocket)
+ await get_virtual_machines(nb=nb, pxs=pxs, websocket=websocket)
+
+ while True:
+ data = await websocket.receive_text()
+ await websocket.send_text(f"Message text was: {data}")
+
+
#
# Routes (Endpoints)
#
+
+html = """
+
+
+
+ Chat
+
+
+ Log Messages
+
+
+
+
+
+"""
+
+@app.get("/websocket")
+async def get():
+ return HTMLResponse(html)
+
+
# Netbox Routes
app.include_router(netbox_router, prefix="/netbox", tags=["netbox"])
app.include_router(nb_dcim_router, prefix="/netbox/dcim", tags=["netbox / dcim"])
diff --git a/netbox_proxbox/templates/netbox_proxbox/home.html b/netbox_proxbox/templates/netbox_proxbox/home.html
index 6100ada..5f1c99a 100755
--- a/netbox_proxbox/templates/netbox_proxbox/home.html
+++ b/netbox_proxbox/templates/netbox_proxbox/home.html
@@ -2,8 +2,37 @@
{% load static %}
{% block content %}
+ Log Messages
+
+
+
+
+
+
+
{# Full Update Button#}
{% if perms.netbox_proxbox.add_proxmoxvm %}
diff --git a/standalone/package-lock.json b/standalone/package-lock.json
index 8c23a95..6b5be1f 100755
--- a/standalone/package-lock.json
+++ b/standalone/package-lock.json
@@ -12,9 +12,9 @@
"@heroicons/react": "^2.0.18",
"clsx": "^2.0.0",
"lucide-react": "^0.292.0",
- "next": "14.0.1",
- "react": "^18",
- "react-dom": "^18",
+ "next": "^14.2.11",
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1",
"tailwind-merge": "^2.0.0"
},
"devDependencies": {
@@ -220,9 +220,9 @@
}
},
"node_modules/@next/env": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.1.tgz",
- "integrity": "sha512-Ms8ZswqY65/YfcjrlcIwMPD7Rg/dVjdLapMcSHG26W6O67EJDF435ShW4H4LXi1xKO1oRc97tLXUpx8jpLe86A=="
+ "version": "14.2.11",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.11.tgz",
+ "integrity": "sha512-HYsQRSIXwiNqvzzYThrBwq6RhXo3E0n8j8nQnAs8i4fCEo2Zf/3eS0IiRA8XnRg9Ha0YnpkyJZIZg1qEwemrHw=="
},
"node_modules/@next/eslint-plugin-next": {
"version": "14.0.1",
@@ -234,9 +234,9 @@
}
},
"node_modules/@next/swc-darwin-arm64": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.1.tgz",
- "integrity": "sha512-JyxnGCS4qT67hdOKQ0CkgFTp+PXub5W1wsGvIq98TNbF3YEIN7iDekYhYsZzc8Ov0pWEsghQt+tANdidITCLaw==",
+ "version": "14.2.11",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.11.tgz",
+ "integrity": "sha512-eiY9u7wEJZWp/Pga07Qy3ZmNEfALmmSS1HtsJF3y1QEyaExu7boENz11fWqDmZ3uvcyAxCMhTrA1jfVxITQW8g==",
"cpu": [
"arm64"
],
@@ -249,9 +249,9 @@
}
},
"node_modules/@next/swc-darwin-x64": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.1.tgz",
- "integrity": "sha512-625Z7bb5AyIzswF9hvfZWa+HTwFZw+Jn3lOBNZB87lUS0iuCYDHqk3ujuHCkiyPtSC0xFBtYDLcrZ11mF/ap3w==",
+ "version": "14.2.11",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.11.tgz",
+ "integrity": "sha512-lnB0zYCld4yE0IX3ANrVMmtAbziBb7MYekcmR6iE9bujmgERl6+FK+b0MBq0pl304lYe7zO4yxJus9H/Af8jbg==",
"cpu": [
"x64"
],
@@ -264,9 +264,9 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.1.tgz",
- "integrity": "sha512-iVpn3KG3DprFXzVHM09kvb//4CNNXBQ9NB/pTm8LO+vnnnaObnzFdS5KM+w1okwa32xH0g8EvZIhoB3fI3mS1g==",
+ "version": "14.2.11",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.11.tgz",
+ "integrity": "sha512-Ulo9TZVocYmUAtzvZ7FfldtwUoQY0+9z3BiXZCLSUwU2bp7GqHA7/bqrfsArDlUb2xeGwn3ZuBbKtNK8TR0A8w==",
"cpu": [
"arm64"
],
@@ -279,9 +279,9 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.1.tgz",
- "integrity": "sha512-mVsGyMxTLWZXyD5sen6kGOTYVOO67lZjLApIj/JsTEEohDDt1im2nkspzfV5MvhfS7diDw6Rp/xvAQaWZTv1Ww==",
+ "version": "14.2.11",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.11.tgz",
+ "integrity": "sha512-fH377DnKGyUnkWlmUpFF1T90m0dADBfK11dF8sOQkiELF9M+YwDRCGe8ZyDzvQcUd20Rr5U7vpZRrAxKwd3Rzg==",
"cpu": [
"arm64"
],
@@ -294,9 +294,9 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.1.tgz",
- "integrity": "sha512-wMqf90uDWN001NqCM/auRl3+qVVeKfjJdT9XW+RMIOf+rhUzadmYJu++tp2y+hUbb6GTRhT+VjQzcgg/QTD9NQ==",
+ "version": "14.2.11",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.11.tgz",
+ "integrity": "sha512-a0TH4ZZp4NS0LgXP/488kgvWelNpwfgGTUCDXVhPGH6pInb7yIYNgM4kmNWOxBFt+TIuOH6Pi9NnGG4XWFUyXQ==",
"cpu": [
"x64"
],
@@ -309,9 +309,9 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.1.tgz",
- "integrity": "sha512-ol1X1e24w4j4QwdeNjfX0f+Nza25n+ymY0T2frTyalVczUmzkVD7QGgPTZMHfR1aLrO69hBs0G3QBYaj22J5GQ==",
+ "version": "14.2.11",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.11.tgz",
+ "integrity": "sha512-DYYZcO4Uir2gZxA4D2JcOAKVs8ZxbOFYPpXSVIgeoQbREbeEHxysVsg3nY4FrQy51e5opxt5mOHl/LzIyZBoKA==",
"cpu": [
"x64"
],
@@ -324,9 +324,9 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.1.tgz",
- "integrity": "sha512-WEmTEeWs6yRUEnUlahTgvZteh5RJc4sEjCQIodJlZZ5/VJwVP8p2L7l6VhzQhT4h7KvLx/Ed4UViBdne6zpIsw==",
+ "version": "14.2.11",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.11.tgz",
+ "integrity": "sha512-PwqHeKG3/kKfPpM6of1B9UJ+Er6ySUy59PeFu0Un0LBzJTRKKAg2V6J60Yqzp99m55mLa+YTbU6xj61ImTv9mg==",
"cpu": [
"arm64"
],
@@ -339,9 +339,9 @@
}
},
"node_modules/@next/swc-win32-ia32-msvc": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.1.tgz",
- "integrity": "sha512-oFpHphN4ygAgZUKjzga7SoH2VGbEJXZa/KL8bHCAwCjDWle6R1SpiGOdUdA8EJ9YsG1TYWpzY6FTbUA+iAJeww==",
+ "version": "14.2.11",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.11.tgz",
+ "integrity": "sha512-0U7PWMnOYIvM74GY6rbH6w7v+vNPDVH1gUhlwHpfInJnNe5LkmUZqhp7FNWeNa5wbVgRcRi1F1cyxp4dmeLLvA==",
"cpu": [
"ia32"
],
@@ -354,9 +354,9 @@
}
},
"node_modules/@next/swc-win32-x64-msvc": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.1.tgz",
- "integrity": "sha512-FFp3nOJ/5qSpeWT0BZQ+YE1pSMk4IMpkME/1DwKBwhg4mJLB9L+6EXuJi4JEwaJdl5iN+UUlmUD3IsR1kx5fAg==",
+ "version": "14.2.11",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.11.tgz",
+ "integrity": "sha512-gQpS7mcgovWoaTG1FbS5/ojF7CGfql1Q0ZLsMrhcsi2Sr9HEqsUZ70MPJyaYBXbk6iEAP7UXMD9HC8KY1qNwvA==",
"cpu": [
"x64"
],
@@ -409,11 +409,17 @@
"integrity": "sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==",
"dev": true
},
+ "node_modules/@swc/counter": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
+ "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="
+ },
"node_modules/@swc/helpers": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz",
- "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==",
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz",
+ "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==",
"dependencies": {
+ "@swc/counter": "^0.1.3",
"tslib": "^2.4.0"
}
},
@@ -989,9 +995,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001561",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz",
- "integrity": "sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==",
+ "version": "1.0.30001660",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz",
+ "integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==",
"funding": [
{
"type": "opencollective",
@@ -2084,11 +2090,6 @@
"node": ">=10.13.0"
}
},
- "node_modules/glob-to-regexp": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
- "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="
- },
"node_modules/globals": {
"version": "13.23.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
@@ -2920,17 +2921,17 @@
"dev": true
},
"node_modules/next": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/next/-/next-14.0.1.tgz",
- "integrity": "sha512-s4YaLpE4b0gmb3ggtmpmV+wt+lPRuGtANzojMQ2+gmBpgX9w5fTbjsy6dXByBuENsdCX5pukZH/GxdFgO62+pA==",
+ "version": "14.2.11",
+ "resolved": "https://registry.npmjs.org/next/-/next-14.2.11.tgz",
+ "integrity": "sha512-8MDFqHBhdmR2wdfaWc8+lW3A/hppFe1ggQ9vgIu/g2/2QEMYJrPoQP6b+VNk56gIug/bStysAmrpUKtj3XN8Bw==",
"dependencies": {
- "@next/env": "14.0.1",
- "@swc/helpers": "0.5.2",
+ "@next/env": "14.2.11",
+ "@swc/helpers": "0.5.5",
"busboy": "1.6.0",
- "caniuse-lite": "^1.0.30001406",
+ "caniuse-lite": "^1.0.30001579",
+ "graceful-fs": "^4.2.11",
"postcss": "8.4.31",
- "styled-jsx": "5.1.1",
- "watchpack": "2.4.0"
+ "styled-jsx": "5.1.1"
},
"bin": {
"next": "dist/bin/next"
@@ -2939,18 +2940,19 @@
"node": ">=18.17.0"
},
"optionalDependencies": {
- "@next/swc-darwin-arm64": "14.0.1",
- "@next/swc-darwin-x64": "14.0.1",
- "@next/swc-linux-arm64-gnu": "14.0.1",
- "@next/swc-linux-arm64-musl": "14.0.1",
- "@next/swc-linux-x64-gnu": "14.0.1",
- "@next/swc-linux-x64-musl": "14.0.1",
- "@next/swc-win32-arm64-msvc": "14.0.1",
- "@next/swc-win32-ia32-msvc": "14.0.1",
- "@next/swc-win32-x64-msvc": "14.0.1"
+ "@next/swc-darwin-arm64": "14.2.11",
+ "@next/swc-darwin-x64": "14.2.11",
+ "@next/swc-linux-arm64-gnu": "14.2.11",
+ "@next/swc-linux-arm64-musl": "14.2.11",
+ "@next/swc-linux-x64-gnu": "14.2.11",
+ "@next/swc-linux-x64-musl": "14.2.11",
+ "@next/swc-win32-arm64-msvc": "14.2.11",
+ "@next/swc-win32-ia32-msvc": "14.2.11",
+ "@next/swc-win32-x64-msvc": "14.2.11"
},
"peerDependencies": {
"@opentelemetry/api": "^1.1.0",
+ "@playwright/test": "^1.41.2",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"sass": "^1.3.0"
@@ -2959,6 +2961,9 @@
"@opentelemetry/api": {
"optional": true
},
+ "@playwright/test": {
+ "optional": true
+ },
"sass": {
"optional": true
}
@@ -3440,9 +3445,9 @@
]
},
"node_modules/react": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
- "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
"dependencies": {
"loose-envify": "^1.1.0"
},
@@ -3451,15 +3456,15 @@
}
},
"node_modules/react-dom": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
- "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
"dependencies": {
"loose-envify": "^1.1.0",
- "scheduler": "^0.23.0"
+ "scheduler": "^0.23.2"
},
"peerDependencies": {
- "react": "^18.2.0"
+ "react": "^18.3.1"
}
},
"node_modules/react-is": {
@@ -3647,9 +3652,9 @@
}
},
"node_modules/scheduler": {
- "version": "0.23.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
- "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
"dependencies": {
"loose-envify": "^1.1.0"
}
@@ -4072,9 +4077,9 @@
}
},
"node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
+ "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA=="
},
"node_modules/type-check": {
"version": "0.4.0",
@@ -4245,18 +4250,6 @@
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"dev": true
},
- "node_modules/watchpack": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
- "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
- "dependencies": {
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.1.2"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
diff --git a/standalone/package.json b/standalone/package.json
index f6ce722..d719277 100755
--- a/standalone/package.json
+++ b/standalone/package.json
@@ -15,9 +15,9 @@
"@heroicons/react": "^2.0.18",
"clsx": "^2.0.0",
"lucide-react": "^0.292.0",
- "next": "14.0.1",
- "react": "^18",
- "react-dom": "^18",
+ "next": "^14.2.11",
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1",
"tailwind-merge": "^2.0.0"
},
"devDependencies": {